From 06770f55c580c47200d3b0763fe28a317f25835b Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Thu, 25 Feb 2021 14:24:58 -0800 Subject: [PATCH 01/28] update python sdk docs --- docs/getting-started/concepts/sdk.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/getting-started/concepts/sdk.md b/docs/getting-started/concepts/sdk.md index 8306445b..285f6808 100644 --- a/docs/getting-started/concepts/sdk.md +++ b/docs/getting-started/concepts/sdk.md @@ -6,8 +6,10 @@ description: Onepanel - Python SDK Onepanel's [Python SDK](https://github.com/onepanelio/python-sdk) can be used to programmatically perform any task that is available through the web UI. +Additionally, you can use the Python SDK to [define Workflows](https://github.com/onepanelio/python-sdk/blob/master/examples/python-defined-workflow.ipynb) + Some examples include: -- [Define Workflow Templates in Python](https://github.com/onepanelio/python-sdk/blob/master/examples/python-defined-workflow.ipynb) +- [Define Workflows in Python](https://github.com/onepanelio/python-sdk/blob/master/examples/python-defined-workflow.ipynb) - [Execute Workflows from Workspaces](https://github.com/onepanelio/python-sdk/blob/master/examples/execute-workflow.ipynb) -- [Automatically launch CVAT annotation Workspaces](https://github.com/onepanelio/templates/blob/master/workflows/auto-cvat/template.yaml) \ No newline at end of file +- [Automatically launch CVAT annotation Workspaces](https://github.com/onepanelio/templates/tree/release-v0.18.0/workflows/auto-cvat) \ No newline at end of file From 2a77d8616d4de3d2866ee8e49ab598b63e9cf052 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Thu, 25 Feb 2021 14:27:03 -0800 Subject: [PATCH 02/28] remove unused blog section --- blog/2020-2-29-welcome.md | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 blog/2020-2-29-welcome.md diff --git a/blog/2020-2-29-welcome.md b/blog/2020-2-29-welcome.md deleted file mode 100644 index 1602930e..00000000 --- a/blog/2020-2-29-welcome.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -slug: welcome -title: Welcome -author: Rush Tehrani -author_title: CEO @ Onepanel -author_url: https://github.com/rushtehrani -author_image_url: http://1.gravatar.com/avatar/0d1dd8e9d8d8c1198781c5fe8af36184 -tags: [] ---- - -Welcome to Onepanel CE, an open source platform for building highly scalable, distributed and reproducible computer vision workflows on Kubernetes. - -We'll be using this space and Slack to announce new releases of Onepanel CE and make other community announcements. From 69a443ce0e4007bcdaed705c484e3a8619ee3a66 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Thu, 25 Feb 2021 14:38:19 -0800 Subject: [PATCH 03/28] remove dedicated api/sdk section --- docs/api-sdk/overview.md | 15 --------------- docusaurus.config.js | 1 - 2 files changed, 16 deletions(-) delete mode 100644 docs/api-sdk/overview.md diff --git a/docs/api-sdk/overview.md b/docs/api-sdk/overview.md deleted file mode 100644 index feb15245..00000000 --- a/docs/api-sdk/overview.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: APIs and SDKs -sidebar_label: APIs and SDKs -description: Automate your workflows using Onepanel's APIs or SDKs ---- - -You can currently integrate with Onepanel using either the APIs or the Python SDK. - -Refer to the documentation below to get started: - -- [API docs](https://onepanelio.github.io/core-api-docs) -- [Python SDK docs](https://github.com/onepanelio/python-sdk) and [examples](https://github.com/onepanelio/python-sdk/tree/master/examples) - - - diff --git a/docusaurus.config.js b/docusaurus.config.js index 10faed6d..94f5eb19 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -27,7 +27,6 @@ module.exports = { {to: 'docs/getting-started/quickstart', label: 'Getting Started', position: 'left'}, {to: 'docs/reference/overview', label: 'User Guide', position: 'left'}, {to: 'docs/deployment/overview', label: 'Operator Manual', position: 'left'}, - {to: 'docs/api-sdk/overview', label: 'APIs and SDKs', position: 'left'}, {href: 'https://github.com/onepanelio/core/releases', label: 'Releases', position: 'left'}, {href: 'https://github.com/onepanelio/core/milestones?direction=asc&sort=due_date&state=open', label: 'Roadmap', position: 'left'}, // {to: 'blog', label: 'Changelog', position: 'left'}, From d96ff0a8f90f6ad22f28f70d0c9103f8abd6dc44 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Thu, 25 Feb 2021 15:50:24 -0800 Subject: [PATCH 04/28] update python sdk docs --- docs/getting-started/concepts/sdk.md | 10 +++----- docs/reference/sdks/python.md | 38 ++++++++++++++++++++++++++++ sidebars.js | 8 ++++++ 3 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 docs/reference/sdks/python.md diff --git a/docs/getting-started/concepts/sdk.md b/docs/getting-started/concepts/sdk.md index 285f6808..35c215f3 100644 --- a/docs/getting-started/concepts/sdk.md +++ b/docs/getting-started/concepts/sdk.md @@ -4,12 +4,8 @@ sidebar_label: Python SDK description: Onepanel - Python SDK --- -Onepanel's [Python SDK](https://github.com/onepanelio/python-sdk) can be used to programmatically perform any task that is available through the web UI. +Onepanel's Python SDK can be used to programmatically perform any task that is available through the web UI. It is by default installed in all out of the box Workspaces and Workflows in Onepanel. -Additionally, you can use the Python SDK to [define Workflows](https://github.com/onepanelio/python-sdk/blob/master/examples/python-defined-workflow.ipynb) +Additionally, you can use the Python SDK to define Workflows in Python and execute them from any environment that supports Python. -Some examples include: - -- [Define Workflows in Python](https://github.com/onepanelio/python-sdk/blob/master/examples/python-defined-workflow.ipynb) -- [Execute Workflows from Workspaces](https://github.com/onepanelio/python-sdk/blob/master/examples/execute-workflow.ipynb) -- [Automatically launch CVAT annotation Workspaces](https://github.com/onepanelio/templates/tree/release-v0.18.0/workflows/auto-cvat) \ No newline at end of file +See [Python SDK](/docs/reference/sdks/python) in **User Guide** for more detailed information. \ No newline at end of file diff --git a/docs/reference/sdks/python.md b/docs/reference/sdks/python.md new file mode 100644 index 00000000..3360debb --- /dev/null +++ b/docs/reference/sdks/python.md @@ -0,0 +1,38 @@ +--- +title: Python SDK +sidebar_label: Python SDK +description: Onepanel - Python SDK +--- + +Onepanel's Python SDK can be used to programmatically perform any task that is available through the web UI. + +Additionally, you can use the Python SDK to [define and execute](https://github.com/onepanelio/python-sdk/blob/master/examples/python-defined-workflow.ipynb) Workflows in Python instead of YAML. + +## Installation +:::important +The Python SDK is already installed in all the Workspace and Workflow templates that are available in Onepanel out of the box. +::: + +The Python SDK can be installed via PyPi as follows: + +```bash +pip install onepanel-sdk +``` + +## Reference + +See [Getting started](https://github.com/onepanelio/python-sdk#getting-started) in the Python SDK repository for sample code and API reference. + +## Defining Workflows in Python + +The Python SDK is integrated with [Couler](https://github.com/couler-proj/couler) making it possible to define Workflows in Python instead of YAML. + +For a complete example of defining a Workflow with data augmentation and training tasks, see [this notebook](https://github.com/onepanelio/python-sdk/blob/master/examples/python-defined-workflow.ipynb). + +## Sample JupyterLab notebooks + +Here are some example notebooks that you can run from a JupyterLab Workspace in Onepanel: + +- [Define Workflows in Python](https://github.com/onepanelio/python-sdk/blob/master/examples/python-defined-workflow.ipynb) +- [Execute Workflows from Workspaces](https://github.com/onepanelio/python-sdk/blob/master/examples/execute-workflow.ipynb) +- [Automatically launch CVAT annotation Workspaces](https://github.com/onepanelio/templates/tree/release-v0.18.0/workflows/auto-cvat) \ No newline at end of file diff --git a/sidebars.js b/sidebars.js index 783dc4d8..e5537467 100644 --- a/sidebars.js +++ b/sidebars.js @@ -140,5 +140,13 @@ module.exports = { 'reference/jupyterlab/language-server', ] }, + { + type: 'category', + label: 'SDKs', + collapsed: false, + items: [ + 'reference/sdks/python', + ] + }, ] }; From 8864b16d44650d0357d89d5ba6962a49a8ccf8fc Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Thu, 25 Feb 2021 15:54:46 -0800 Subject: [PATCH 05/28] update environment variable docs --- .../concepts/environment-variables.md | 6 +++++- static/img/environment-variables-155310.png | Bin 0 -> 63127 bytes 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 static/img/environment-variables-155310.png diff --git a/docs/getting-started/concepts/environment-variables.md b/docs/getting-started/concepts/environment-variables.md index f04795c5..e3ab7310 100644 --- a/docs/getting-started/concepts/environment-variables.md +++ b/docs/getting-started/concepts/environment-variables.md @@ -4,7 +4,7 @@ sidebar_label: Environment variables description: Manage environment variables on Onepanel --- -Environment variables are unique to each namespace and will automatically added to any container in [Workspaces](/docs/getting-started/concepts/workspaces) or [Workflows](/docs/getting-started/concepts/workflows). +Environment variables are unique to each namespace and will be automatically added to any running Workspace or Workflow Task. The following system environment variables are always automatically added to both Workspaces and Workflow containers: @@ -13,3 +13,7 @@ The following system environment variables are always automatically added to bot - `ONEPANEL_DOMAIN` Domain name where the platform is installed. Example: `sub.domain.com` - `ONEPANEL_RESOURCE_NAMESPACE` The namespace where the resource is running. - `ONEPANEL_RESOURCE_UID` The unique ID of the resource in namespace. + +You can add your own environment variables by navigating to the **Settings** and clicking **Add environment variable**. + +![](../../../static/img/environment-variables-155310.png) \ No newline at end of file diff --git a/static/img/environment-variables-155310.png b/static/img/environment-variables-155310.png new file mode 100644 index 0000000000000000000000000000000000000000..8970cf655f2a2a429a981a19b6648b7544ae881d GIT binary patch literal 63127 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 rSbRj$`T{)>hq)t~zQn-+Cycpv#?J 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 literal 0 HcmV?d00001 From b8bc2f4a831053592265d9afcc70fe66d15516d3 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Thu, 25 Feb 2021 16:03:53 -0800 Subject: [PATCH 06/28] fix typo --- docs/getting-started/concepts/environment-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/concepts/environment-variables.md b/docs/getting-started/concepts/environment-variables.md index e3ab7310..062f30de 100644 --- a/docs/getting-started/concepts/environment-variables.md +++ b/docs/getting-started/concepts/environment-variables.md @@ -14,6 +14,6 @@ The following system environment variables are always automatically added to bot - `ONEPANEL_RESOURCE_NAMESPACE` The namespace where the resource is running. - `ONEPANEL_RESOURCE_UID` The unique ID of the resource in namespace. -You can add your own environment variables by navigating to the **Settings** and clicking **Add environment variable**. +You can add your own environment variables by navigating to the **Settings** menu and clicking **Add environment variable**. ![](../../../static/img/environment-variables-155310.png) \ No newline at end of file From 637ad53738f5eea6f7d9e7c7c050c852b64af1f7 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Fri, 26 Feb 2021 13:47:42 -0800 Subject: [PATCH 07/28] add missing quickstart step --- docs/getting-started/quickstart.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started/quickstart.md b/docs/getting-started/quickstart.md index f7407046..13c952aa 100644 --- a/docs/getting-started/quickstart.md +++ b/docs/getting-started/quickstart.md @@ -13,6 +13,7 @@ In this quick start, we will walk you through: 1. Deploying Onepanel to one of the major cloud providers. 2. Labelling your images or video using the integrated annotation Workspace. 3. Training your model with the newly labelled data using the integrated training Workflows. +4. Automatically annotating new data using your newly trained model. Before getting started, take a look at [concepts](/docs/getting-started/concepts/namespaces) to understand the different components in Onepanel. From 7033449d126b8a29d28ca851c7a9294956c655fa Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Fri, 26 Feb 2021 19:22:39 -0800 Subject: [PATCH 08/28] update home page --- src/css/custom.css | 49 ++++++++++ src/pages/index.js | 134 +++++++++++++------------- src/pages/styles.module.css | 6 +- static/img/landing/arrow.svg | 12 +++ static/img/landing/build.svg | 170 +++++++++++++++++++++++++++++++++ static/img/landing/deploy.svg | 1 + static/img/landing/prepare.svg | 49 ++++++++++ static/img/landing/train.svg | 77 +++++++++++++++ 8 files changed, 427 insertions(+), 71 deletions(-) create mode 100644 static/img/landing/arrow.svg create mode 100644 static/img/landing/build.svg create mode 100644 static/img/landing/deploy.svg create mode 100644 static/img/landing/prepare.svg create mode 100644 static/img/landing/train.svg diff --git a/src/css/custom.css b/src/css/custom.css index 01df54b5..e765da07 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -312,3 +312,52 @@ ol > li::before { article > div > span.badge--secondary { display: none; } + +.features_src-pages- { + background-color: #fafafa; +} + +/* .features_src-pages- .col--3 { + border-right: 1px dashed #eee; +} + +.features_src-pages- .col--3:last-child { + border-right: none; +} */ + +.features__list ul { + list-style-type: none; + font-size: 12px; + line-height: 18px; +} + +.features__list ul li { + margin-bottom: 12px; +} + +.features__list ul li h4 { + font-size: 12px; + color: var(--ifm-color-primary-darkest); + margin-bottom: 4px; +} + +.features_src-pages- .features__arrow-1 { + position: relative; + right: -100px; + height: 20px; + top: 2px; +} + +.features_src-pages- .features__arrow-2 { + position: relative; + right: -100px; + height: 20px; + top: 2px; +} + +.features_src-pages- .features__arrow-3 { + position: relative; + right: -75px; + height: 20px; + top: 2px; +} \ No newline at end of file diff --git a/src/pages/index.js b/src/pages/index.js index 10337454..c6925fe2 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -8,108 +8,106 @@ import styles from './styles.module.css'; const features = [ { - title: <>Image and video annotation with automatic pre-annotation, - imageUrl: 'img/landing/ann.png', + title: <>Prepare , + imageUrl: 'img/landing/prepare.svg', description: ( <> - Annotate images and video using CVAT, with object tracking and semi-automatic annotation of bounding boxes and polygon masks. +
    +
  • +

    Computer Vision Annotation Tool

    + Annotate images and videos with automatic annotation for semantic segmentation and object detection +
  • +
  • +

    Data augmentation and processing

    + Augment and pre-process your data using Albumentations, imgaug or bring-your-own library +
  • +
  • +

    Bring your own tools

    + Bring your own data preparation and annotation tools and integrate them into your pipelines +
  • +
), }, - // { - // title: <>Deploy complete aerial imaging pipelines with photogrammetry tools, - // imageUrl: 'img/landing/odm.png', - // description: ( - // <> - // Leverage tools like WebODM with GPUs to accelerate image processing and to perform pre-annotation for object detection. - // - // ), - // }, { - title: <>Build your models with GPU optimized frameworks and IDEs, - imageUrl: 'img/landing/env.png', + title: <>Build , + imageUrl: 'img/landing/build.svg', description: ( <> - Seamlessly switch environments between CPU and GPU machines, preloaded with PyTorch, TensorFlow, JupyterLab, VSCode and more. +
    +
  • +

    Elastic JupyterLab Workspaces

    + JupyterLab with TensorBoard, Git, debugging, diffing, Conda, OpenCV, TensorFlow, PyTorch and GPU support +
  • +
  • +

    Elastic VS Code Workspaces

    + VSCode environments with the same libraries and tools that are consistent with your other environments +
  • +
  • +

    Bring your own IDE or VNC tools

    + Bring your own IDEs or VNC tools using a robust YAML and Docker based templating engine +
  • +
), }, { - title: <>Create pipelines as code for model training and data processing, - imageUrl: 'img/landing/pip.png', + title: <>Train and Tune , + imageUrl: 'img/landing/train.svg', description: ( <> - Build reproducible training and data processing pipelines that can perform parallel or distributed tasks on multiple machines. +
    +
  • +

    Training pipelines

    + Train models with built-in algorithms for object detection and semantic segmentation +
  • +
  • +

    Hyperparameter tuning

    + Fully integrated with NNI for hyperparameter tuning for object detection and semantic segmentation +
  • +
  • +

    Visualization tools

    + Training and tuning visualizations with TensorBoard and NNI Web UI +
  • +
), }, { - title: <>Track experiments and visualize model metrics, - imageUrl: 'img/landing/met.png', + title: <>Deploy and Manage, + imageUrl: 'img/landing/deploy.svg', description: ( <> - Track and visualize model metrics and experiments with TensorBoard or bring your own experiment tracking tools. +
    +
  • +

    Workflow orchestration

    + Automate, orchestrate and schedule distributed and parallel workflows across multiple machines +
  • +
  • +

    Inference and model ensembles

    + Use your trained models to run inference Workflows or ensemble multiple models in the same Workflow +
  • +
  • +

    Python SDK

    + Programmatically perform any task that is available through the web UI +
  • +
), }, - // { - // title: <>Web-based VNC environments that you can access with your browser, - // imageUrl: 'img/landing/vnc.png', - // description: ( - // <> - // Access and share tools like AirSim, Carla, Gazebo or OpenAI Gym through your browser with VNC enabled workspaces. - // - // ), - // }, - { - title: <>Bring your own tools as reproducible templates, - imageUrl: 'img/landing/mod.png', - description: ( - <> - Easily bring your own specialized cloud-native tools for development, annotation, pipelines and more. - - ), - }, - { - title: <>Integrate with existing systems using APIs and SDKs, - imageUrl: 'img/landing/sdk.png', - description: ( - <> - Extend Onepanel with our powerful REST APIs and SDKs to further automate your pipelines and environments. - - ), - }, - // { - // title: <>Infrastructure and workflows as code, - // imageUrl: 'img/landing/iac.png', - // description: ( - // <> - // Workflows, environments and infrastructure are all defined as code and version controlled, making them reproducible and portable. - // - // ), - // }, - // { - // title: <>Powered by Kubernetes so you can deploy anywhere, - // imageUrl: 'img/landing/k8s.png', - // description: ( - // <> - // Powered by Kubernetes so you can deploy anywhere Kubernetes can run. - // - // ), - // } ]; function Feature({imageUrl, title, description}) { const imgUrl = useBaseUrl(imageUrl); return ( -
+
{imgUrl && (
{title}
)}

{title}

-

{description}

+

{description}

); } diff --git a/src/pages/styles.module.css b/src/pages/styles.module.css index 7c58c480..4924d009 100644 --- a/src/pages/styles.module.css +++ b/src/pages/styles.module.css @@ -30,7 +30,7 @@ } .featureImage { - height: 150px; - width: 150px; - padding: 20px; + height: 160px; + width: 180px; + padding: 10px; } diff --git a/static/img/landing/arrow.svg b/static/img/landing/arrow.svg new file mode 100644 index 00000000..df31f662 --- /dev/null +++ b/static/img/landing/arrow.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/img/landing/build.svg b/static/img/landing/build.svg new file mode 100644 index 00000000..bfd64c1d --- /dev/null +++ b/static/img/landing/build.svg @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/landing/deploy.svg b/static/img/landing/deploy.svg new file mode 100644 index 00000000..6f52d8bd --- /dev/null +++ b/static/img/landing/deploy.svg @@ -0,0 +1 @@ +launching \ No newline at end of file diff --git a/static/img/landing/prepare.svg b/static/img/landing/prepare.svg new file mode 100644 index 00000000..50ce9485 --- /dev/null +++ b/static/img/landing/prepare.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/landing/train.svg b/static/img/landing/train.svg new file mode 100644 index 00000000..4f532eb6 --- /dev/null +++ b/static/img/landing/train.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 1e8ce1e525d1c09d9f12b21d2bdd0abf1773dd11 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Sat, 27 Feb 2021 14:29:56 -0800 Subject: [PATCH 09/28] update home page --- docusaurus.config.js | 2 +- src/css/custom.css | 34 ++++++++++++++++++++++++++-------- src/pages/index.js | 6 +++--- src/pages/styles.module.css | 2 +- 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 94f5eb19..9c389b95 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -1,6 +1,6 @@ module.exports = { title: 'The open source, end-to-end vision AI platform', - tagline: 'The open source, production grade, end-to-end vision AI platform with fully integrated modules for model building, automated labeling, data processing, model training and hyperparameter tuning.', + tagline: 'The open source integrated development environment (IDE) for computer vision', url: 'https://docs.onepanel.ai', baseUrl: '/', favicon: 'img/favicon.png', diff --git a/src/css/custom.css b/src/css/custom.css index e765da07..6b6852c9 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -19,8 +19,15 @@ --ifm-heading-color: var(--ifm-color-primary-darker); --ifm-font-size-base: 16px; --ifm-list-left-padding: 1.25rem; - --ifm-navbar-link-hover-color: rgb(255, 255, 255); - --ifm-navbar-link-color: rgb(255, 255, 255, 0.8); +} + +.heroBanner_src-pages- { + padding: 1rem 0 !important; +} + +.hero--primary { + --ifm-hero-background-color: #E4ECF2; + --ifm-hero-text-color: var(--ifm-font-color-base); } ol > li::marker { @@ -67,19 +74,19 @@ ol > li::marker { } .button--primary { - background-color: #ff9100; - border-color: #ff9100; + background-color: var(--ifm-color-primary); + border-color: var(--ifm-color-primary); color: #fff; } .button--primary.button--outline { background-color: transparent; - border-color: #ff9100; - color: #ff9100; + border-color: var(--ifm-color-primary); + color: var(--ifm-color-primary); } .hero__name { - color: var(--ifm-font-base-color-inverse); + color: var(--ifm-color-primary); font-size: 3rem; } @@ -88,7 +95,14 @@ ol > li::marker { font-size: 2rem; } +.hero__subtitle { + font-size: 1.2rem; + color: var(--ifm-color-primary); +} + .hero__video { + width: 700px; + margin: 0 auto; margin-top: 2rem; } @@ -314,7 +328,7 @@ article > div > span.badge--secondary { } .features_src-pages- { - background-color: #fafafa; + background-color: #f8fafc; } /* .features_src-pages- .col--3 { @@ -341,6 +355,10 @@ article > div > span.badge--secondary { margin-bottom: 4px; } +.features_src-pages- { + padding: 0.5rem !important; +} + .features_src-pages- .features__arrow-1 { position: relative; right: -100px; diff --git a/src/pages/index.js b/src/pages/index.js index c6925fe2..189a4299 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -121,13 +121,13 @@ function Home() { description="The open source vision AI platform with fully integrated modules for model building, automated labeling, data processing, model training and hyperparameter tuning.">
-

Onepanel

+

Onepanel CE

{/*

{siteConfig.title}

*/}

{siteConfig.tagline}

@@ -135,7 +135,7 @@ function Home() { diff --git a/src/pages/styles.module.css b/src/pages/styles.module.css index 4924d009..117d8eb2 100644 --- a/src/pages/styles.module.css +++ b/src/pages/styles.module.css @@ -31,6 +31,6 @@ .featureImage { height: 160px; - width: 180px; + width: 160px; padding: 10px; } From a4073a44aa18223e2ae02b80b1a3deff3006d526 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Sat, 27 Feb 2021 14:33:30 -0800 Subject: [PATCH 10/28] update cta --- src/pages/index.js | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/pages/index.js b/src/pages/index.js index 189a4299..b6130f5f 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -131,16 +131,9 @@ function Home() { styles.getStarted, )} to={useBaseUrl('docs/getting-started/quickstart')}> - DEPLOY ONEPANEL - - - CONTRIBUTE + DEPLOY ONEPANEL ON ANY CLOUD +
{/* */} From 98135e5a4272b21dcbc6ccd9f4ef3a20b0069c9c Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Sat, 27 Feb 2021 14:37:40 -0800 Subject: [PATCH 11/28] update homepage arrows --- static/img/landing/arrow.svg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/static/img/landing/arrow.svg b/static/img/landing/arrow.svg index df31f662..f8b0f0c9 100644 --- a/static/img/landing/arrow.svg +++ b/static/img/landing/arrow.svg @@ -1,10 +1,10 @@ - - + + - + - + From 5c6dec1102c3c80b4b8d1e8d1db1d5e72c0fdcfd Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Sat, 27 Feb 2021 16:25:45 -0800 Subject: [PATCH 12/28] homepage updates --- src/css/custom.css | 10 +++++----- src/pages/index.js | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/css/custom.css b/src/css/custom.css index 6b6852c9..a91e8a25 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -22,7 +22,7 @@ } .heroBanner_src-pages- { - padding: 1rem 0 !important; + padding: 1.2rem 0 !important; } .hero--primary { @@ -74,8 +74,8 @@ ol > li::marker { } .button--primary { - background-color: var(--ifm-color-primary); - border-color: var(--ifm-color-primary); + background-color: #F28627; + border-color: #F28627; color: #fff; } @@ -96,12 +96,12 @@ ol > li::marker { } .hero__subtitle { - font-size: 1.2rem; + font-size: 1.3rem; color: var(--ifm-color-primary); } .hero__video { - width: 700px; + width: 40vw; margin: 0 auto; margin-top: 2rem; } diff --git a/src/pages/index.js b/src/pages/index.js index b6130f5f..efbb83e8 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -131,7 +131,7 @@ function Home() { styles.getStarted, )} to={useBaseUrl('docs/getting-started/quickstart')}> - DEPLOY ONEPANEL ON ANY CLOUD + DEPLOY ONEPANEL TO ANY CLOUD
From 86db312531a83b63affcb358f3d98d477dbd9044 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Sat, 27 Feb 2021 22:16:25 -0800 Subject: [PATCH 13/28] more homepage updates --- src/css/custom.css | 29 +++++++++++++++++++---------- static/img/landing/video-bg.svg | 5 +++++ 2 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 static/img/landing/video-bg.svg diff --git a/src/css/custom.css b/src/css/custom.css index a91e8a25..56e35b41 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -22,11 +22,11 @@ } .heroBanner_src-pages- { - padding: 1.2rem 0 !important; + padding: 1.2rem 0 0 0 !important; } .hero--primary { - --ifm-hero-background-color: #E4ECF2; + --ifm-hero-background-color: #e4ecf2; --ifm-hero-text-color: var(--ifm-font-color-base); } @@ -74,11 +74,18 @@ ol > li::marker { } .button--primary { - background-color: #F28627; - border-color: #F28627; + background-color: #f28627; + border-color: #f28627; color: #fff; } +.button--primary:active, +.button--primary:hover, +.button--primary.button--active { + background-color: #e27d25; + border-color: #e27d25; +} + .button--primary.button--outline { background-color: transparent; border-color: var(--ifm-color-primary); @@ -101,9 +108,15 @@ ol > li::marker { } .hero__video { - width: 40vw; margin: 0 auto; - margin-top: 2rem; + padding-top: 2rem; + padding-bottom: 1.2rem; + background-image: url('/img/landing/video-bg.svg'); +} + +.hero__video video { + width: 40vw; + border: 4px solid #cedde9; } .navbar--light { @@ -119,10 +132,6 @@ ol > li::marker { padding: 0 var(--ifm-pre-padding); } -.button.button--secondary.button--outline:not(.button--active):not(:hover) { - color: var(--ifm-color-secondary); -} - .ml-1 { margin-left: 10px; } diff --git a/static/img/landing/video-bg.svg b/static/img/landing/video-bg.svg new file mode 100644 index 00000000..75f1f482 --- /dev/null +++ b/static/img/landing/video-bg.svg @@ -0,0 +1,5 @@ + + + + + From 84c5bb9b19ddc4b3f5d7f5caf4684d76ecb2ac34 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Sun, 28 Feb 2021 12:30:57 -0800 Subject: [PATCH 14/28] update fonts --- docusaurus.config.js | 14 +++++++------- src/css/custom.css | 18 ++++++++++++++++++ src/pages/index.js | 4 +++- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 9c389b95..44cf513f 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -10,13 +10,13 @@ module.exports = { colorMode: { disableSwitch: true, }, - announcementBar: { - id: 'supportus', - content: - 'If you like Onepanel, give it a star on GitHub! ⭐️', - backgroundColor: '#013d6d', - textColor: '#fff', - }, + // announcementBar: { + // id: 'supportus', + // content: + // 'If you like Onepanel, give it a star on GitHub! ⭐️', + // backgroundColor: '#013d6d', + // textColor: '#fff', + // }, navbar: { title: '', logo: { diff --git a/src/css/custom.css b/src/css/custom.css index 56e35b41..34a669d6 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -3,6 +3,7 @@ * bundles Infima by default. Infima is a CSS framework designed to * work well for content-centric websites. */ + @import url('https://fonts.googleapis.com/css2?family=Questrial&display=swap'); /* You can override the default Infima variables here. */ :root { @@ -21,6 +22,10 @@ --ifm-list-left-padding: 1.25rem; } +body { + font-family: 'Questrial', sans-serif; +} + .heroBanner_src-pages- { padding: 1.2rem 0 0 0 !important; } @@ -97,6 +102,19 @@ ol > li::marker { font-size: 3rem; } +.hero__name div { + display: inline-block; + color: #fff; + background-color: var(--ifm-color-primary); + font-size: 1rem; + line-height: 1.2rem; + padding: 5px 5px 3px; + border-radius: 4px; + position: relative; + vertical-align: middle; + top: -8px; +} + .hero__title { color: var(--ifm-font-base-color-inverse); font-size: 2rem; diff --git a/src/pages/index.js b/src/pages/index.js index efbb83e8..68c88d0d 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -121,7 +121,9 @@ function Home() { description="The open source vision AI platform with fully integrated modules for model building, automated labeling, data processing, model training and hyperparameter tuning.">
-

Onepanel CE

+

+ Onepanel
CE
+

{/*

{siteConfig.title}

*/}

{siteConfig.tagline}

From e30744619422837525ca2231f8b18d50e9fb61ca Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Sun, 28 Feb 2021 12:39:15 -0800 Subject: [PATCH 15/28] minor homepage update --- src/css/custom.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/css/custom.css b/src/css/custom.css index 34a669d6..4c4e5a02 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -134,7 +134,8 @@ ol > li::marker { .hero__video video { width: 40vw; - border: 4px solid #cedde9; + border: 5px solid #cedde9; + border-radius: 6px; } .navbar--light { From f843f4b86a447d0a6b66e67f566cb4c4aff71e81 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Mon, 1 Mar 2021 09:42:43 -0800 Subject: [PATCH 16/28] fix fonts --- src/css/custom.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/css/custom.css b/src/css/custom.css index 4c4e5a02..62d34f69 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -369,16 +369,16 @@ article > div > span.badge--secondary { .features__list ul { list-style-type: none; - font-size: 12px; - line-height: 18px; + font-size: 0.85rem; + line-height: 1.2rem; } .features__list ul li { - margin-bottom: 12px; + margin-bottom: 1.2rem; } .features__list ul li h4 { - font-size: 12px; + font-size: 0.85rem; color: var(--ifm-color-primary-darkest); margin-bottom: 4px; } From ac1fdccadea431467d3f02bc3c8400d53de37764 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Mon, 1 Mar 2021 09:58:38 -0800 Subject: [PATCH 17/28] update image --- static/img/landing/prepare.svg | 95 +++++++++++++++++----------------- 1 file changed, 47 insertions(+), 48 deletions(-) diff --git a/static/img/landing/prepare.svg b/static/img/landing/prepare.svg index 50ce9485..1914770b 100644 --- a/static/img/landing/prepare.svg +++ b/static/img/landing/prepare.svg @@ -1,49 +1,48 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 7b83a70f99b5bd5d2c5fb7594a13e7ef8121b495 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Mon, 1 Mar 2021 12:11:16 -0800 Subject: [PATCH 18/28] update hero background --- src/css/custom.css | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/css/custom.css b/src/css/custom.css index 62d34f69..a9859624 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -130,10 +130,11 @@ ol > li::marker { padding-top: 2rem; padding-bottom: 1.2rem; background-image: url('/img/landing/video-bg.svg'); + background-size: cover; } .hero__video video { - width: 40vw; + width: 680px; border: 5px solid #cedde9; border-radius: 6px; } @@ -359,14 +360,6 @@ article > div > span.badge--secondary { background-color: #f8fafc; } -/* .features_src-pages- .col--3 { - border-right: 1px dashed #eee; -} - -.features_src-pages- .col--3:last-child { - border-right: none; -} */ - .features__list ul { list-style-type: none; font-size: 0.85rem; From ce6c84bea032f879f9b078d74df2d2397cda8fe5 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Mon, 1 Mar 2021 13:34:06 -0800 Subject: [PATCH 19/28] add platform icons --- src/css/custom.css | 11 +++++++++++ src/pages/index.js | 6 ++++-- static/img/landing/platforms.svg | 24 ++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 static/img/landing/platforms.svg diff --git a/src/css/custom.css b/src/css/custom.css index a9859624..5427fba0 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -125,6 +125,17 @@ ol > li::marker { color: var(--ifm-color-primary); } +.hero__platforms { + font-size: 0.8rem; + color: var(--ifm-color-primary); + margin: 0.2rem; +} + +.hero__platforms img { + vertical-align: middle; + margin-left: 5px; +} + .hero__video { margin: 0 auto; padding-top: 2rem; diff --git a/src/pages/index.js b/src/pages/index.js index 68c88d0d..a9aff0ab 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -133,9 +133,11 @@ function Home() { styles.getStarted, )} to={useBaseUrl('docs/getting-started/quickstart')}> - DEPLOY ONEPANEL TO ANY CLOUD + GET STARTED WITH ONEPANEL - +
+
+ deploy to aws, azure, gcp, kubernetes
{/* */} diff --git a/static/img/landing/platforms.svg b/static/img/landing/platforms.svg new file mode 100644 index 00000000..bd85cce1 --- /dev/null +++ b/static/img/landing/platforms.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + From f568502ffdc8303608b5b7ebf5be8913abd8bc52 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Mon, 1 Mar 2021 13:38:07 -0800 Subject: [PATCH 20/28] fix images --- src/pages/styles.module.css | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/pages/styles.module.css b/src/pages/styles.module.css index 117d8eb2..4424f805 100644 --- a/src/pages/styles.module.css +++ b/src/pages/styles.module.css @@ -30,7 +30,6 @@ } .featureImage { - height: 160px; - width: 160px; - padding: 10px; + width: 180px; + height: 150px; } From 49e0e07d145237896533616135c801e600c17fc3 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Mon, 1 Mar 2021 14:40:23 -0800 Subject: [PATCH 21/28] update footer color --- src/css/custom.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/css/custom.css b/src/css/custom.css index 5427fba0..e372d385 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -10,7 +10,7 @@ --ifm-color-primary: #01579b; --ifm-color-primary-dark: #014e8b; --ifm-color-primary-darker: #014a84; - --ifm-color-primary-darkest: #013d6d; + --ifm-color-primary-darkest: #00233f; --ifm-color-primary-light: #0160ab; --ifm-color-primary-lighter: #0164b2; --ifm-color-primary-lightest: #0171ca; @@ -410,4 +410,8 @@ article > div > span.badge--secondary { right: -75px; height: 20px; top: 2px; +} + +.footer { + background-color: var(--ifm-color-primary-darkest); } \ No newline at end of file From f1b3d479cea4ec1fc99063114b9cb165f3ebdf7e Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Mon, 1 Mar 2021 14:47:30 -0800 Subject: [PATCH 22/28] update homepage font colors --- src/css/custom.css | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/css/custom.css b/src/css/custom.css index e372d385..c1bd9a8f 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -357,7 +357,7 @@ ol > li::before { left: -26px; height: 26px; width: 26px; - color: var(--ifm-heading-color); + color: var(--ifm-color-primary); font-size: 18px; font-weight: bold; } @@ -371,6 +371,10 @@ article > div > span.badge--secondary { background-color: #f8fafc; } +.features_src-pages- h3 { + color: var(--ifm-color-primary); +} + .features__list ul { list-style-type: none; font-size: 0.85rem; @@ -383,7 +387,7 @@ article > div > span.badge--secondary { .features__list ul li h4 { font-size: 0.85rem; - color: var(--ifm-color-primary-darkest); + color: var(--ifm-color-primary); margin-bottom: 4px; } From 35b2da75eabc2aba16af05ec836b8ffcd2f2d687 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Mon, 1 Mar 2021 14:57:57 -0800 Subject: [PATCH 23/28] update icon to svg --- static/img/icon.svg | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 static/img/icon.svg diff --git a/static/img/icon.svg b/static/img/icon.svg new file mode 100644 index 00000000..48d2f556 --- /dev/null +++ b/static/img/icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + From 20e545fef6593eea1a2f4c8719f8a67b4e5eba71 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Mon, 1 Mar 2021 17:36:35 -0800 Subject: [PATCH 24/28] update text --- docusaurus.config.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 44cf513f..f51211f9 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -1,6 +1,6 @@ module.exports = { - title: 'The open source, end-to-end vision AI platform', - tagline: 'The open source integrated development environment (IDE) for computer vision', + title: 'The open and extensible IDE for computer vision', + tagline: 'The open and extensible integrated development environment (IDE) for computer vision', url: 'https://docs.onepanel.ai', baseUrl: '/', favicon: 'img/favicon.png', @@ -21,7 +21,7 @@ module.exports = { title: '', logo: { alt: 'Onepanel logo', - src: 'img/icon.png', + src: 'img/icon.svg', }, items: [ {to: 'docs/getting-started/quickstart', label: 'Getting Started', position: 'left'}, From c775b57637f7fdce618765453267aa2704869b6b Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Mon, 1 Mar 2021 18:21:25 -0800 Subject: [PATCH 25/28] update styles --- src/css/custom.css | 3 +-- src/pages/styles.module.css | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/css/custom.css b/src/css/custom.css index c1bd9a8f..9f3e2ac5 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -138,8 +138,7 @@ ol > li::marker { .hero__video { margin: 0 auto; - padding-top: 2rem; - padding-bottom: 1.2rem; + padding: 1.2rem 0 1.2rem 0; background-image: url('/img/landing/video-bg.svg'); background-size: cover; } diff --git a/src/pages/styles.module.css b/src/pages/styles.module.css index 4424f805..5744f18c 100644 --- a/src/pages/styles.module.css +++ b/src/pages/styles.module.css @@ -32,4 +32,5 @@ .featureImage { width: 180px; height: 150px; + padding: 5px; } From a001f7333ed8433bd0c7d51c0ef5a0e94c676a86 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Mon, 1 Mar 2021 18:55:32 -0800 Subject: [PATCH 26/28] update homepage text --- src/pages/index.js | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/pages/index.js b/src/pages/index.js index a9aff0ab..9ceca81d 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -15,15 +15,15 @@ const features = [
  • Computer Vision Annotation Tool

    - Annotate images and videos with automatic annotation for semantic segmentation and object detection + Fully integrated image and video annotation
  • -

    Data augmentation and processing

    - Augment and pre-process your data using Albumentations, imgaug or bring-your-own library +

    Automatic annotation

    + Automatic annotation for semantic segmentation and object detection
  • -

    Bring your own tools

    - Bring your own data preparation and annotation tools and integrate them into your pipelines +

    Data augmentation and processing

    + Extensible data pre-processing pipelines
@@ -36,16 +36,16 @@ const features = [ <>
  • -

    Elastic JupyterLab Workspaces

    - JupyterLab with TensorBoard, Git, debugging, diffing, Conda, OpenCV, TensorFlow, PyTorch and GPU support +

    JupyterLab and VS Code Workspaces

    + Elastic JupyterLab and VS Code with TensorFlow, PyTorch and GPU support
  • -

    Elastic VS Code Workspaces

    - VSCode environments with the same libraries and tools that are consistent with your other environments +

    Built-in algorithms

    + Built-in algorithms for object detection and semantic segmentation
  • -

    Bring your own IDE or VNC tools

    - Bring your own IDEs or VNC tools using a robust YAML and Docker based templating engine +

    Bring your own algorithms and tools

    + Flexible template and plugin system to bring your own algorithms or tools
@@ -59,15 +59,15 @@ const features = [
  • Training pipelines

    - Train models with built-in algorithms for object detection and semantic segmentation + Automatic infrastructure management and reproducibility
  • Hyperparameter tuning

    - Fully integrated with NNI for hyperparameter tuning for object detection and semantic segmentation + Hyperparameter tuning with support for multiple algorithms and GPUs
  • -

    Visualization tools

    - Training and tuning visualizations with TensorBoard and NNI Web UI +

    Built-in visualization tools

    + Training and tuning visualizations with TensorBoard, NNI Web UI and more
@@ -81,15 +81,15 @@ const features = [
  • Workflow orchestration

    - Automate, orchestrate and schedule distributed and parallel workflows across multiple machines + Orchestrate and schedule distributed and parallel workflows
  • -

    Inference and model ensembles

    - Use your trained models to run inference Workflows or ensemble multiple models in the same Workflow +

    Single or ensemble inference

    + Single or ensemble inference Workflows exposed as APIs
  • -

    Python SDK

    - Programmatically perform any task that is available through the web UI +

    Python SDK and APIs

    + Programmatically perform any action using Python SDK or APIs
From e807adb379d3a4f70cb895e276fdc0dbe93760b0 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Tue, 2 Mar 2021 09:15:48 -0800 Subject: [PATCH 27/28] fix lint issues --- src/css/custom.css | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/css/custom.css b/src/css/custom.css index 9f3e2ac5..20fefcff 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -3,7 +3,8 @@ * bundles Infima by default. Infima is a CSS framework designed to * work well for content-centric websites. */ - @import url('https://fonts.googleapis.com/css2?family=Questrial&display=swap'); + +@import url('https://fonts.googleapis.com/css2?family=Questrial&display=swap'); /* You can override the default Infima variables here. */ :root { @@ -368,6 +369,7 @@ article > div > span.badge--secondary { .features_src-pages- { background-color: #f8fafc; + padding: 0.5rem !important; } .features_src-pages- h3 { @@ -390,10 +392,6 @@ article > div > span.badge--secondary { margin-bottom: 4px; } -.features_src-pages- { - padding: 0.5rem !important; -} - .features_src-pages- .features__arrow-1 { position: relative; right: -100px; From c394eddf79118f0806ef1a1b0c75b0d26b7e1f43 Mon Sep 17 00:00:00 2001 From: rushtehrani Date: Tue, 2 Mar 2021 11:12:22 -0800 Subject: [PATCH 28/28] fix lint issues --- src/css/custom.css | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/css/custom.css b/src/css/custom.css index 20fefcff..6dd91e3b 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -27,11 +27,8 @@ body { font-family: 'Questrial', sans-serif; } -.heroBanner_src-pages- { - padding: 1.2rem 0 0 0 !important; -} - -.hero--primary { +.hero.hero--primary.heroBanner_src-pages- { + padding: 1.2rem 0 0 0; --ifm-hero-background-color: #e4ecf2; --ifm-hero-text-color: var(--ifm-font-color-base); } @@ -367,9 +364,9 @@ article > div > span.badge--secondary { display: none; } -.features_src-pages- { +section.features_src-pages- { background-color: #f8fafc; - padding: 0.5rem !important; + padding: 0.5rem; } .features_src-pages- h3 { @@ -415,4 +412,4 @@ article > div > span.badge--secondary { .footer { background-color: var(--ifm-color-primary-darkest); -} \ No newline at end of file +}