@omega.js/web 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +98 -0
- package/README.md +640 -0
- package/bin/omega +2 -0
- package/bin/omega-web +2 -0
- package/bin/omg +2 -0
- package/core/_includes/admin/sections/sidebar.json +100 -0
- package/core/_includes/admin/sections/topbar.json +11 -0
- package/core/_includes/backend/sections/sidebar.json +39 -0
- package/core/_includes/backend/sections/topbar.json +16 -0
- package/core/_includes/core/body.html +102 -0
- package/core/_includes/core/foot.html +536 -0
- package/core/_includes/core/head.html +423 -0
- package/core/_includes/core/pricing/price-per-unit.html +33 -0
- package/core/_includes/core/showcase/entry-body.html +94 -0
- package/core/_includes/core/showcase/index-body.html +43 -0
- package/core/_includes/core/showcase/nav.html +60 -0
- package/core/_includes/frontend/sections/footer.json +74 -0
- package/core/_includes/frontend/sections/nav.json +70 -0
- package/core/_includes/global/sections/account.json +31 -0
- package/core/_includes/modules/engagement/giscus.html +26 -0
- package/core/_layouts/blueprint/404.html +10 -0
- package/core/_layouts/blueprint/about.html +10 -0
- package/core/_layouts/blueprint/account/index.html +11 -0
- package/core/_layouts/blueprint/admin/calendar/index.html +590 -0
- package/core/_layouts/blueprint/admin/dashboard/index.html +301 -0
- package/core/_layouts/blueprint/admin/firebase/index.html +214 -0
- package/core/_layouts/blueprint/admin/posts/editor.html +157 -0
- package/core/_layouts/blueprint/admin/posts/index.html +126 -0
- package/core/_layouts/blueprint/admin/stackblitz/index.html +30 -0
- package/core/_layouts/blueprint/admin/studio/index.html +85 -0
- package/core/_layouts/blueprint/admin/users/index.html +272 -0
- package/core/_layouts/blueprint/admin/users/new.html +82 -0
- package/core/_layouts/blueprint/admin/verts/index.html +204 -0
- package/core/_layouts/blueprint/alternatives/alternative.html +15 -0
- package/core/_layouts/blueprint/alternatives/index.html +10 -0
- package/core/_layouts/blueprint/app.html +10 -0
- package/core/_layouts/blueprint/auth/reset.html +19 -0
- package/core/_layouts/blueprint/auth/signin.html +19 -0
- package/core/_layouts/blueprint/auth/signup.html +19 -0
- package/core/_layouts/blueprint/auth/token.html +19 -0
- package/core/_layouts/blueprint/blog/categories/category.html +8 -0
- package/core/_layouts/blueprint/blog/categories/index.html +11 -0
- package/core/_layouts/blueprint/blog/index.html +10 -0
- package/core/_layouts/blueprint/blog/post.html +5 -0
- package/core/_layouts/blueprint/blog/tags/index.html +11 -0
- package/core/_layouts/blueprint/blog/tags/tag.html +8 -0
- package/core/_layouts/blueprint/careers.md +13 -0
- package/core/_layouts/blueprint/collection/category.html +9 -0
- package/core/_layouts/blueprint/collection/document.html +9 -0
- package/core/_layouts/blueprint/collection/index.html +9 -0
- package/core/_layouts/blueprint/connections/callback.html +11 -0
- package/core/_layouts/blueprint/contact.html +14 -0
- package/core/_layouts/blueprint/dashboard/index.html +10 -0
- package/core/_layouts/blueprint/download.html +20 -0
- package/core/_layouts/blueprint/extension/index.html +14 -0
- package/core/_layouts/blueprint/extension/installed.html +11 -0
- package/core/_layouts/blueprint/feedback.html +10 -0
- package/core/_layouts/blueprint/index.html +16 -0
- package/core/_layouts/blueprint/legal/cookies.md +57 -0
- package/core/_layouts/blueprint/legal/privacy.md +109 -0
- package/core/_layouts/blueprint/legal/terms.md +155 -0
- package/core/_layouts/blueprint/payment/checkout.html +15 -0
- package/core/_layouts/blueprint/payment/confirmation.html +14 -0
- package/core/_layouts/blueprint/portal/email-preferences.html +15 -0
- package/core/_layouts/blueprint/pricing.html +20 -0
- package/core/_layouts/blueprint/status.html +10 -0
- package/core/_layouts/blueprint/team/index.html +10 -0
- package/core/_layouts/blueprint/team/member.html +5 -0
- package/core/_layouts/blueprint/updates/index.html +10 -0
- package/core/_layouts/blueprint/updates/update.html +10 -0
- package/core/_layouts/core/root.html +45 -0
- package/core/_layouts/modules/utilities/redirect.html +129 -0
- package/core/css/_studio.scss +237 -0
- package/core/css/components/_index.scss +146 -0
- package/core/css/core/_.scss +0 -0
- package/core/css/core/_alert.scss +87 -0
- package/core/css/core/_animations.scss +343 -0
- package/core/css/core/_bindings.scss +116 -0
- package/core/css/core/_blog-search.scss +57 -0
- package/core/css/core/_chatsy.scss +61 -0
- package/core/css/core/_consent.scss +424 -0
- package/core/css/core/_custom-font-awesome.scss +146 -0
- package/core/css/core/_exit-popup.scss +42 -0
- package/core/css/core/_generated-badge.scss +33 -0
- package/core/css/core/_initialize.scss +29 -0
- package/core/css/core/_lazy-loading.scss +104 -0
- package/core/css/core/_social-sharing.scss +41 -0
- package/core/css/core/_tones.scss +32 -0
- package/core/css/core/_utilities.scss +157 -0
- package/core/css/main.scss +54 -0
- package/core/css/motion/_index.scss +368 -0
- package/core/css/pages/404/index.scss +0 -0
- package/core/css/pages/admin/calendar/index.scss +692 -0
- package/core/css/pages/admin/firebase/index.scss +33 -0
- package/core/css/pages/admin/index.scss +9 -0
- package/core/css/pages/admin/users/index.scss +9 -0
- package/core/css/pages/admin/verts/index.scss +9 -0
- package/core/css/pages/alternatives/[alternative]/index.scss +0 -0
- package/core/css/pages/blog/[slug].scss +55 -0
- package/core/css/pages/dashboard/account/index.scss +242 -0
- package/core/css/pages/download/index.scss +480 -0
- package/core/css/pages/extension/installed/index.scss +317 -0
- package/core/css/pages/feedback/index.scss +31 -0
- package/core/css/pages/payment/confirmation/index.scss +14 -0
- package/core/css/pages/pricing/index.scss +0 -0
- package/core/css/pages/status/index.scss +162 -0
- package/core/css/pages/test/libraries/layers/index.scss +28 -0
- package/core/css/pages/updates/[update].scss +46 -0
- package/core/css/pages/updates/index.scss +13 -0
- package/core/css/shell/_index.scss +207 -0
- package/core/css/tokens/_index.scss +166 -0
- package/core/icons/flags/ar.svg +1 -0
- package/core/icons/flags/bd.svg +1 -0
- package/core/icons/flags/ca.svg +1 -0
- package/core/icons/flags/ch.svg +1 -0
- package/core/icons/flags/cn.svg +1 -0
- package/core/icons/flags/co.svg +1 -0
- package/core/icons/flags/cw.svg +1 -0
- package/core/icons/flags/cz.svg +1 -0
- package/core/icons/flags/de.svg +1 -0
- package/core/icons/flags/dk.svg +1 -0
- package/core/icons/flags/eg.svg +1 -0
- package/core/icons/flags/es.svg +1 -0
- package/core/icons/flags/fi.svg +1 -0
- package/core/icons/flags/fr.svg +1 -0
- package/core/icons/flags/gb.svg +1 -0
- package/core/icons/flags/gq.svg +1 -0
- package/core/icons/flags/gr.svg +1 -0
- package/core/icons/flags/gt.svg +1 -0
- package/core/icons/flags/hn.svg +1 -0
- package/core/icons/flags/id.svg +1 -0
- package/core/icons/flags/ie.svg +1 -0
- package/core/icons/flags/in.svg +1 -0
- package/core/icons/flags/ir.svg +1 -0
- package/core/icons/flags/it.svg +1 -0
- package/core/icons/flags/jp.svg +1 -0
- package/core/icons/flags/kp.svg +1 -0
- package/core/icons/flags/kr.svg +1 -0
- package/core/icons/flags/ly.svg +1 -0
- package/core/icons/flags/ma.svg +1 -0
- package/core/icons/flags/mu.svg +1 -0
- package/core/icons/flags/mx.svg +1 -0
- package/core/icons/flags/ng.svg +1 -0
- package/core/icons/flags/pa.svg +1 -0
- package/core/icons/flags/ph.svg +1 -0
- package/core/icons/flags/pk.svg +1 -0
- package/core/icons/flags/pt.svg +1 -0
- package/core/icons/flags/ru.svg +1 -0
- package/core/icons/flags/sa.svg +1 -0
- package/core/icons/flags/sd.svg +1 -0
- package/core/icons/flags/se.svg +1 -0
- package/core/icons/flags/th.svg +1 -0
- package/core/icons/flags/tm.svg +1 -0
- package/core/icons/flags/tr.svg +1 -0
- package/core/icons/flags/us.svg +1 -0
- package/core/icons/flags/uy.svg +1 -0
- package/core/icons/flags/vn.svg +1 -0
- package/core/icons/flags/za.svg +1 -0
- package/core/images/exit-popup/subscriber-1.jpg +0 -0
- package/core/images/exit-popup/subscriber-2.jpg +0 -0
- package/core/images/exit-popup/subscriber-3.jpg +0 -0
- package/core/images/exit-popup/subscriber-4.jpg +0 -0
- package/core/images/placeholder/photo-1.jpg +0 -0
- package/core/images/placeholder/photo-2.jpg +0 -0
- package/core/images/placeholder/photo-3.jpg +0 -0
- package/core/js/core/analytics-loader.js +253 -0
- package/core/js/core/app-shell.js +136 -0
- package/core/js/core/appearance.js +195 -0
- package/core/js/core/auth.js +457 -0
- package/core/js/core/complete.js +72 -0
- package/core/js/core/consent.js +384 -0
- package/core/js/core/dev-icon-audit.js +63 -0
- package/core/js/core/dev-palette.js +670 -0
- package/core/js/core/dev-sections.js +53 -0
- package/core/js/core/exit-popup.js +276 -0
- package/core/js/core/initialize.js +8 -0
- package/core/js/core/language-switcher.js +167 -0
- package/core/js/core/lazy-loading.js +479 -0
- package/core/js/core/motion.js +28 -0
- package/core/js/core/query-strings.js +146 -0
- package/core/js/core/service-worker.js +28 -0
- package/core/js/core/social-sharing.js +293 -0
- package/core/js/first-paint.js +35 -0
- package/core/js/layouts/modules/utilities/redirect.js +122 -0
- package/core/js/libs/admin-helpers.js +62 -0
- package/core/js/libs/alert-dismiss.js +35 -0
- package/core/js/libs/analytics.js +368 -0
- package/core/js/libs/auth/email.js +144 -0
- package/core/js/libs/auth/errors.js +119 -0
- package/core/js/libs/auth/forms.js +206 -0
- package/core/js/libs/auth/index.js +181 -0
- package/core/js/libs/auth/oauth.js +394 -0
- package/core/js/libs/auth/orphan.js +110 -0
- package/core/js/libs/auth/password-toggle.js +44 -0
- package/core/js/libs/auth/session-params.js +266 -0
- package/core/js/libs/auth/tracking.js +41 -0
- package/core/js/libs/charts.js +516 -0
- package/core/js/libs/consent-region.js +127 -0
- package/core/js/libs/dev.js +150 -0
- package/core/js/libs/graph.js +201 -0
- package/core/js/libs/initialize-tooltips.js +31 -0
- package/core/js/libs/logger.js +38 -0
- package/core/js/libs/omega-copy.js +89 -0
- package/core/js/libs/path-prefix.js +44 -0
- package/core/js/libs/payment-config.js +76 -0
- package/core/js/libs/recaptcha.js +94 -0
- package/core/js/libs/sale-name.js +295 -0
- package/core/js/libs/showcase-frames.js +37 -0
- package/core/js/libs/srcset.js +69 -0
- package/core/js/libs/tracking-consent.js +161 -0
- package/core/js/main.js +144 -0
- package/core/js/pages/404/index.js +57 -0
- package/core/js/pages/admin/calendar/calendar-core.js +701 -0
- package/core/js/pages/admin/calendar/calendar-events.js +853 -0
- package/core/js/pages/admin/calendar/calendar-renderer.js +807 -0
- package/core/js/pages/admin/calendar/campaign-preview.js +105 -0
- package/core/js/pages/admin/calendar/index.js +40 -0
- package/core/js/pages/admin/firebase/index.js +727 -0
- package/core/js/pages/admin/index.js +531 -0
- package/core/js/pages/admin/posts/editor/index.js +230 -0
- package/core/js/pages/admin/posts/index.js +237 -0
- package/core/js/pages/admin/studio/index.js +538 -0
- package/core/js/pages/admin/users/index.js +669 -0
- package/core/js/pages/admin/users/new/index.js +65 -0
- package/core/js/pages/admin/verts/index.js +407 -0
- package/core/js/pages/alternatives/[alternative]/index.js +17 -0
- package/core/js/pages/app/index.js +135 -0
- package/core/js/pages/blog/[slug].js +132 -0
- package/core/js/pages/blog/_search.mjs +108 -0
- package/core/js/pages/blog/index.js +193 -0
- package/core/js/pages/blog/page/[num]/index.js +7 -0
- package/core/js/pages/connections/callback/index.js +148 -0
- package/core/js/pages/contact/index.js +170 -0
- package/core/js/pages/cookies.js +2 -0
- package/core/js/pages/dashboard/account/index.js +366 -0
- package/core/js/pages/dashboard/account/modules/orders.js +82 -0
- package/core/js/pages/dashboard/account/sections/api-keys.js +149 -0
- package/core/js/pages/dashboard/account/sections/billing.js +1667 -0
- package/core/js/pages/dashboard/account/sections/connections.js +333 -0
- package/core/js/pages/dashboard/account/sections/data-request.js +225 -0
- package/core/js/pages/dashboard/account/sections/delete.js +80 -0
- package/core/js/pages/dashboard/account/sections/notifications.js +167 -0
- package/core/js/pages/dashboard/account/sections/orders.js +151 -0
- package/core/js/pages/dashboard/account/sections/profile.js +200 -0
- package/core/js/pages/dashboard/account/sections/referrals.js +217 -0
- package/core/js/pages/dashboard/account/sections/refund.js +253 -0
- package/core/js/pages/dashboard/account/sections/security.js +726 -0
- package/core/js/pages/dashboard/account/sections/team.js +247 -0
- package/core/js/pages/download/index.js +418 -0
- package/core/js/pages/extension/index.js +164 -0
- package/core/js/pages/extension/installed/index.js +135 -0
- package/core/js/pages/feedback/index.js +193 -0
- package/core/js/pages/legal/_document.js +91 -0
- package/core/js/pages/payment/checkout/index.js +420 -0
- package/core/js/pages/payment/checkout/modules/api.js +139 -0
- package/core/js/pages/payment/checkout/modules/dev-section.js +175 -0
- package/core/js/pages/payment/checkout/modules/discount.js +69 -0
- package/core/js/pages/payment/checkout/modules/pricing.js +73 -0
- package/core/js/pages/payment/checkout/modules/state.js +339 -0
- package/core/js/pages/payment/checkout/modules/tracking.js +54 -0
- package/core/js/pages/payment/confirmation/index.js +91 -0
- package/core/js/pages/payment/confirmation/modules/celebration.js +45 -0
- package/core/js/pages/payment/confirmation/modules/state.js +112 -0
- package/core/js/pages/payment/confirmation/modules/tracking.js +133 -0
- package/core/js/pages/payment/confirmation/modules/verify.js +142 -0
- package/core/js/pages/portal/email-preferences/index.js +183 -0
- package/core/js/pages/pricing/index.js +425 -0
- package/core/js/pages/privacy.js +2 -0
- package/core/js/pages/reset/index.js +12 -0
- package/core/js/pages/signin/index.js +22 -0
- package/core/js/pages/signup/index.js +23 -0
- package/core/js/pages/status/index.js +687 -0
- package/core/js/pages/terms.js +2 -0
- package/core/js/pages/test/components/[category]/[name]/index.js +26 -0
- package/core/js/pages/test/libraries/appearance/index.js +220 -0
- package/core/js/pages/test/libraries/form-manager/index.js +328 -0
- package/core/js/pages/test/libraries/layers/index.js +16 -0
- package/core/js/pages/test/libraries/verts/index.js +68 -0
- package/core/js/pages/test/sections/[category]/[name]/index.js +28 -0
- package/core/js/pages/test/styleguide/index.js +35 -0
- package/core/js/pages/token/index.js +203 -0
- package/core/logos/brandmarks/original/apple-app-store.svg +1 -0
- package/core/logos/brandmarks/original/apple.svg +6 -0
- package/core/logos/brandmarks/original/bitbucket.svg +14 -0
- package/core/logos/brandmarks/original/bitcoin.svg +1 -0
- package/core/logos/brandmarks/original/bluesky.svg +7 -0
- package/core/logos/brandmarks/original/bootstrap.svg +43 -0
- package/core/logos/brandmarks/original/brave.svg +1 -0
- package/core/logos/brandmarks/original/chrome.svg +1 -0
- package/core/logos/brandmarks/original/discord.svg +1 -0
- package/core/logos/brandmarks/original/dropbox.svg +10 -0
- package/core/logos/brandmarks/original/edge.svg +1 -0
- package/core/logos/brandmarks/original/facebook-f.svg +1 -0
- package/core/logos/brandmarks/original/facebook.svg +8 -0
- package/core/logos/brandmarks/original/figma.svg +10 -0
- package/core/logos/brandmarks/original/firefox.svg +1 -0
- package/core/logos/brandmarks/original/github.svg +6 -0
- package/core/logos/brandmarks/original/gitlab.svg +17 -0
- package/core/logos/brandmarks/original/google-a-s.svg +1 -0
- package/core/logos/brandmarks/original/google-chrome-webstore.svg +49 -0
- package/core/logos/brandmarks/original/google-play-store.svg +1 -0
- package/core/logos/brandmarks/original/google-web-search.svg +1 -0
- package/core/logos/brandmarks/original/google.svg +1 -0
- package/core/logos/brandmarks/original/gulp.svg +4 -0
- package/core/logos/brandmarks/original/html-5.svg +1 -0
- package/core/logos/brandmarks/original/instagram.svg +1 -0
- package/core/logos/brandmarks/original/javascript.svg +1 -0
- package/core/logos/brandmarks/original/jira.svg +18 -0
- package/core/logos/brandmarks/original/kick.svg +7 -0
- package/core/logos/brandmarks/original/linkedin.svg +1 -0
- package/core/logos/brandmarks/original/linux.svg +28 -0
- package/core/logos/brandmarks/original/messenger.svg +16 -0
- package/core/logos/brandmarks/original/microsoft.svg +1 -0
- package/core/logos/brandmarks/original/npm.svg +8 -0
- package/core/logos/brandmarks/original/opera.svg +1 -0
- package/core/logos/brandmarks/original/patreon.svg +6 -0
- package/core/logos/brandmarks/original/pinterest.svg +6 -0
- package/core/logos/brandmarks/original/reddit.svg +1 -0
- package/core/logos/brandmarks/original/safari.svg +31 -0
- package/core/logos/brandmarks/original/sass.svg +3 -0
- package/core/logos/brandmarks/original/signal.svg +6 -0
- package/core/logos/brandmarks/original/skype.svg +47 -0
- package/core/logos/brandmarks/original/slack.svg +33 -0
- package/core/logos/brandmarks/original/soundcloud.svg +1 -0
- package/core/logos/brandmarks/original/spotify.svg +5 -0
- package/core/logos/brandmarks/original/steam.svg +6 -0
- package/core/logos/brandmarks/original/telegram.svg +14 -0
- package/core/logos/brandmarks/original/tiktok.svg +1 -0
- package/core/logos/brandmarks/original/trello.svg +16 -0
- package/core/logos/brandmarks/original/tumblr.svg +1 -0
- package/core/logos/brandmarks/original/twitch.svg +6 -0
- package/core/logos/brandmarks/original/twitter.svg +6 -0
- package/core/logos/brandmarks/original/unity.svg +6 -0
- package/core/logos/brandmarks/original/x.svg +7 -0
- package/core/logos/brandmarks/original/yahoo-y.svg +1 -0
- package/core/logos/brandmarks/original/youtube-square.svg +1 -0
- package/core/logos/brandmarks/original/youtube.svg +1 -0
- package/core/logos/combomarks/dark/airbnb.svg +30 -0
- package/core/logos/combomarks/dark/slack.svg +38 -0
- package/core/logos/combomarks/dark/spotify.svg +35 -0
- package/core/logos/combomarks/dark/twilio.svg +26 -0
- package/core/logos/combomarks/dark/weebly.svg +35 -0
- package/core/logos/combomarks/gray/airbnb.svg +33 -0
- package/core/logos/combomarks/gray/alphabet.svg +23 -0
- package/core/logos/combomarks/gray/amazon.svg +38 -0
- package/core/logos/combomarks/gray/boring-company.svg +91 -0
- package/core/logos/combomarks/gray/burberry.svg +239 -0
- package/core/logos/combomarks/gray/embark.svg +21 -0
- package/core/logos/combomarks/gray/fitbit.svg +61 -0
- package/core/logos/combomarks/gray/fred-perry.svg +94 -0
- package/core/logos/combomarks/gray/google.svg +27 -0
- package/core/logos/combomarks/gray/hollister.svg +34 -0
- package/core/logos/combomarks/gray/hubspot.svg +27 -0
- package/core/logos/combomarks/gray/kaplan.svg +33 -0
- package/core/logos/combomarks/gray/lenovo.svg +27 -0
- package/core/logos/combomarks/gray/levis.svg +25 -0
- package/core/logos/combomarks/gray/mapbox.svg +37 -0
- package/core/logos/combomarks/gray/netflix.svg +15 -0
- package/core/logos/combomarks/gray/new-balance.svg +32 -0
- package/core/logos/combomarks/gray/nike.svg +17 -0
- package/core/logos/combomarks/gray/paypal.svg +41 -0
- package/core/logos/combomarks/gray/puma.svg +82 -0
- package/core/logos/combomarks/gray/samsung.svg +26 -0
- package/core/logos/combomarks/gray/shopify.svg +36 -0
- package/core/logos/combomarks/gray/slack.svg +42 -0
- package/core/logos/combomarks/gray/spotify.svg +38 -0
- package/core/logos/combomarks/gray/stripe.svg +24 -0
- package/core/logos/combomarks/gray/tnf.svg +30 -0
- package/core/logos/combomarks/gray/twilio.svg +29 -0
- package/core/logos/combomarks/gray/uber.svg +24 -0
- package/core/logos/combomarks/gray/weebly.svg +38 -0
- package/core/logos/combomarks/original/airbnb.svg +33 -0
- package/core/logos/combomarks/original/alphabet.svg +23 -0
- package/core/logos/combomarks/original/amazon.svg +38 -0
- package/core/logos/combomarks/original/asana.svg +8 -0
- package/core/logos/combomarks/original/boring-company.svg +91 -0
- package/core/logos/combomarks/original/discord.svg +6 -0
- package/core/logos/combomarks/original/embark.svg +24 -0
- package/core/logos/combomarks/original/fitbit.svg +60 -0
- package/core/logos/combomarks/original/github.svg +6 -0
- package/core/logos/combomarks/original/gitlab.svg +20 -0
- package/core/logos/combomarks/original/google.svg +28 -0
- package/core/logos/combomarks/original/hubspot.svg +29 -0
- package/core/logos/combomarks/original/instagram.svg +7 -0
- package/core/logos/combomarks/original/kickstarter.svg +6 -0
- package/core/logos/combomarks/original/lenovo.svg +24 -0
- package/core/logos/combomarks/original/linkedin.svg +6 -0
- package/core/logos/combomarks/original/mapbox.svg +39 -0
- package/core/logos/combomarks/original/mastodon.svg +7 -0
- package/core/logos/combomarks/original/medium.svg +6 -0
- package/core/logos/combomarks/original/meta.svg +22 -0
- package/core/logos/combomarks/original/microsoft.svg +13 -0
- package/core/logos/combomarks/original/monday.svg +12 -0
- package/core/logos/combomarks/original/netflix.svg +15 -0
- package/core/logos/combomarks/original/notion.svg +9 -0
- package/core/logos/combomarks/original/paypal.svg +41 -0
- package/core/logos/combomarks/original/reddit.svg +13 -0
- package/core/logos/combomarks/original/samsung.svg +25 -0
- package/core/logos/combomarks/original/shopify.svg +35 -0
- package/core/logos/combomarks/original/slack.svg +47 -0
- package/core/logos/combomarks/original/spotify.svg +37 -0
- package/core/logos/combomarks/original/stackoverflow.svg +28 -0
- package/core/logos/combomarks/original/stripe.svg +24 -0
- package/core/logos/combomarks/original/tiktok.svg +12 -0
- package/core/logos/combomarks/original/tumblr.svg +6 -0
- package/core/logos/combomarks/original/uber.svg +24 -0
- package/core/logos/combomarks/original/weebly.svg +34 -0
- package/core/logos/combomarks/original/whatsapp.svg +20 -0
- package/core/logos/combomarks/original/youtube.svg +10 -0
- package/core/logos/combomarks/original/zoom.svg +7 -0
- package/core/logos/combomarks/white/airbnb.svg +33 -0
- package/core/logos/combomarks/white/alphabet.svg +23 -0
- package/core/logos/combomarks/white/amazon.svg +38 -0
- package/core/logos/combomarks/white/boring-company.svg +91 -0
- package/core/logos/combomarks/white/embark.svg +21 -0
- package/core/logos/combomarks/white/fitbit.svg +61 -0
- package/core/logos/combomarks/white/google.svg +27 -0
- package/core/logos/combomarks/white/hubspot.svg +27 -0
- package/core/logos/combomarks/white/kaplan.svg +33 -0
- package/core/logos/combomarks/white/lenovo.svg +27 -0
- package/core/logos/combomarks/white/mapbox.svg +37 -0
- package/core/logos/combomarks/white/netflix.svg +15 -0
- package/core/logos/combomarks/white/paypal.svg +40 -0
- package/core/logos/combomarks/white/samsung.svg +26 -0
- package/core/logos/combomarks/white/shopify.svg +36 -0
- package/core/logos/combomarks/white/slack.svg +42 -0
- package/core/logos/combomarks/white/spotify.svg +38 -0
- package/core/logos/combomarks/white/stripe.svg +24 -0
- package/core/logos/combomarks/white/twilio.svg +29 -0
- package/core/logos/combomarks/white/uber.svg +24 -0
- package/core/logos/combomarks/white/weebly.svg +38 -0
- package/defaults/pages/404.md +4 -0
- package/defaults/pages/about.md +4 -0
- package/defaults/pages/admin/calendar/index.html +4 -0
- package/defaults/pages/admin/firebase/index.html +4 -0
- package/defaults/pages/admin/index.md +4 -0
- package/defaults/pages/admin/posts/editor.html +4 -0
- package/defaults/pages/admin/posts/index.html +4 -0
- package/defaults/pages/admin/stackblitz/index.html +4 -0
- package/defaults/pages/admin/studio/index.html +4 -0
- package/defaults/pages/admin/users/index.html +4 -0
- package/defaults/pages/admin/users/new.html +4 -0
- package/defaults/pages/admin/verts/index.html +4 -0
- package/defaults/pages/ads-txt.html +11 -0
- package/defaults/pages/alternatives/index.md +4 -0
- package/defaults/pages/app.md +4 -0
- package/defaults/pages/auth/reset.md +4 -0
- package/defaults/pages/auth/signin.md +4 -0
- package/defaults/pages/auth/signup.md +4 -0
- package/defaults/pages/auth/token.md +4 -0
- package/defaults/pages/blog/categories/category.html +21 -0
- package/defaults/pages/blog/categories.md +4 -0
- package/defaults/pages/blog/index-json.html +27 -0
- package/defaults/pages/blog/tags/tag.html +21 -0
- package/defaults/pages/blog/tags.md +4 -0
- package/defaults/pages/blog.md +22 -0
- package/defaults/pages/careers.md +4 -0
- package/defaults/pages/connections/callback.md +4 -0
- package/defaults/pages/contact.md +4 -0
- package/defaults/pages/dashboard/account.md +4 -0
- package/defaults/pages/dashboard/index.md +12 -0
- package/defaults/pages/download.md +4 -0
- package/defaults/pages/extension/index.html +4 -0
- package/defaults/pages/extension/installed.html +4 -0
- package/defaults/pages/feedback.md +4 -0
- package/defaults/pages/feeds/posts-json.html +40 -0
- package/defaults/pages/feeds/posts-xml.html +38 -0
- package/defaults/pages/humans.html +25 -0
- package/defaults/pages/index.md +4 -0
- package/defaults/pages/legal/cookies.md +4 -0
- package/defaults/pages/legal/privacy.md +4 -0
- package/defaults/pages/legal/terms.md +4 -0
- package/defaults/pages/llms-txt.html +46 -0
- package/defaults/pages/opensearch.html +16 -0
- package/defaults/pages/pages-json.html +42 -0
- package/defaults/pages/payment/checkout.md +4 -0
- package/defaults/pages/payment/confirmation.md +4 -0
- package/defaults/pages/portal/email-preferences.md +4 -0
- package/defaults/pages/pricing.md +4 -0
- package/defaults/pages/redirects/account.md +12 -0
- package/defaults/pages/redirects/admin/dashboard.md +11 -0
- package/defaults/pages/redirects/auth/change-password.md +9 -0
- package/defaults/pages/redirects/auth/forgot.md +9 -0
- package/defaults/pages/redirects/auth/join.md +9 -0
- package/defaults/pages/redirects/auth/login.md +9 -0
- package/defaults/pages/redirects/auth/recover.md +9 -0
- package/defaults/pages/redirects/auth/register.md +9 -0
- package/defaults/pages/redirects/auth/reset-password.md +9 -0
- package/defaults/pages/redirects/billing/cancel.md +9 -0
- package/defaults/pages/redirects/billing/refund.md +9 -0
- package/defaults/pages/robots.html +36 -0
- package/defaults/pages/security-txt.html +11 -0
- package/defaults/pages/sitemap.html +37 -0
- package/defaults/pages/status.md +4 -0
- package/defaults/pages/team/index.md +4 -0
- package/defaults/pages/test/account/dashboard.html +16 -0
- package/defaults/pages/test/index.md +12 -0
- package/defaults/pages/test/libraries/appearance.html +268 -0
- package/defaults/pages/test/libraries/cover.html +50 -0
- package/defaults/pages/test/libraries/error.html +30 -0
- package/defaults/pages/test/libraries/firestore.html +202 -0
- package/defaults/pages/test/libraries/form-manager.html +374 -0
- package/defaults/pages/test/libraries/layers.html +52 -0
- package/defaults/pages/test/libraries/lazy-loading.html +450 -0
- package/defaults/pages/test/libraries/verts.html +149 -0
- package/defaults/pages/test/redirect/external.md +13 -0
- package/defaults/pages/test/redirect/internal.md +13 -0
- package/defaults/pages/test/styleguide/index.html +588 -0
- package/defaults/pages/test/translation/index.md +50 -0
- package/defaults/pages/updates/index.md +4 -0
- package/defaults/sample-posts/2026-01-12-welcome-to-the-blog.md +26 -0
- package/defaults/sample-posts/2026-02-03-a-field-guide-to-good-defaults.md +50 -0
- package/defaults/sample-posts/2026-02-24-shipping-week-notes.md +37 -0
- package/defaults/sample-posts/2026-03-17-the-case-for-one-config.md +36 -0
- package/defaults/sample-posts/2026-04-09-write-release-notes-people-read.md +34 -0
- package/defaults/sample-posts/2026-05-21-dark-mode-done-properly.md +38 -0
- package/defaults/sample-posts/2026-06-02-the-boring-deploy-is-the-good-deploy.md +30 -0
- package/defaults/sample-posts/2026-06-11-naming-things-a-survival-guide.md +30 -0
- package/defaults/sample-posts/2026-06-19-your-pricing-page-is-a-product.md +28 -0
- package/defaults/sample-posts/2026-06-30-email-is-an-api-with-feelings.md +28 -0
- package/defaults/sample-posts/2026-07-08-ship-the-docs-with-the-diff.md +30 -0
- package/defaults/sample-team/avery-quinn.md +22 -0
- package/defaults/sample-team/jordan-reyes.md +25 -0
- package/defaults/sample-team/riley-nakamura.md +22 -0
- package/defaults/sample-team/sam-okafor.md +22 -0
- package/defaults/sample-updates/v1.0.0.md +28 -0
- package/defaults/sample-updates/v1.1.0.md +27 -0
- package/defaults/sample-updates/v1.2.0.md +27 -0
- package/defaults/sample-updates/v1.3.0.md +28 -0
- package/defaults/showcase/components.html +62 -0
- package/defaults/showcase/entry.html +76 -0
- package/defaults/showcase/frame.html +62 -0
- package/defaults/showcase/index.html +59 -0
- package/dist/assets.js +1349 -0
- package/dist/brand-tokens.js +195 -0
- package/dist/build.js +192 -0
- package/dist/cachebreak-html.js +71 -0
- package/dist/cli-run.js +25 -0
- package/dist/cli.js +47 -0
- package/dist/collections.js +183 -0
- package/dist/commands/audit.js +470 -0
- package/dist/commands/build.js +197 -0
- package/dist/commands/clean.js +18 -0
- package/dist/commands/customize.js +125 -0
- package/dist/commands/deploy.js +441 -0
- package/dist/commands/dev.js +1067 -0
- package/dist/commands/install.js +31 -0
- package/dist/commands/lib/deploy-precheck.js +43 -0
- package/dist/commands/lib/ensure-target.js +115 -0
- package/dist/commands/migrate.js +86 -0
- package/dist/commands/purge.js +31 -0
- package/dist/commands/test.js +237 -0
- package/dist/commands/translate.js +57 -0
- package/dist/commands/update.js +22 -0
- package/dist/commands/version.js +11 -0
- package/dist/config-sections.js +245 -0
- package/dist/consumer-scan.js +118 -0
- package/dist/consumer.js +49 -0
- package/dist/customize.js +328 -0
- package/dist/decisions.js +153 -0
- package/dist/dist-audit.js +417 -0
- package/dist/dynamic-pages.js +357 -0
- package/dist/engine.js +1402 -0
- package/dist/firebase-auth-helpers.js +198 -0
- package/dist/font-metrics.js +420 -0
- package/dist/frontmatter-liquid.js +253 -0
- package/dist/github-secrets.js +80 -0
- package/dist/hero-animations.js +170 -0
- package/dist/imagemin.js +261 -0
- package/dist/index.js +41 -0
- package/dist/inline-icons.js +65 -0
- package/dist/language-flags.js +55 -0
- package/dist/layers.js +80 -0
- package/dist/layouts.js +44 -0
- package/dist/limit-collections.js +199 -0
- package/dist/link-resolver.js +303 -0
- package/dist/markdown-images.js +85 -0
- package/dist/merge.js +20 -0
- package/dist/migrate/codemod.js +172 -0
- package/dist/migrate/config-convert.js +448 -0
- package/dist/migrate/consumer-assets.js +130 -0
- package/dist/migrate/index.js +223 -0
- package/dist/migrate/lint.js +108 -0
- package/dist/migrate/rules.js +1929 -0
- package/dist/minify-html.js +148 -0
- package/dist/mode-helpers.js +96 -0
- package/dist/omega-bin.js +7 -0
- package/dist/overrides.js +190 -0
- package/dist/path-prefix.js +167 -0
- package/dist/paths.js +37 -0
- package/dist/pricing.js +301 -0
- package/dist/purge.js +95 -0
- package/dist/redirect-page.js +45 -0
- package/dist/sample-content.js +210 -0
- package/dist/scaffold.js +123 -0
- package/dist/sections.js +810 -0
- package/dist/service-worker.js +200 -0
- package/dist/social-pages.js +142 -0
- package/dist/srcset.js +67 -0
- package/dist/static-assets.js +154 -0
- package/dist/target-shortlinks.js +123 -0
- package/dist/theme-vocabulary.js +76 -0
- package/dist/translate/collect-text-nodes.js +93 -0
- package/dist/translate/default-routes.js +152 -0
- package/dist/translate/generate-defaults.js +297 -0
- package/dist/translate/index.js +568 -0
- package/dist/translate/packaged-defaults.js +127 -0
- package/dist/translate/sitemap.js +108 -0
- package/dist/vendor/account/engine.js +182 -0
- package/dist/vendor/account/features.js +220 -0
- package/dist/vendor/account/index.js +53 -0
- package/dist/vendor/account/schema.js +272 -0
- package/dist/vendor/account/subscription.js +38 -0
- package/dist/vendor/config/company.js +31 -0
- package/dist/vendor/config/defaults.js +173 -0
- package/dist/vendor/config/demo.js +18 -0
- package/dist/vendor/config/desktop-artifacts.js +110 -0
- package/dist/vendor/config/edit.js +769 -0
- package/dist/vendor/config/env-delivery.js +145 -0
- package/dist/vendor/config/env-rules.js +93 -0
- package/dist/vendor/config/env-schema.js +1078 -0
- package/dist/vendor/config/env.js +445 -0
- package/dist/vendor/config/hooks.js +97 -0
- package/dist/vendor/config/index.js +237 -0
- package/dist/vendor/config/instances.js +208 -0
- package/dist/vendor/config/load.js +490 -0
- package/dist/vendor/config/merge.js +68 -0
- package/dist/vendor/config/order.js +139 -0
- package/dist/vendor/config/ports.js +374 -0
- package/dist/vendor/config/providers.js +32 -0
- package/dist/vendor/config/repo.js +142 -0
- package/dist/vendor/config/retired-keys.js +430 -0
- package/dist/vendor/config/schema.js +1610 -0
- package/dist/vendor/config/secrets.js +50 -0
- package/dist/vendor/config/seed.js +34 -0
- package/dist/vendor/config/site-global.js +205 -0
- package/dist/vendor/config/validate.js +554 -0
- package/dist/vendor/config/winback.js +61 -0
- package/dist/vendor/devkit/actions-secrets.js +145 -0
- package/dist/vendor/devkit/attach-log-file.js +262 -0
- package/dist/vendor/devkit/bare-requires.js +153 -0
- package/dist/vendor/devkit/bundle.js +292 -0
- package/dist/vendor/devkit/ci-workflows.js +520 -0
- package/dist/vendor/devkit/cli-router.js +156 -0
- package/dist/vendor/devkit/command-path.js +46 -0
- package/dist/vendor/devkit/defaults-engine.js +372 -0
- package/dist/vendor/devkit/deploy-precheck.js +54 -0
- package/dist/vendor/devkit/deploy-record.js +180 -0
- package/dist/vendor/devkit/deploy.js +286 -0
- package/dist/vendor/devkit/env-watch.js +132 -0
- package/dist/vendor/devkit/framework-deps.js +46 -0
- package/dist/vendor/devkit/icons.js +178 -0
- package/dist/vendor/devkit/license.js +155 -0
- package/dist/vendor/devkit/local-https.js +360 -0
- package/dist/vendor/devkit/local.js +1905 -0
- package/dist/vendor/devkit/logger.js +128 -0
- package/dist/vendor/devkit/merge-line-files.js +296 -0
- package/dist/vendor/devkit/omega-bin.js +345 -0
- package/dist/vendor/devkit/reads.js +274 -0
- package/dist/vendor/devkit/safe-install.js +18 -0
- package/dist/vendor/devkit/scaffold-guard.js +96 -0
- package/dist/vendor/devkit/stop-signals.js +28 -0
- package/dist/vendor/devkit/strip-dev-blocks-plugin.js +29 -0
- package/dist/vendor/devkit/strip-dev-blocks.js +32 -0
- package/dist/vendor/devkit/target-secrets.js +165 -0
- package/dist/vendor/devkit/test/scope.js +162 -0
- package/dist/vendor/devkit/translate/cache.js +84 -0
- package/dist/vendor/devkit/translate/engine.js +243 -0
- package/dist/vendor/devkit/translate/index.js +49 -0
- package/dist/vendor/devkit/translate/languages.js +134 -0
- package/dist/vendor/devkit/translate/providers.js +188 -0
- package/dist/vendor/devkit/update.js +569 -0
- package/dist/vendor/template-kit/data/language-flags.js +54 -0
- package/dist/vendor/template-kit/data/languages.js +195 -0
- package/dist/vendor/template-kit/data/social-urls.js +26 -0
- package/dist/vendor/template-kit/filters.js +227 -0
- package/dist/vendor/template-kit/index.js +28 -0
- package/dist/vendor/template-kit/jekyll-compat.js +268 -0
- package/dist/vendor/template-kit/register-liquid.js +0 -0
- package/dist/vendor/template-kit/tags/collections.js +191 -0
- package/dist/vendor/template-kit/tags/conditionals.js +101 -0
- package/dist/vendor/template-kit/tags/content.js +175 -0
- package/dist/vendor/template-kit/tags/index.js +33 -0
- package/dist/vendor/template-kit/tags/media.js +376 -0
- package/dist/vendor/template-kit/variable-resolver.js +163 -0
- package/docs/ads-system.md +109 -0
- package/docs/classy-v2/DIRECTION.md +92 -0
- package/docs/classy-v2/draft-1.html +1932 -0
- package/docs/classy-v2/draft-2.html +1956 -0
- package/docs/frontmatter.md +153 -0
- package/docs/index.md +254 -0
- package/docs/libs.md +298 -0
- package/docs/omega-sections-spec.md +159 -0
- package/docs/page-contract.md +112 -0
- package/docs/sections.md +845 -0
- package/docs/shared/agent-docs.md +89 -0
- package/docs/shared/analytics.md +612 -0
- package/docs/shared/brands.md +51 -0
- package/docs/shared/breaking-changes.md +497 -0
- package/docs/shared/config.md +1387 -0
- package/docs/shared/deploys.md +215 -0
- package/docs/shared/icons.md +201 -0
- package/docs/shared/local-dev.md +147 -0
- package/docs/shared/logging.md +202 -0
- package/docs/shared/monitoring.md +153 -0
- package/docs/shared/publishing.md +183 -0
- package/docs/shared/rulings.md +34 -0
- package/docs/shared/testing.md +147 -0
- package/docs/shared/theming.md +604 -0
- package/docs/shared/translation.md +291 -0
- package/docs/shared/updates.md +61 -0
- package/docs/template-kit.md +128 -0
- package/docs/test-framework.md +163 -0
- package/package.json +122 -0
- package/runtime/boot.js +149 -0
- package/runtime/icons.js +77 -0
- package/runtime/manager.js +36 -0
- package/scaffold/.github/workflows/build.yml +139 -0
- package/scaffold/.nvmrc +1 -0
- package/scaffold/AGENTS.md +55 -0
- package/scaffold/CLAUDE.md +1 -0
- package/scaffold/_.gitattributes +4 -0
- package/scaffold/_.gitignore +27 -0
- package/scaffold/config/omega.json5 +20 -0
- package/scaffold/src/assets/css/pages/.gitkeep +0 -0
- package/scaffold/src/assets/images/.gitkeep +0 -0
- package/scaffold/src/assets/js/pages/.gitkeep +0 -0
- package/scaffold/src/pages/.gitkeep +0 -0
- package/scaffold/src/pages/example.md.txt +94 -0
- package/scaffold/src/service-worker.js +16 -0
- package/sw/entry.js +19 -0
- package/sw/manager.js +281 -0
- package/themes/_template/README.md +115 -0
- package/themes/_template/_config.scss +60 -0
- package/themes/_template/_theme.js +14 -0
- package/themes/_template/_theme.scss +28 -0
- package/themes/_template/css/base/_root.scss +19 -0
- package/themes/_template/css/components/_components.scss +23 -0
- package/themes/base/README.md +5 -0
- package/themes/base/_components/data/org-chart/component.html +33 -0
- package/themes/base/_components/data/org-chart/component.json5 +33 -0
- package/themes/base/_components/data/org-chart/component.scss +183 -0
- package/themes/base/_components/heading/masthead/component.html +22 -0
- package/themes/base/_components/heading/masthead/component.json5 +30 -0
- package/themes/base/_components/heading/section-head/component.html +18 -0
- package/themes/base/_components/heading/section-head/component.json5 +27 -0
- package/themes/base/_components/pricing/features/component.html +29 -0
- package/themes/base/_components/pricing/features/component.json5 +30 -0
- package/themes/base/_hero/orbit/index.html +30 -0
- package/themes/base/_hero/orbit/script.js +33 -0
- package/themes/base/_hero/orbit/style.scss +133 -0
- package/themes/base/_includes/admin/sections/sidebar.html +3 -0
- package/themes/base/_includes/admin/sections/topbar.html +3 -0
- package/themes/base/_includes/backend/sections/sidebar.html +3 -0
- package/themes/base/_includes/backend/sections/topbar.html +3 -0
- package/themes/base/_includes/frontend/components/connection-card.html +49 -0
- package/themes/base/_includes/frontend/components/post-card.html +54 -0
- package/themes/base/_includes/frontend/sections/account-connections.html +42 -0
- package/themes/base/_includes/frontend/sections/account-section-header.html +11 -0
- package/themes/base/_includes/frontend/sections/footer.html +154 -0
- package/themes/base/_includes/frontend/sections/nav.html +276 -0
- package/themes/base/_includes/global/sections/account.html +72 -0
- package/themes/base/_includes/global/sections/app-sidebar.html +248 -0
- package/themes/base/_includes/global/sections/app-topbar.html +228 -0
- package/themes/base/_includes/global/sections/page-header.html +99 -0
- package/themes/base/_layouts/admin/core/minimal-viewport-locked.html +22 -0
- package/themes/base/_layouts/admin/core/minimal.html +23 -0
- package/themes/base/_layouts/backend/core/base.html +57 -0
- package/themes/base/_layouts/backend/core/minimal-viewport-locked.html +32 -0
- package/themes/base/_layouts/backend/core/minimal.html +32 -0
- package/themes/base/_layouts/backend/pages/dashboard/index.html +230 -0
- package/themes/base/_layouts/frontend/core/base.html +31 -0
- package/themes/base/_layouts/frontend/core/cover.html +40 -0
- package/themes/base/_layouts/frontend/core/minimal.html +47 -0
- package/themes/base/_layouts/frontend/pages/404.html +54 -0
- package/themes/base/_layouts/frontend/pages/about.html +144 -0
- package/themes/base/_layouts/frontend/pages/account/index.html +2104 -0
- package/themes/base/_layouts/frontend/pages/alternatives/alternative.html +319 -0
- package/themes/base/_layouts/frontend/pages/alternatives/index.html +186 -0
- package/themes/base/_layouts/frontend/pages/app.html +142 -0
- package/themes/base/_layouts/frontend/pages/auth/reset.html +53 -0
- package/themes/base/_layouts/frontend/pages/auth/signin.html +90 -0
- package/themes/base/_layouts/frontend/pages/auth/signup.html +141 -0
- package/themes/base/_layouts/frontend/pages/auth/token.html +44 -0
- package/themes/base/_layouts/frontend/pages/blog/categories/category.html +88 -0
- package/themes/base/_layouts/frontend/pages/blog/categories/index.html +88 -0
- package/themes/base/_layouts/frontend/pages/blog/index.html +255 -0
- package/themes/base/_layouts/frontend/pages/blog/post.html +261 -0
- package/themes/base/_layouts/frontend/pages/blog/tags/index.html +84 -0
- package/themes/base/_layouts/frontend/pages/blog/tags/tag.html +88 -0
- package/themes/base/_layouts/frontend/pages/collection/category.html +72 -0
- package/themes/base/_layouts/frontend/pages/collection/document.html +54 -0
- package/themes/base/_layouts/frontend/pages/collection/index.html +84 -0
- package/themes/base/_layouts/frontend/pages/connections/callback.html +55 -0
- package/themes/base/_layouts/frontend/pages/contact.html +214 -0
- package/themes/base/_layouts/frontend/pages/download.html +793 -0
- package/themes/base/_layouts/frontend/pages/extension/index.html +253 -0
- package/themes/base/_layouts/frontend/pages/extension/installed.html +198 -0
- package/themes/base/_layouts/frontend/pages/feedback.html +171 -0
- package/themes/base/_layouts/frontend/pages/index.html +66 -0
- package/themes/base/_layouts/frontend/pages/legal/document.html +78 -0
- package/themes/base/_layouts/frontend/pages/payment/checkout.html +459 -0
- package/themes/base/_layouts/frontend/pages/payment/confirmation.html +131 -0
- package/themes/base/_layouts/frontend/pages/portal/email-preferences.html +104 -0
- package/themes/base/_layouts/frontend/pages/pricing.html +596 -0
- package/themes/base/_layouts/frontend/pages/status.html +361 -0
- package/themes/base/_layouts/frontend/pages/team/index.html +210 -0
- package/themes/base/_layouts/frontend/pages/team/member.html +125 -0
- package/themes/base/_layouts/frontend/pages/updates/index.html +119 -0
- package/themes/base/_layouts/frontend/pages/updates/update.html +118 -0
- package/themes/base/_sections/about/hero/section.html +68 -0
- package/themes/base/_sections/about/hero/section.json5 +58 -0
- package/themes/base/_sections/about/letter/section.html +60 -0
- package/themes/base/_sections/about/letter/section.json5 +56 -0
- package/themes/base/_sections/about/photo-band/section.html +24 -0
- package/themes/base/_sections/about/photo-band/section.json5 +23 -0
- package/themes/base/_sections/about/principles/section.html +17 -0
- package/themes/base/_sections/about/principles/section.json5 +34 -0
- package/themes/base/_sections/about/timeline/section.html +20 -0
- package/themes/base/_sections/about/timeline/section.json5 +34 -0
- package/themes/base/_sections/marketing/bento/section.html +91 -0
- package/themes/base/_sections/marketing/bento/section.json5 +152 -0
- package/themes/base/_sections/marketing/cta/section.html +44 -0
- package/themes/base/_sections/marketing/cta/section.json5 +47 -0
- package/themes/base/_sections/marketing/faq/section.html +52 -0
- package/themes/base/_sections/marketing/faq/section.json5 +68 -0
- package/themes/base/_sections/marketing/hero/section.html +349 -0
- package/themes/base/_sections/marketing/hero/section.json5 +335 -0
- package/themes/base/_sections/marketing/newsletter-cta/section.html +38 -0
- package/themes/base/_sections/marketing/newsletter-cta/section.js +86 -0
- package/themes/base/_sections/marketing/newsletter-cta/section.json5 +29 -0
- package/themes/base/_sections/marketing/pricing-cards/section.html +115 -0
- package/themes/base/_sections/marketing/pricing-cards/section.json5 +72 -0
- package/themes/base/_sections/marketing/product-demo/section.html +62 -0
- package/themes/base/_sections/marketing/product-demo/section.js +44 -0
- package/themes/base/_sections/marketing/product-demo/section.json5 +52 -0
- package/themes/base/_sections/marketing/prose/section.html +22 -0
- package/themes/base/_sections/marketing/prose/section.json5 +41 -0
- package/themes/base/_sections/marketing/showcase/section.html +35 -0
- package/themes/base/_sections/marketing/showcase/section.json5 +52 -0
- package/themes/base/_sections/marketing/stats/section.html +32 -0
- package/themes/base/_sections/marketing/stats/section.json5 +44 -0
- package/themes/base/_sections/marketing/testimonials/section.html +54 -0
- package/themes/base/_sections/marketing/testimonials/section.json5 +70 -0
- package/themes/base/_sections/marketing/trusted-by/section.html +30 -0
- package/themes/base/_sections/marketing/trusted-by/section.json5 +38 -0
- package/themes/base/_sections/verts/unit/section.html +7 -0
- package/themes/base/_sections/verts/unit/section.js +22 -0
- package/themes/base/_sections/verts/unit/section.json5 +24 -0
- package/themes/base/_sections/verts/unit/section.scss +24 -0
- package/themes/base/_theme.js +13 -0
- package/themes/base/_theme.scss +4 -0
- package/themes/bootstrap/_theme.js +16 -0
- package/themes/bootstrap/_theme.scss +11 -0
- package/themes/bootstrap/js/index.esm.js +19 -0
- package/themes/bootstrap/js/index.umd.js +34 -0
- package/themes/bootstrap/js/src/alert.js +87 -0
- package/themes/bootstrap/js/src/base-component.js +86 -0
- package/themes/bootstrap/js/src/button.js +72 -0
- package/themes/bootstrap/js/src/carousel.js +474 -0
- package/themes/bootstrap/js/src/collapse.js +297 -0
- package/themes/bootstrap/js/src/dom/data.js +55 -0
- package/themes/bootstrap/js/src/dom/event-handler.js +317 -0
- package/themes/bootstrap/js/src/dom/manipulator.js +71 -0
- package/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
- package/themes/bootstrap/js/src/dropdown.js +458 -0
- package/themes/bootstrap/js/src/modal.js +378 -0
- package/themes/bootstrap/js/src/offcanvas.js +282 -0
- package/themes/bootstrap/js/src/popover.js +97 -0
- package/themes/bootstrap/js/src/scrollspy.js +296 -0
- package/themes/bootstrap/js/src/tab.js +315 -0
- package/themes/bootstrap/js/src/toast.js +224 -0
- package/themes/bootstrap/js/src/tooltip.js +632 -0
- package/themes/bootstrap/js/src/util/backdrop.js +151 -0
- package/themes/bootstrap/js/src/util/component-functions.js +35 -0
- package/themes/bootstrap/js/src/util/config.js +65 -0
- package/themes/bootstrap/js/src/util/focustrap.js +115 -0
- package/themes/bootstrap/js/src/util/index.js +306 -0
- package/themes/bootstrap/js/src/util/sanitizer.js +117 -0
- package/themes/bootstrap/js/src/util/scrollbar.js +114 -0
- package/themes/bootstrap/js/src/util/swipe.js +146 -0
- package/themes/bootstrap/js/src/util/template-factory.js +160 -0
- package/themes/bootstrap/overrides/_accordion.scss +21 -0
- package/themes/bootstrap/overrides/_avatars.scss +51 -0
- package/themes/bootstrap/overrides/_blog-images.scss +45 -0
- package/themes/bootstrap/overrides/_buttons-adaptive.scss +141 -0
- package/themes/bootstrap/overrides/_color-shades.scss +25 -0
- package/themes/bootstrap/overrides/_cursor-utilities.scss +13 -0
- package/themes/bootstrap/overrides/_index.scss +30 -0
- package/themes/bootstrap/overrides/_links.scss +26 -0
- package/themes/bootstrap/overrides/_soft-colors.scss +99 -0
- package/themes/bootstrap/overrides/_spacing-extended.scss +74 -0
- package/themes/bootstrap/overrides/_spinners.scss +22 -0
- package/themes/bootstrap/overrides/_typography-utilities.scss +40 -0
- package/themes/bootstrap/scss/_accordion.scss +153 -0
- package/themes/bootstrap/scss/_alert.scss +68 -0
- package/themes/bootstrap/scss/_badge.scss +38 -0
- package/themes/bootstrap/scss/_breadcrumb.scss +40 -0
- package/themes/bootstrap/scss/_button-group.scss +147 -0
- package/themes/bootstrap/scss/_buttons.scss +216 -0
- package/themes/bootstrap/scss/_card.scss +238 -0
- package/themes/bootstrap/scss/_carousel.scss +226 -0
- package/themes/bootstrap/scss/_close.scss +66 -0
- package/themes/bootstrap/scss/_containers.scss +41 -0
- package/themes/bootstrap/scss/_dropdown.scss +250 -0
- package/themes/bootstrap/scss/_forms.scss +9 -0
- package/themes/bootstrap/scss/_functions.scss +302 -0
- package/themes/bootstrap/scss/_grid.scss +39 -0
- package/themes/bootstrap/scss/_helpers.scss +12 -0
- package/themes/bootstrap/scss/_images.scss +42 -0
- package/themes/bootstrap/scss/_list-group.scss +199 -0
- package/themes/bootstrap/scss/_maps.scss +174 -0
- package/themes/bootstrap/scss/_mixins.scss +42 -0
- package/themes/bootstrap/scss/_modal.scss +240 -0
- package/themes/bootstrap/scss/_nav.scss +197 -0
- package/themes/bootstrap/scss/_navbar.scss +289 -0
- package/themes/bootstrap/scss/_offcanvas.scss +147 -0
- package/themes/bootstrap/scss/_pagination.scss +109 -0
- package/themes/bootstrap/scss/_placeholders.scss +51 -0
- package/themes/bootstrap/scss/_popover.scss +196 -0
- package/themes/bootstrap/scss/_progress.scss +68 -0
- package/themes/bootstrap/scss/_reboot.scss +611 -0
- package/themes/bootstrap/scss/_root.scss +187 -0
- package/themes/bootstrap/scss/_spinners.scss +85 -0
- package/themes/bootstrap/scss/_tables.scss +171 -0
- package/themes/bootstrap/scss/_toasts.scss +73 -0
- package/themes/bootstrap/scss/_tooltip.scss +119 -0
- package/themes/bootstrap/scss/_transitions.scss +27 -0
- package/themes/bootstrap/scss/_type.scss +106 -0
- package/themes/bootstrap/scss/_utilities.scss +806 -0
- package/themes/bootstrap/scss/_variables-dark.scss +102 -0
- package/themes/bootstrap/scss/_variables.scss +1753 -0
- package/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
- package/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
- package/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
- package/themes/bootstrap/scss/bootstrap.scss +52 -0
- package/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
- package/themes/bootstrap/scss/forms/_form-check.scss +189 -0
- package/themes/bootstrap/scss/forms/_form-control.scss +214 -0
- package/themes/bootstrap/scss/forms/_form-range.scss +91 -0
- package/themes/bootstrap/scss/forms/_form-select.scss +80 -0
- package/themes/bootstrap/scss/forms/_form-text.scss +11 -0
- package/themes/bootstrap/scss/forms/_input-group.scss +132 -0
- package/themes/bootstrap/scss/forms/_labels.scss +36 -0
- package/themes/bootstrap/scss/forms/_validation.scss +12 -0
- package/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
- package/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
- package/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
- package/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
- package/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
- package/themes/bootstrap/scss/helpers/_position.scss +36 -0
- package/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
- package/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
- package/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
- package/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
- package/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
- package/themes/bootstrap/scss/helpers/_vr.scss +8 -0
- package/themes/bootstrap/scss/mixins/_alert.scss +18 -0
- package/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
- package/themes/bootstrap/scss/mixins/_banner.scss +7 -0
- package/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
- package/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
- package/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
- package/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
- package/themes/bootstrap/scss/mixins/_caret.scss +69 -0
- package/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
- package/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
- package/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
- package/themes/bootstrap/scss/mixins/_container.scss +11 -0
- package/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
- package/themes/bootstrap/scss/mixins/_forms.scss +163 -0
- package/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
- package/themes/bootstrap/scss/mixins/_grid.scss +151 -0
- package/themes/bootstrap/scss/mixins/_image.scss +16 -0
- package/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
- package/themes/bootstrap/scss/mixins/_lists.scss +7 -0
- package/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
- package/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
- package/themes/bootstrap/scss/mixins/_resize.scss +6 -0
- package/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
- package/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
- package/themes/bootstrap/scss/mixins/_transition.scss +26 -0
- package/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
- package/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
- package/themes/bootstrap/scss/tests/jasmine.js +16 -0
- package/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
- package/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
- package/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
- package/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
- package/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
- package/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
- package/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
- package/themes/bootstrap/scss/utilities/_api.scss +47 -0
- package/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
- package/themes/classy/README.md +89 -0
- package/themes/classy/_config.scss +245 -0
- package/themes/classy/_theme.js +31 -0
- package/themes/classy/_theme.scss +57 -0
- package/themes/classy/css/app/_panels.scss +183 -0
- package/themes/classy/css/base/_fonts.scss +79 -0
- package/themes/classy/css/base/_no-raise.scss +49 -0
- package/themes/classy/css/base/_root.scss +113 -0
- package/themes/classy/css/base/_typography.scss +154 -0
- package/themes/classy/css/base/_utilities.scss +284 -0
- package/themes/classy/css/components/_alerts.scss +51 -0
- package/themes/classy/css/components/_badges.scss +46 -0
- package/themes/classy/css/components/_buttons.scss +175 -0
- package/themes/classy/css/components/_cards.scss +41 -0
- package/themes/classy/css/components/_dropdowns.scss +48 -0
- package/themes/classy/css/components/_forms.scss +171 -0
- package/themes/classy/css/components/_receipt.scss +45 -0
- package/themes/classy/css/layout/_footer.scss +298 -0
- package/themes/classy/css/layout/_general.scss +209 -0
- package/themes/classy/css/layout/_nav.scss +154 -0
- package/themes/classy/css/layout/_shell.scss +458 -0
- package/themes/classy/css/marketing/_bento.scss +238 -0
- package/themes/classy/css/marketing/_content.scss +1328 -0
- package/themes/classy/css/marketing/_downloads.scss +246 -0
- package/themes/classy/css/marketing/_hero.scss +311 -0
- package/themes/classy/css/marketing/_sections.scss +649 -0
- package/themes/classy/css/pages/404/index.scss +67 -0
- package/themes/classy/css/pages/_auth.scss +235 -0
- package/themes/classy/css/pages/admin/firebase/index.scss +22 -0
- package/themes/classy/css/pages/blog/[slug].scss +56 -0
- package/themes/classy/css/pages/cookies.scss +2 -0
- package/themes/classy/css/pages/dashboard/account/index.scss +31 -0
- package/themes/classy/css/pages/feedback/index.scss +39 -0
- package/themes/classy/css/pages/legal/_document.scss +192 -0
- package/themes/classy/css/pages/payment/checkout/index.scss +585 -0
- package/themes/classy/css/pages/payment/confirmation/index.scss +9 -0
- package/themes/classy/css/pages/privacy.scss +2 -0
- package/themes/classy/css/pages/status/index.scss +164 -0
- package/themes/classy/css/pages/terms.scss +2 -0
- package/themes/classy/css/pages/updates/index.scss +128 -0
- package/themes/classy/fonts/inter-italic-latin-ext.woff2 +0 -0
- package/themes/classy/fonts/inter-italic-latin.woff2 +0 -0
- package/themes/classy/fonts/inter-normal-latin-ext.woff2 +0 -0
- package/themes/classy/fonts/inter-normal-latin.woff2 +0 -0
- package/themes/classy/fonts/newsreader-italic-latin-ext.woff2 +0 -0
- package/themes/classy/fonts/newsreader-italic-latin.woff2 +0 -0
- package/themes/classy/fonts/newsreader-normal-latin-ext.woff2 +0 -0
- package/themes/classy/fonts/newsreader-normal-latin.woff2 +0 -0
- package/themes/classy/js/hero-demo-form.js +56 -0
- package/themes/neobrutalism/README.md +118 -0
- package/themes/neobrutalism/_config.scss +139 -0
- package/themes/neobrutalism/_layouts/frontend/core/base.html +30 -0
- package/themes/neobrutalism/_layouts/frontend/pages/index.html +275 -0
- package/themes/neobrutalism/_theme.js +24 -0
- package/themes/neobrutalism/_theme.scss +61 -0
- package/themes/neobrutalism/css/base/_mixins.scss +46 -0
- package/themes/neobrutalism/css/base/_root.scss +169 -0
- package/themes/neobrutalism/css/base/_typography.scss +61 -0
- package/themes/neobrutalism/css/base/_utilities.scss +89 -0
- package/themes/neobrutalism/css/components/_billing-toggle.scss +74 -0
- package/themes/neobrutalism/css/components/_buttons.scss +148 -0
- package/themes/neobrutalism/css/components/_cards.scss +47 -0
- package/themes/neobrutalism/css/components/_forms.scss +88 -0
- package/themes/neobrutalism/css/components/_marketing.scss +244 -0
- package/themes/neobrutalism/css/layout/_general.scss +213 -0
- package/themes/neobrutalism/css/layout/_navigation.scss +171 -0
- package/themes/neobrutalism/css/pages/index.scss +203 -0
- package/themes/neobrutalism/css/pages/pricing/index.scss +58 -0
- package/themes/neobrutalism/css/pages/test/libraries/layers/index.scss +7 -0
- package/themes/neobrutalism/js/pages/test/libraries/layers/index.js +9 -0
- package/themes/newsflash/README.md +117 -0
- package/themes/newsflash/_components/heading/lede/component.html +14 -0
- package/themes/newsflash/_components/heading/lede/component.json5 +23 -0
- package/themes/newsflash/_components/heading/rule-head/component.html +17 -0
- package/themes/newsflash/_components/heading/rule-head/component.json5 +23 -0
- package/themes/newsflash/_components/news/byline/component.html +12 -0
- package/themes/newsflash/_components/news/byline/component.json5 +18 -0
- package/themes/newsflash/_components/news/story-card/component.html +25 -0
- package/themes/newsflash/_components/news/story-card/component.json5 +21 -0
- package/themes/newsflash/_config.scss +147 -0
- package/themes/newsflash/_layouts/frontend/core/base.html +51 -0
- package/themes/newsflash/_layouts/frontend/pages/blog/index.html +299 -0
- package/themes/newsflash/_layouts/frontend/pages/blog/post.html +235 -0
- package/themes/newsflash/_layouts/frontend/pages/index.html +328 -0
- package/themes/newsflash/_sections/marketing/desks/section.html +39 -0
- package/themes/newsflash/_sections/marketing/desks/section.json5 +49 -0
- package/themes/newsflash/_sections/marketing/newsletter-cta/section.html +103 -0
- package/themes/newsflash/_sections/marketing/newsletter-cta/section.json5 +50 -0
- package/themes/newsflash/_sections/marketing/rundown/section.html +28 -0
- package/themes/newsflash/_sections/marketing/rundown/section.json5 +40 -0
- package/themes/newsflash/_theme.js +24 -0
- package/themes/newsflash/_theme.scss +70 -0
- package/themes/newsflash/css/base/_fonts.scss +80 -0
- package/themes/newsflash/css/base/_mixins.scss +51 -0
- package/themes/newsflash/css/base/_root.scss +257 -0
- package/themes/newsflash/css/base/_typography.scss +49 -0
- package/themes/newsflash/css/base/_utilities.scss +122 -0
- package/themes/newsflash/css/components/_badges.scss +65 -0
- package/themes/newsflash/css/components/_billing-toggle.scss +61 -0
- package/themes/newsflash/css/components/_buttons.scss +139 -0
- package/themes/newsflash/css/components/_cards.scss +47 -0
- package/themes/newsflash/css/components/_editorial.scss +173 -0
- package/themes/newsflash/css/components/_forms.scss +75 -0
- package/themes/newsflash/css/components/_infinite-scroll.scss +102 -0
- package/themes/newsflash/css/components/_panels.scss +156 -0
- package/themes/newsflash/css/components/_ticker.scss +67 -0
- package/themes/newsflash/css/layout/_general.scss +330 -0
- package/themes/newsflash/css/layout/_navigation.scss +168 -0
- package/themes/newsflash/css/pages/404/index.scss +79 -0
- package/themes/newsflash/css/pages/blog/[slug].scss +186 -0
- package/themes/newsflash/css/pages/blog/index.scss +17 -0
- package/themes/newsflash/css/pages/index.scss +157 -0
- package/themes/newsflash/css/pages/pricing/index.scss +55 -0
- package/themes/newsflash/css/pages/test/libraries/layers/index.scss +7 -0
- package/themes/newsflash/fonts/fraunces-italic-latin-ext.woff2 +0 -0
- package/themes/newsflash/fonts/fraunces-italic-latin.woff2 +0 -0
- package/themes/newsflash/fonts/fraunces-normal-latin-ext.woff2 +0 -0
- package/themes/newsflash/fonts/fraunces-normal-latin.woff2 +0 -0
- package/themes/newsflash/fonts/schibsted-grotesk-italic-latin-ext.woff2 +0 -0
- package/themes/newsflash/fonts/schibsted-grotesk-italic-latin.woff2 +0 -0
- package/themes/newsflash/fonts/schibsted-grotesk-normal-latin-ext.woff2 +0 -0
- package/themes/newsflash/fonts/schibsted-grotesk-normal-latin.woff2 +0 -0
- package/themes/newsflash/js/pages/blog/[slug].js +29 -0
- package/themes/newsflash/js/pages/test/libraries/layers/index.js +9 -0
- package/translations/es/pages/404.json +86 -0
- package/translations/es/pages/account.json +36 -0
- package/translations/es/pages/app.json +44 -0
- package/translations/es/pages/cancel.json +36 -0
- package/translations/es/pages/change-password.json +36 -0
- package/translations/es/pages/connections/callback.json +41 -0
- package/translations/es/pages/dashboard/account.json +475 -0
- package/translations/es/pages/dashboard.json +36 -0
- package/translations/es/pages/forgot.json +36 -0
- package/translations/es/pages/join.json +36 -0
- package/translations/es/pages/login.json +36 -0
- package/translations/es/pages/payment/checkout.json +83 -0
- package/translations/es/pages/payment/confirmation.json +62 -0
- package/translations/es/pages/portal/email-preferences.json +46 -0
- package/translations/es/pages/recover.json +36 -0
- package/translations/es/pages/refund.json +36 -0
- package/translations/es/pages/register.json +36 -0
- package/translations/es/pages/reset-password.json +36 -0
- package/translations/es/pages/reset.json +42 -0
- package/translations/es/pages/signin.json +45 -0
- package/translations/es/pages/signup.json +60 -0
- package/translations/es/pages/token.json +39 -0
- package/translations/fa/pages/404.json +86 -0
- package/translations/fa/pages/account.json +36 -0
- package/translations/fa/pages/app.json +44 -0
- package/translations/fa/pages/cancel.json +36 -0
- package/translations/fa/pages/change-password.json +36 -0
- package/translations/fa/pages/connections/callback.json +41 -0
- package/translations/fa/pages/dashboard/account.json +475 -0
- package/translations/fa/pages/dashboard.json +36 -0
- package/translations/fa/pages/forgot.json +36 -0
- package/translations/fa/pages/join.json +36 -0
- package/translations/fa/pages/login.json +36 -0
- package/translations/fa/pages/payment/checkout.json +83 -0
- package/translations/fa/pages/payment/confirmation.json +62 -0
- package/translations/fa/pages/portal/email-preferences.json +46 -0
- package/translations/fa/pages/recover.json +36 -0
- package/translations/fa/pages/refund.json +36 -0
- package/translations/fa/pages/register.json +36 -0
- package/translations/fa/pages/reset-password.json +36 -0
- package/translations/fa/pages/reset.json +42 -0
- package/translations/fa/pages/signin.json +45 -0
- package/translations/fa/pages/signup.json +60 -0
- package/translations/fa/pages/token.json +39 -0
|
@@ -0,0 +1,1956 @@
|
|
|
1
|
+
<title>classy v2 — Draft 2</title>
|
|
2
|
+
<style>
|
|
3
|
+
/* ============================================================================
|
|
4
|
+
CLASSY v2 — DRAFT 2 (interactive direction mockup, not production code)
|
|
5
|
+
Changes from Draft 1 (Ian's feedback):
|
|
6
|
+
· zero gradients (only monotone-opacity chart fades remain)
|
|
7
|
+
· neutral “generic” dark — no blue/purple cast (ElevenLabs reference)
|
|
8
|
+
· Manus-leaning type + colors in the app; ink primary buttons
|
|
9
|
+
· nested sidebar dropdowns; search moved to topbar; active-shift fixed
|
|
10
|
+
· marketing re-skinned: ink on paper, serif display, motion for life
|
|
11
|
+
========================================================================== */
|
|
12
|
+
|
|
13
|
+
/* ─── Tokens ─────────────────────────────────────────────────────────────── */
|
|
14
|
+
|
|
15
|
+
:root {
|
|
16
|
+
/* geometry */
|
|
17
|
+
--r-xs: 6px;
|
|
18
|
+
--r-s: 8px;
|
|
19
|
+
--r-m: 10px;
|
|
20
|
+
--r-l: 14px;
|
|
21
|
+
--r-xl: 20px;
|
|
22
|
+
|
|
23
|
+
/* type */
|
|
24
|
+
--font-ui: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
25
|
+
--font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;
|
|
26
|
+
--font-serif: "New York", ui-serif, Georgia, "Iowan Old Style", "Times New Roman", serif;
|
|
27
|
+
--font-display: var(--font-ui); /* app display */
|
|
28
|
+
--font-marketing: var(--font-serif); /* marketing display (Manus split) */
|
|
29
|
+
--track-display: -0.02em;
|
|
30
|
+
--fs-ui: 13.5px;
|
|
31
|
+
|
|
32
|
+
/* density-scaled geometry */
|
|
33
|
+
--control-h: 34px;
|
|
34
|
+
--pad-card: 20px;
|
|
35
|
+
--nav-item-h: 34px;
|
|
36
|
+
--cell-pad: 12px 16px;
|
|
37
|
+
--shell-side: 264px;
|
|
38
|
+
--shell-rail: 68px;
|
|
39
|
+
--shell-top: 60px;
|
|
40
|
+
|
|
41
|
+
/* motion */
|
|
42
|
+
--speed: 160ms;
|
|
43
|
+
--ease: cubic-bezier(0.25, 0.5, 0.35, 1);
|
|
44
|
+
|
|
45
|
+
/* brand accent — ONE hue per brand, light/dark variants */
|
|
46
|
+
--acc-l: #5b47fb;
|
|
47
|
+
--acc-d: #8577ff;
|
|
48
|
+
--chart2-l: #0f8fa9;
|
|
49
|
+
--chart2-d: #1f9fb4;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:root[data-density="compact"] {
|
|
53
|
+
--fs-ui: 12.5px;
|
|
54
|
+
--control-h: 29px;
|
|
55
|
+
--pad-card: 14px;
|
|
56
|
+
--nav-item-h: 29px;
|
|
57
|
+
--cell-pad: 8px 14px;
|
|
58
|
+
--shell-top: 52px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* type presets — default is the Manus split (app sans · marketing serif) */
|
|
62
|
+
:root[data-type="sans"] { --font-marketing: var(--font-ui); --track-display: -0.03em; }
|
|
63
|
+
:root[data-type="editorial"] { --font-display: var(--font-serif); }
|
|
64
|
+
:root[data-type="terminal"] { --font-display: var(--font-mono); --font-marketing: var(--font-mono); }
|
|
65
|
+
|
|
66
|
+
/* brand presets — single hue each */
|
|
67
|
+
:root[data-brand="ember"] { --acc-l: #e8590c; --acc-d: #ff8b3d; }
|
|
68
|
+
:root[data-brand="emerald"] { --acc-l: #0e9f6e; --acc-d: #34d39b; }
|
|
69
|
+
:root[data-brand="ocean"] { --acc-l: #2563eb; --acc-d: #6395ff; }
|
|
70
|
+
:root[data-brand="rose"] { --acc-l: #e11d63; --acc-d: #fb5c94; }
|
|
71
|
+
|
|
72
|
+
/* light theme — warm-neutral paper (Manus reference) */
|
|
73
|
+
:root {
|
|
74
|
+
color-scheme: light;
|
|
75
|
+
--ground: #f5f5f4;
|
|
76
|
+
--surface: #ffffff;
|
|
77
|
+
--surface-2: #f6f6f5;
|
|
78
|
+
--ink: #1a1a19;
|
|
79
|
+
--muted: #6d6d6c;
|
|
80
|
+
--faint: #a1a19e;
|
|
81
|
+
--line: #e8e8e6;
|
|
82
|
+
--line-strong: #d8d8d5;
|
|
83
|
+
--accent: var(--acc-l);
|
|
84
|
+
--chart-2: var(--chart2-l);
|
|
85
|
+
--accent-ink: #ffffff;
|
|
86
|
+
--ok: #12925c;
|
|
87
|
+
--warn: #c47206;
|
|
88
|
+
--danger: #d92d20;
|
|
89
|
+
--shadow-s: 0 1px 2px rgb(20 20 19 / 5%);
|
|
90
|
+
--shadow-m: 0 8px 24px -12px rgb(20 20 19 / 16%);
|
|
91
|
+
--shadow-l: 0 24px 60px -24px rgb(20 20 19 / 22%);
|
|
92
|
+
--glass: rgb(255 255 255 / 70%);
|
|
93
|
+
--panel-ink: #161616;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@media (prefers-color-scheme: dark) {
|
|
97
|
+
:root {
|
|
98
|
+
color-scheme: dark;
|
|
99
|
+
--ground: #0d0d0e;
|
|
100
|
+
--surface: #151516;
|
|
101
|
+
--surface-2: #1d1d1f;
|
|
102
|
+
--ink: #ebebea;
|
|
103
|
+
--muted: #9f9fa0;
|
|
104
|
+
--faint: #6c6c6e;
|
|
105
|
+
--line: #262628;
|
|
106
|
+
--line-strong: #333336;
|
|
107
|
+
--accent: var(--acc-d);
|
|
108
|
+
--chart-2: var(--chart2-d);
|
|
109
|
+
--accent-ink: #111112;
|
|
110
|
+
--ok: #3ecf8e;
|
|
111
|
+
--warn: #f5a524;
|
|
112
|
+
--danger: #f0574d;
|
|
113
|
+
--shadow-s: 0 1px 2px rgb(0 0 0 / 40%);
|
|
114
|
+
--shadow-m: 0 8px 24px -12px rgb(0 0 0 / 55%);
|
|
115
|
+
--shadow-l: 0 24px 60px -24px rgb(0 0 0 / 65%);
|
|
116
|
+
--glass: rgb(21 21 22 / 68%);
|
|
117
|
+
--panel-ink: #1a1a1b;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
:root[data-theme="dark"] {
|
|
122
|
+
color-scheme: dark;
|
|
123
|
+
--ground: #0d0d0e;
|
|
124
|
+
--surface: #151516;
|
|
125
|
+
--surface-2: #1d1d1f;
|
|
126
|
+
--ink: #ebebea;
|
|
127
|
+
--muted: #9f9fa0;
|
|
128
|
+
--faint: #6c6c6e;
|
|
129
|
+
--line: #262628;
|
|
130
|
+
--line-strong: #333336;
|
|
131
|
+
--accent: var(--acc-d);
|
|
132
|
+
--chart-2: var(--chart2-d);
|
|
133
|
+
--accent-ink: #111112;
|
|
134
|
+
--ok: #3ecf8e;
|
|
135
|
+
--warn: #f5a524;
|
|
136
|
+
--danger: #f0574d;
|
|
137
|
+
--shadow-s: 0 1px 2px rgb(0 0 0 / 40%);
|
|
138
|
+
--shadow-m: 0 8px 24px -12px rgb(0 0 0 / 55%);
|
|
139
|
+
--shadow-l: 0 24px 60px -24px rgb(0 0 0 / 65%);
|
|
140
|
+
--glass: rgb(21 21 22 / 68%);
|
|
141
|
+
--panel-ink: #1a1a1b;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
:root[data-theme="light"] {
|
|
145
|
+
color-scheme: light;
|
|
146
|
+
--ground: #f5f5f4;
|
|
147
|
+
--surface: #ffffff;
|
|
148
|
+
--surface-2: #f6f6f5;
|
|
149
|
+
--ink: #1a1a19;
|
|
150
|
+
--muted: #6d6d6c;
|
|
151
|
+
--faint: #a1a19e;
|
|
152
|
+
--line: #e8e8e6;
|
|
153
|
+
--line-strong: #d8d8d5;
|
|
154
|
+
--accent: var(--acc-l);
|
|
155
|
+
--chart-2: var(--chart2-l);
|
|
156
|
+
--accent-ink: #ffffff;
|
|
157
|
+
--ok: #12925c;
|
|
158
|
+
--warn: #c47206;
|
|
159
|
+
--danger: #d92d20;
|
|
160
|
+
--shadow-s: 0 1px 2px rgb(20 20 19 / 5%);
|
|
161
|
+
--shadow-m: 0 8px 24px -12px rgb(20 20 19 / 16%);
|
|
162
|
+
--shadow-l: 0 24px 60px -24px rgb(20 20 19 / 22%);
|
|
163
|
+
--glass: rgb(255 255 255 / 70%);
|
|
164
|
+
--panel-ink: #161616;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* derived */
|
|
168
|
+
:root {
|
|
169
|
+
--accent-subtle: color-mix(in srgb, var(--accent) 11%, transparent);
|
|
170
|
+
--accent-hover: color-mix(in srgb, var(--accent) 88%, var(--ink) 12%);
|
|
171
|
+
--ring: color-mix(in srgb, var(--accent) 40%, transparent);
|
|
172
|
+
--ok-subtle: color-mix(in srgb, var(--ok) 13%, transparent);
|
|
173
|
+
--warn-subtle: color-mix(in srgb, var(--warn) 14%, transparent);
|
|
174
|
+
--danger-subtle: color-mix(in srgb, var(--danger) 12%, transparent);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/* ─── Base ───────────────────────────────────────────────────────────────── */
|
|
178
|
+
|
|
179
|
+
html { scroll-behavior: smooth; }
|
|
180
|
+
html[data-view="app"] { overflow: hidden; }
|
|
181
|
+
|
|
182
|
+
body {
|
|
183
|
+
margin: 0;
|
|
184
|
+
background: var(--ground);
|
|
185
|
+
color: var(--ink);
|
|
186
|
+
font-family: var(--font-ui);
|
|
187
|
+
font-size: var(--fs-ui);
|
|
188
|
+
line-height: 1.55;
|
|
189
|
+
-webkit-font-smoothing: antialiased;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
* { box-sizing: border-box; }
|
|
193
|
+
svg { display: block; }
|
|
194
|
+
button { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; }
|
|
195
|
+
:is(button, a, [tabindex]):focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; border-radius: var(--r-xs); }
|
|
196
|
+
::selection { background: color-mix(in srgb, var(--accent) 22%, transparent); }
|
|
197
|
+
|
|
198
|
+
h1, h2, h3 { margin: 0; font-family: var(--font-display); letter-spacing: var(--track-display); text-wrap: balance; }
|
|
199
|
+
p { margin: 0; }
|
|
200
|
+
|
|
201
|
+
.num { font-variant-numeric: tabular-nums; }
|
|
202
|
+
.mono { font-family: var(--font-mono); }
|
|
203
|
+
|
|
204
|
+
/* view switching */
|
|
205
|
+
.view--site { display: block; }
|
|
206
|
+
.view--app { display: none; }
|
|
207
|
+
html[data-view="app"] .view--site { display: none; }
|
|
208
|
+
html[data-view="app"] .view--app { display: block; }
|
|
209
|
+
|
|
210
|
+
/* ─── Shared atoms ───────────────────────────────────────────────────────── */
|
|
211
|
+
|
|
212
|
+
.btn {
|
|
213
|
+
display: inline-flex;
|
|
214
|
+
align-items: center;
|
|
215
|
+
justify-content: center;
|
|
216
|
+
gap: 7px;
|
|
217
|
+
height: var(--control-h);
|
|
218
|
+
padding: 0 14px;
|
|
219
|
+
border-radius: var(--r-s);
|
|
220
|
+
font-weight: 560;
|
|
221
|
+
font-size: var(--fs-ui);
|
|
222
|
+
border: 1px solid transparent;
|
|
223
|
+
transition: background var(--speed) var(--ease), border-color var(--speed) var(--ease),
|
|
224
|
+
color var(--speed) var(--ease), transform var(--speed) var(--ease),
|
|
225
|
+
opacity var(--speed) var(--ease);
|
|
226
|
+
white-space: nowrap;
|
|
227
|
+
}
|
|
228
|
+
.btn:active { transform: translateY(1px); }
|
|
229
|
+
.btn--ink { background: var(--ink); color: var(--surface); }
|
|
230
|
+
.btn--ink:hover { opacity: 0.86; }
|
|
231
|
+
.btn--paper { background: #ffffff; color: #161616; }
|
|
232
|
+
.btn--paper:hover { opacity: 0.9; }
|
|
233
|
+
.btn--accent { background: var(--accent); color: var(--accent-ink); }
|
|
234
|
+
.btn--accent:hover { background: var(--accent-hover); }
|
|
235
|
+
.btn--ghost { border-color: var(--line-strong); color: var(--ink); background: var(--surface); }
|
|
236
|
+
.btn--ghost:hover { background: var(--surface-2); }
|
|
237
|
+
.btn--quiet:hover { background: var(--surface-2); }
|
|
238
|
+
.btn--lg { height: calc(var(--control-h) + 10px); padding: 0 20px; font-size: calc(var(--fs-ui) + 1.5px); border-radius: var(--r-m); }
|
|
239
|
+
|
|
240
|
+
.iconbtn {
|
|
241
|
+
display: inline-flex;
|
|
242
|
+
align-items: center;
|
|
243
|
+
justify-content: center;
|
|
244
|
+
width: var(--control-h);
|
|
245
|
+
height: var(--control-h);
|
|
246
|
+
border-radius: var(--r-s);
|
|
247
|
+
color: var(--muted);
|
|
248
|
+
position: relative;
|
|
249
|
+
}
|
|
250
|
+
.iconbtn:hover { background: var(--surface-2); color: var(--ink); }
|
|
251
|
+
.iconbtn .dot {
|
|
252
|
+
position: absolute; top: 7px; right: 7px;
|
|
253
|
+
width: 7px; height: 7px; border-radius: 50%;
|
|
254
|
+
background: var(--danger); border: 2px solid var(--surface);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.chip {
|
|
258
|
+
display: inline-flex;
|
|
259
|
+
align-items: center;
|
|
260
|
+
gap: 6px;
|
|
261
|
+
height: 22px;
|
|
262
|
+
padding: 0 9px;
|
|
263
|
+
border-radius: 999px;
|
|
264
|
+
font-size: 11.5px;
|
|
265
|
+
font-weight: 560;
|
|
266
|
+
border: 1px solid var(--line);
|
|
267
|
+
background: var(--surface-2);
|
|
268
|
+
color: var(--muted);
|
|
269
|
+
white-space: nowrap;
|
|
270
|
+
}
|
|
271
|
+
.chip--accent { background: var(--accent-subtle); border-color: transparent; color: var(--accent); }
|
|
272
|
+
.chip--ink { background: var(--ink); border-color: transparent; color: var(--surface); }
|
|
273
|
+
|
|
274
|
+
.pill-status { display: inline-flex; align-items: center; gap: 7px; font-weight: 560; font-size: 12px; }
|
|
275
|
+
.pill-status i { width: 7px; height: 7px; border-radius: 50%; flex: none; }
|
|
276
|
+
.pill-status--ok { color: var(--ok); } .pill-status--ok i { background: var(--ok); }
|
|
277
|
+
.pill-status--warn { color: var(--warn); } .pill-status--warn i { background: var(--warn); animation: pulse 1.4s ease-in-out infinite; }
|
|
278
|
+
.pill-status--danger { color: var(--danger); } .pill-status--danger i { background: var(--danger); }
|
|
279
|
+
@keyframes pulse { 50% { opacity: 0.35; } }
|
|
280
|
+
|
|
281
|
+
.seg {
|
|
282
|
+
display: inline-flex;
|
|
283
|
+
padding: 3px;
|
|
284
|
+
gap: 2px;
|
|
285
|
+
background: var(--surface-2);
|
|
286
|
+
border: 1px solid var(--line);
|
|
287
|
+
border-radius: var(--r-s);
|
|
288
|
+
}
|
|
289
|
+
.seg button {
|
|
290
|
+
height: calc(var(--control-h) - 8px);
|
|
291
|
+
padding: 0 12px;
|
|
292
|
+
border-radius: calc(var(--r-s) - 3px);
|
|
293
|
+
color: var(--muted);
|
|
294
|
+
font-weight: 560;
|
|
295
|
+
font-size: 12.5px;
|
|
296
|
+
}
|
|
297
|
+
.seg button:hover { color: var(--ink); }
|
|
298
|
+
.seg button[aria-pressed="true"] { background: var(--surface); color: var(--ink); box-shadow: var(--shadow-s); }
|
|
299
|
+
|
|
300
|
+
.card {
|
|
301
|
+
background: var(--surface);
|
|
302
|
+
border: 1px solid var(--line);
|
|
303
|
+
border-radius: var(--r-l);
|
|
304
|
+
box-shadow: var(--shadow-s);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.avatar {
|
|
308
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
309
|
+
width: 26px; height: 26px; border-radius: 50%;
|
|
310
|
+
background: var(--surface-2); color: var(--muted);
|
|
311
|
+
border: 1px solid var(--line-strong);
|
|
312
|
+
font-size: 10px; font-weight: 700; letter-spacing: 0.02em;
|
|
313
|
+
flex: none;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/* Ω brandmark — solid ink tile (no gradient) */
|
|
317
|
+
.mark {
|
|
318
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
319
|
+
width: 30px; height: 30px; border-radius: 9px;
|
|
320
|
+
background: var(--ink); color: var(--surface);
|
|
321
|
+
font-size: 17px; font-weight: 700; line-height: 1;
|
|
322
|
+
flex: none;
|
|
323
|
+
font-family: var(--font-ui);
|
|
324
|
+
}
|
|
325
|
+
.lockup { display: inline-flex; align-items: center; gap: 10px; font-weight: 680; font-size: 15.5px; letter-spacing: -0.02em; }
|
|
326
|
+
|
|
327
|
+
/* ============================================================================
|
|
328
|
+
SITE — marketing view (ink on paper)
|
|
329
|
+
========================================================================== */
|
|
330
|
+
|
|
331
|
+
.site { position: relative; }
|
|
332
|
+
|
|
333
|
+
/* glassy nav — invisible until scroll */
|
|
334
|
+
.nav {
|
|
335
|
+
position: fixed;
|
|
336
|
+
inset: 0 0 auto 0;
|
|
337
|
+
z-index: 60;
|
|
338
|
+
transition: background var(--speed) var(--ease), border-color var(--speed) var(--ease);
|
|
339
|
+
border-bottom: 1px solid transparent;
|
|
340
|
+
}
|
|
341
|
+
.nav.scrolled {
|
|
342
|
+
background: var(--glass);
|
|
343
|
+
-webkit-backdrop-filter: blur(16px) saturate(1.3);
|
|
344
|
+
backdrop-filter: blur(16px) saturate(1.3);
|
|
345
|
+
border-bottom-color: var(--line);
|
|
346
|
+
}
|
|
347
|
+
.nav__in {
|
|
348
|
+
max-width: 1180px; margin: 0 auto;
|
|
349
|
+
display: flex; align-items: center; gap: 26px;
|
|
350
|
+
padding: 12px 28px;
|
|
351
|
+
}
|
|
352
|
+
.nav__links { display: flex; gap: 4px; margin-inline-start: 10px; }
|
|
353
|
+
.nav__links a {
|
|
354
|
+
color: var(--muted); text-decoration: none; font-weight: 540; font-size: 13.5px;
|
|
355
|
+
padding: 7px 11px; border-radius: var(--r-s);
|
|
356
|
+
}
|
|
357
|
+
.nav__links a:hover { color: var(--ink); background: var(--surface-2); }
|
|
358
|
+
.nav__cta { margin-inline-start: auto; display: flex; align-items: center; gap: 10px; }
|
|
359
|
+
|
|
360
|
+
/* hero */
|
|
361
|
+
.hero {
|
|
362
|
+
position: relative;
|
|
363
|
+
padding: 158px 28px 96px;
|
|
364
|
+
overflow: clip;
|
|
365
|
+
background: var(--ground);
|
|
366
|
+
}
|
|
367
|
+
.hero__bg { position: absolute; inset: 0; pointer-events: none; }
|
|
368
|
+
.hero__dots {
|
|
369
|
+
position: absolute; inset: 0;
|
|
370
|
+
background-image: radial-gradient(color-mix(in srgb, var(--ink) 15%, transparent) 1px, transparent 1px);
|
|
371
|
+
background-size: 22px 22px;
|
|
372
|
+
-webkit-mask-image: radial-gradient(ellipse 75% 62% at 50% 30%, #000 30%, transparent 72%);
|
|
373
|
+
mask-image: radial-gradient(ellipse 75% 62% at 50% 30%, #000 30%, transparent 72%);
|
|
374
|
+
opacity: 0.45;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
.hero__in { position: relative; max-width: 1180px; margin: 0 auto; text-align: center; }
|
|
378
|
+
|
|
379
|
+
.hero__badge {
|
|
380
|
+
display: inline-flex; align-items: center; gap: 9px;
|
|
381
|
+
padding: 6px 14px; border-radius: 999px;
|
|
382
|
+
font-size: 12.5px; font-weight: 560; color: var(--muted);
|
|
383
|
+
background: var(--surface);
|
|
384
|
+
border: 1px solid var(--line-strong);
|
|
385
|
+
box-shadow: var(--shadow-s);
|
|
386
|
+
}
|
|
387
|
+
.hero__badge i { width: 7px; height: 7px; border-radius: 50%; background: var(--ok); flex: none; }
|
|
388
|
+
.hero__badge b { color: var(--ink); font-weight: 640; }
|
|
389
|
+
|
|
390
|
+
.hero h1 {
|
|
391
|
+
margin: 28px auto 0;
|
|
392
|
+
font-family: var(--font-marketing);
|
|
393
|
+
font-size: clamp(42px, 6.6vw, 78px);
|
|
394
|
+
line-height: 1.06;
|
|
395
|
+
font-weight: 640;
|
|
396
|
+
letter-spacing: -0.015em;
|
|
397
|
+
}
|
|
398
|
+
.hero h1 .rot-line { display: block; font-style: italic; color: var(--muted); }
|
|
399
|
+
.rot { display: inline-block; transition: opacity 0.24s var(--ease), transform 0.24s var(--ease); }
|
|
400
|
+
.rot.out { opacity: 0; transform: translateY(10px); }
|
|
401
|
+
|
|
402
|
+
.hero__sub {
|
|
403
|
+
margin: 24px auto 0;
|
|
404
|
+
max-width: 62ch;
|
|
405
|
+
color: var(--muted);
|
|
406
|
+
font-size: clamp(15px, 1.6vw, 17.5px);
|
|
407
|
+
line-height: 1.65;
|
|
408
|
+
}
|
|
409
|
+
.hero__sub code { font-family: var(--font-mono); font-size: 0.88em; background: var(--surface-2); border: 1px solid var(--line); padding: 1px 6px; border-radius: 6px; }
|
|
410
|
+
.hero__cta { margin-top: 32px; display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }
|
|
411
|
+
.hero__cmd { gap: 10px; font-family: var(--font-mono); font-size: 13px; font-weight: 500; color: var(--muted); }
|
|
412
|
+
.hero__cmd:hover { color: var(--ink); }
|
|
413
|
+
|
|
414
|
+
/* entrance stagger */
|
|
415
|
+
.rise { opacity: 0; transform: translateY(16px); animation: rise 0.7s var(--ease) forwards; }
|
|
416
|
+
.rise-2 { animation-delay: 0.08s; }
|
|
417
|
+
.rise-3 { animation-delay: 0.16s; }
|
|
418
|
+
.rise-4 { animation-delay: 0.26s; }
|
|
419
|
+
.rise-5 { animation-delay: 0.4s; }
|
|
420
|
+
@keyframes rise { to { opacity: 1; transform: none; } }
|
|
421
|
+
|
|
422
|
+
/* floating app frame — motion for life, no glow */
|
|
423
|
+
.frame-wrap { position: relative; margin: 64px auto 0; max-width: 980px; perspective: 1600px; }
|
|
424
|
+
.frame-float { animation: floaty 7s ease-in-out infinite; }
|
|
425
|
+
@keyframes floaty { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-9px); } }
|
|
426
|
+
.frame {
|
|
427
|
+
position: relative;
|
|
428
|
+
border-radius: var(--r-xl);
|
|
429
|
+
border: 1px solid var(--line);
|
|
430
|
+
background: var(--surface);
|
|
431
|
+
box-shadow: var(--shadow-l);
|
|
432
|
+
overflow: hidden;
|
|
433
|
+
transform: rotateX(7deg);
|
|
434
|
+
transform-origin: 50% 0;
|
|
435
|
+
transition: transform 0.7s var(--ease);
|
|
436
|
+
}
|
|
437
|
+
.frame-wrap:hover .frame { transform: rotateX(2deg); }
|
|
438
|
+
.frame__bar {
|
|
439
|
+
display: flex; align-items: center; gap: 8px;
|
|
440
|
+
padding: 11px 16px;
|
|
441
|
+
border-bottom: 1px solid var(--line);
|
|
442
|
+
background: var(--surface-2);
|
|
443
|
+
}
|
|
444
|
+
.frame__bar i { width: 10px; height: 10px; border-radius: 50%; background: var(--line-strong); }
|
|
445
|
+
.frame__url {
|
|
446
|
+
margin: 0 auto;
|
|
447
|
+
display: inline-flex; align-items: center; gap: 7px;
|
|
448
|
+
font-size: 11.5px; color: var(--muted);
|
|
449
|
+
background: var(--surface); border: 1px solid var(--line);
|
|
450
|
+
padding: 4px 14px; border-radius: 999px;
|
|
451
|
+
font-family: var(--font-mono);
|
|
452
|
+
}
|
|
453
|
+
.frame__body { display: grid; grid-template-columns: 208px 1fr; min-height: 380px; background: var(--ground); }
|
|
454
|
+
.frame__side { background: var(--ground); border-inline-end: 1px solid var(--line); padding: 14px 10px; display: flex; flex-direction: column; gap: 3px; }
|
|
455
|
+
.frame__side .lockup { padding: 4px 8px 10px; font-size: 13px; }
|
|
456
|
+
.frame__side .mark { width: 22px; height: 22px; border-radius: 7px; font-size: 12px; }
|
|
457
|
+
.fnav {
|
|
458
|
+
display: flex; align-items: center; gap: 9px;
|
|
459
|
+
padding: 6px 9px; border-radius: 8px;
|
|
460
|
+
color: var(--muted); font-size: 12px; font-weight: 540;
|
|
461
|
+
}
|
|
462
|
+
.fnav svg { opacity: 0.75; }
|
|
463
|
+
.fnav.on { background: var(--accent-subtle); color: var(--accent); font-weight: 620; }
|
|
464
|
+
.fnav.on svg { opacity: 1; }
|
|
465
|
+
.frame__main { padding: 18px; display: flex; flex-direction: column; gap: 12px; }
|
|
466
|
+
.frame__tiles { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
|
|
467
|
+
.ftile { background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; text-align: left; }
|
|
468
|
+
.ftile b { display: block; font-size: 17px; letter-spacing: -0.02em; }
|
|
469
|
+
.ftile span { font-size: 11px; color: var(--muted); }
|
|
470
|
+
.ftile .up { color: var(--ok); font-size: 10.5px; font-weight: 650; }
|
|
471
|
+
.fchart { flex: 1; background: var(--surface); border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; text-align: left; }
|
|
472
|
+
.fchart span { font-size: 11px; color: var(--muted); }
|
|
473
|
+
|
|
474
|
+
/* logo marquee */
|
|
475
|
+
.logos { padding: 34px 0 10px; border-block: 1px solid var(--line); background: var(--surface); }
|
|
476
|
+
.logos p { text-align: center; font-size: 11.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--faint); font-weight: 600; }
|
|
477
|
+
.marquee { overflow: hidden; margin-top: 18px; padding-bottom: 26px; -webkit-mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); }
|
|
478
|
+
.marquee__track { display: flex; width: max-content; animation: slide 30s linear infinite; }
|
|
479
|
+
.marquee__track .wlogo { margin-inline-end: 64px; }
|
|
480
|
+
.marquee:hover .marquee__track { animation-play-state: paused; }
|
|
481
|
+
@keyframes slide { to { transform: translateX(-50%); } }
|
|
482
|
+
.wlogo { font-weight: 700; font-size: 17px; letter-spacing: 0.02em; color: var(--faint); white-space: nowrap; }
|
|
483
|
+
|
|
484
|
+
/* sections */
|
|
485
|
+
.section { padding: 96px 28px; }
|
|
486
|
+
.section__in { max-width: 1180px; margin: 0 auto; }
|
|
487
|
+
.section__eyebrow { color: var(--muted); font-weight: 650; font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase; }
|
|
488
|
+
.section h2 { font-family: var(--font-marketing); font-size: clamp(30px, 4vw, 44px); font-weight: 620; line-height: 1.1; letter-spacing: -0.015em; margin-top: 12px; max-width: 24ch; }
|
|
489
|
+
.section__sub { color: var(--muted); max-width: 58ch; margin-top: 14px; font-size: 15.5px; line-height: 1.65; }
|
|
490
|
+
|
|
491
|
+
/* bento */
|
|
492
|
+
.bento { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-top: 44px; }
|
|
493
|
+
.bento .card { padding: var(--pad-card); display: flex; flex-direction: column; gap: 10px; transition: transform var(--speed) var(--ease), box-shadow var(--speed) var(--ease); position: relative; overflow: clip; }
|
|
494
|
+
.bento .card:hover { transform: translateY(-3px); box-shadow: var(--shadow-m); }
|
|
495
|
+
.bento .card h3 { font-size: 16.5px; font-weight: 650; letter-spacing: -0.015em; font-family: var(--font-display); }
|
|
496
|
+
.bento .card p { color: var(--muted); font-size: 13px; line-height: 1.6; }
|
|
497
|
+
.b-2x2 { grid-column: span 2; grid-row: span 2; }
|
|
498
|
+
.b-2x1 { grid-column: span 2; }
|
|
499
|
+
.icotile {
|
|
500
|
+
width: 34px; height: 34px; border-radius: 10px;
|
|
501
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
502
|
+
background: var(--surface-2); color: var(--ink);
|
|
503
|
+
border: 1px solid var(--line);
|
|
504
|
+
flex: none;
|
|
505
|
+
}
|
|
506
|
+
.codebox {
|
|
507
|
+
margin-top: auto;
|
|
508
|
+
background: var(--panel-ink);
|
|
509
|
+
color: #e3e3e1;
|
|
510
|
+
border-radius: var(--r-m);
|
|
511
|
+
border: 1px solid rgb(255 255 255 / 8%);
|
|
512
|
+
padding: 16px 18px;
|
|
513
|
+
font-family: var(--font-mono);
|
|
514
|
+
font-size: 12px;
|
|
515
|
+
line-height: 1.75;
|
|
516
|
+
overflow-x: auto;
|
|
517
|
+
}
|
|
518
|
+
.codebox .k { color: #9a9a97; }
|
|
519
|
+
.codebox .s { color: #c9c9c6; }
|
|
520
|
+
.codebox .c { color: #6c6c6a; }
|
|
521
|
+
.targets { display: flex; flex-wrap: wrap; gap: 8px; }
|
|
522
|
+
.brand-dots { display: flex; gap: 10px; margin-top: auto; padding-top: 6px; }
|
|
523
|
+
.bdot {
|
|
524
|
+
width: 26px; height: 26px; border-radius: 50%;
|
|
525
|
+
border: 2px solid var(--surface);
|
|
526
|
+
box-shadow: 0 0 0 1px var(--line-strong);
|
|
527
|
+
transition: transform var(--speed) var(--ease), box-shadow var(--speed) var(--ease);
|
|
528
|
+
}
|
|
529
|
+
.bdot:hover { transform: scale(1.15); }
|
|
530
|
+
.bdot[aria-pressed="true"] { box-shadow: 0 0 0 2px var(--ink); transform: scale(1.08); }
|
|
531
|
+
.split { display: flex; border-radius: var(--r-m); overflow: hidden; border: 1px solid var(--line); margin-top: auto; min-height: 74px; }
|
|
532
|
+
.split > div { flex: 1; padding: 10px 12px; font-size: 11px; font-weight: 600; }
|
|
533
|
+
.split .lite { background: #f5f5f4; color: #6d6d6c; }
|
|
534
|
+
.split .dark { background: #141415; color: #9f9fa0; }
|
|
535
|
+
.split i { display: block; width: 34px; height: 8px; border-radius: 999px; background: var(--accent); margin-top: 8px; }
|
|
536
|
+
.term {
|
|
537
|
+
margin-top: auto;
|
|
538
|
+
background: var(--panel-ink); border-radius: var(--r-m); padding: 14px 18px;
|
|
539
|
+
font-family: var(--font-mono); font-size: 12.5px; color: #e3e3e1;
|
|
540
|
+
display: flex; align-items: center; gap: 10px;
|
|
541
|
+
border: 1px solid rgb(255 255 255 / 8%);
|
|
542
|
+
overflow-x: auto; white-space: nowrap;
|
|
543
|
+
}
|
|
544
|
+
.term .p { color: #9a9a97; }
|
|
545
|
+
.term .okx { color: #3ecf8e; }
|
|
546
|
+
.term::after { content: ""; width: 7px; height: 15px; background: #e3e3e1; animation: caret 1.1s steps(1) infinite; flex: none; }
|
|
547
|
+
@keyframes caret { 50% { opacity: 0; } }
|
|
548
|
+
.mini-rows { display: flex; flex-direction: column; gap: 8px; margin-top: auto; }
|
|
549
|
+
.mini-rows div { display: flex; align-items: center; gap: 9px; font-size: 12.5px; color: var(--muted); font-weight: 540; }
|
|
550
|
+
.mini-rows svg { color: var(--ok); flex: none; }
|
|
551
|
+
|
|
552
|
+
/* stats band — quiet paper band, serif ink numbers */
|
|
553
|
+
.band { background: var(--surface); border-block: 1px solid var(--line); }
|
|
554
|
+
.band__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 24px; }
|
|
555
|
+
.band__cell { text-align: center; padding: 10px 6px; }
|
|
556
|
+
.band__cell b {
|
|
557
|
+
display: block;
|
|
558
|
+
font-family: var(--font-marketing);
|
|
559
|
+
font-size: clamp(34px, 4.4vw, 54px);
|
|
560
|
+
font-weight: 620;
|
|
561
|
+
letter-spacing: -0.01em;
|
|
562
|
+
color: var(--ink);
|
|
563
|
+
}
|
|
564
|
+
.band__cell span { color: var(--muted); font-size: 13px; font-weight: 540; }
|
|
565
|
+
|
|
566
|
+
/* pricing */
|
|
567
|
+
.pricing { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 44px; align-items: stretch; }
|
|
568
|
+
.price { padding: calc(var(--pad-card) + 6px); display: flex; flex-direction: column; gap: 14px; }
|
|
569
|
+
.price--pop { border-color: var(--ink); box-shadow: var(--shadow-m); }
|
|
570
|
+
.price__head { display: flex; align-items: center; justify-content: space-between; }
|
|
571
|
+
.price__name { font-weight: 680; font-size: 15.5px; }
|
|
572
|
+
.price__amt { font-family: var(--font-marketing); font-size: 40px; font-weight: 620; letter-spacing: -0.01em; }
|
|
573
|
+
.price__amt span { font-size: 14px; color: var(--muted); font-weight: 520; letter-spacing: 0; font-family: var(--font-ui); }
|
|
574
|
+
.price ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }
|
|
575
|
+
.price li { display: flex; gap: 9px; align-items: center; color: var(--muted); font-size: 13px; }
|
|
576
|
+
.price li svg { color: var(--ok); flex: none; }
|
|
577
|
+
.price .btn { margin-top: auto; }
|
|
578
|
+
|
|
579
|
+
/* quote */
|
|
580
|
+
.quote { text-align: center; max-width: 760px; margin: 0 auto; }
|
|
581
|
+
.quote blockquote {
|
|
582
|
+
margin: 0;
|
|
583
|
+
font-family: var(--font-marketing);
|
|
584
|
+
font-size: clamp(22px, 3vw, 31px);
|
|
585
|
+
font-weight: 560;
|
|
586
|
+
line-height: 1.35;
|
|
587
|
+
letter-spacing: -0.01em;
|
|
588
|
+
}
|
|
589
|
+
.quote blockquote em { font-style: italic; }
|
|
590
|
+
.quote figcaption { margin-top: 18px; color: var(--muted); font-size: 13.5px; display: flex; align-items: center; gap: 10px; justify-content: center; }
|
|
591
|
+
|
|
592
|
+
/* cta band — neutral ink panel, no decoration */
|
|
593
|
+
.cta-band {
|
|
594
|
+
border-radius: var(--r-xl);
|
|
595
|
+
background: var(--panel-ink);
|
|
596
|
+
color: #f1f1ef;
|
|
597
|
+
padding: 72px 40px;
|
|
598
|
+
text-align: center;
|
|
599
|
+
}
|
|
600
|
+
.cta-band h2 { font-family: var(--font-marketing); font-size: clamp(28px, 3.6vw, 42px); font-weight: 620; letter-spacing: -0.01em; }
|
|
601
|
+
.cta-band p { color: #9f9fa0; margin-top: 12px; }
|
|
602
|
+
.cta-band .ghosty { color: #c9c9c6; }
|
|
603
|
+
.cta-band .ghosty:hover { color: #ffffff; }
|
|
604
|
+
|
|
605
|
+
/* footer */
|
|
606
|
+
.footer { border-top: 1px solid var(--line); background: var(--surface); padding: 56px 28px 34px; }
|
|
607
|
+
.footer__in { max-width: 1180px; margin: 0 auto; }
|
|
608
|
+
.footer__grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 32px; }
|
|
609
|
+
.footer h4 { margin: 0 0 12px; font-size: 12px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--faint); }
|
|
610
|
+
.footer a { display: block; color: var(--muted); text-decoration: none; font-size: 13px; padding: 4px 0; }
|
|
611
|
+
.footer a:hover { color: var(--ink); }
|
|
612
|
+
.footer__brand p { color: var(--muted); font-size: 13px; max-width: 30ch; margin-top: 12px; line-height: 1.6; }
|
|
613
|
+
.footer__base {
|
|
614
|
+
display: flex; align-items: center; gap: 14px;
|
|
615
|
+
margin-top: 40px; padding-top: 22px;
|
|
616
|
+
border-top: 1px solid var(--line);
|
|
617
|
+
color: var(--faint); font-size: 12.5px;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
/* scroll reveal */
|
|
621
|
+
.rv { opacity: 0; transform: translateY(16px); }
|
|
622
|
+
.rv.in { opacity: 1; transform: none; transition: opacity 0.65s var(--ease), transform 0.65s var(--ease); }
|
|
623
|
+
|
|
624
|
+
/* ============================================================================
|
|
625
|
+
APP — dashboard view
|
|
626
|
+
========================================================================== */
|
|
627
|
+
|
|
628
|
+
.shell {
|
|
629
|
+
display: grid;
|
|
630
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
631
|
+
grid-template-rows: auto minmax(0, 1fr);
|
|
632
|
+
height: 100dvh;
|
|
633
|
+
background: var(--ground);
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
.side {
|
|
637
|
+
grid-row: 1 / -1;
|
|
638
|
+
width: var(--shell-side);
|
|
639
|
+
display: flex;
|
|
640
|
+
flex-direction: column;
|
|
641
|
+
padding: 14px 12px 12px;
|
|
642
|
+
gap: 2px;
|
|
643
|
+
overflow-y: auto;
|
|
644
|
+
overflow-x: hidden;
|
|
645
|
+
transition: width var(--speed) var(--ease), transform var(--speed) var(--ease);
|
|
646
|
+
}
|
|
647
|
+
.side__head { display: flex; align-items: center; gap: 10px; padding: 2px 8px 12px; }
|
|
648
|
+
.side__head .word { font-weight: 680; font-size: 15px; letter-spacing: -0.02em; white-space: nowrap; }
|
|
649
|
+
.side__head .ver { margin-inline-start: auto; }
|
|
650
|
+
|
|
651
|
+
.selector {
|
|
652
|
+
display: flex; align-items: center; gap: 9px;
|
|
653
|
+
padding: 7px 9px;
|
|
654
|
+
border-radius: var(--r-m);
|
|
655
|
+
border: 1px solid var(--line);
|
|
656
|
+
background: var(--surface);
|
|
657
|
+
box-shadow: var(--shadow-s);
|
|
658
|
+
margin-bottom: 12px;
|
|
659
|
+
width: 100%;
|
|
660
|
+
text-align: left;
|
|
661
|
+
}
|
|
662
|
+
.selector:hover { border-color: var(--line-strong); }
|
|
663
|
+
.selector .pdot { width: 20px; height: 20px; border-radius: 7px; background: var(--accent); flex: none; }
|
|
664
|
+
.selector b { font-size: 12.5px; font-weight: 620; display: block; line-height: 1.2; white-space: nowrap; }
|
|
665
|
+
.selector span { font-size: 11px; color: var(--faint); display: block; line-height: 1.2; }
|
|
666
|
+
.selector > svg { margin-inline-start: auto; color: var(--faint); flex: none; }
|
|
667
|
+
|
|
668
|
+
.side__label {
|
|
669
|
+
padding: 14px 10px 5px;
|
|
670
|
+
font-size: 10.5px;
|
|
671
|
+
font-weight: 650;
|
|
672
|
+
letter-spacing: 0.09em;
|
|
673
|
+
text-transform: uppercase;
|
|
674
|
+
color: var(--faint);
|
|
675
|
+
white-space: nowrap;
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
/* transparent border keeps geometry constant — active state can't shift text */
|
|
679
|
+
.nav-item {
|
|
680
|
+
display: flex; align-items: center; gap: 10px;
|
|
681
|
+
height: var(--nav-item-h);
|
|
682
|
+
padding: 0 9px;
|
|
683
|
+
border: 1px solid transparent;
|
|
684
|
+
border-radius: var(--r-s);
|
|
685
|
+
color: var(--muted);
|
|
686
|
+
font-weight: 540;
|
|
687
|
+
font-size: 13px;
|
|
688
|
+
width: 100%;
|
|
689
|
+
text-align: left;
|
|
690
|
+
white-space: nowrap;
|
|
691
|
+
}
|
|
692
|
+
.nav-item svg { flex: none; opacity: 0.85; }
|
|
693
|
+
.nav-item:hover { background: color-mix(in srgb, var(--ink) 5%, transparent); color: var(--ink); }
|
|
694
|
+
.nav-item[aria-current="page"] {
|
|
695
|
+
background: var(--surface);
|
|
696
|
+
color: var(--ink);
|
|
697
|
+
font-weight: 620;
|
|
698
|
+
box-shadow: var(--shadow-s);
|
|
699
|
+
border-color: var(--line);
|
|
700
|
+
}
|
|
701
|
+
.nav-item[aria-current="page"] svg { color: var(--accent); opacity: 1; }
|
|
702
|
+
.nav-item .tail { margin-inline-start: auto; }
|
|
703
|
+
.nav-item .chev { margin-inline-start: auto; color: var(--faint); display: inline-flex; }
|
|
704
|
+
.nav-item .chev svg { transition: transform var(--speed) var(--ease); }
|
|
705
|
+
.nav-item[aria-expanded="false"] .chev svg { transform: rotate(-90deg); }
|
|
706
|
+
|
|
707
|
+
/* nested groups */
|
|
708
|
+
.nav-sub { display: grid; grid-template-rows: 0fr; transition: grid-template-rows var(--speed) var(--ease); }
|
|
709
|
+
.nav-sub.open { grid-template-rows: 1fr; }
|
|
710
|
+
.nav-sub__in {
|
|
711
|
+
overflow: hidden;
|
|
712
|
+
display: flex; flex-direction: column; gap: 2px;
|
|
713
|
+
margin-inline-start: 17px;
|
|
714
|
+
padding-inline-start: 8px;
|
|
715
|
+
border-inline-start: 1px solid var(--line);
|
|
716
|
+
}
|
|
717
|
+
.nav-sub .nav-item { height: calc(var(--nav-item-h) - 4px); font-size: 12.5px; }
|
|
718
|
+
|
|
719
|
+
.side__foot { margin-top: auto; display: flex; flex-direction: column; gap: 10px; padding-top: 14px; }
|
|
720
|
+
|
|
721
|
+
/* the optional ad module — hairline, no gradient */
|
|
722
|
+
.ad {
|
|
723
|
+
position: relative;
|
|
724
|
+
border-radius: var(--r-m);
|
|
725
|
+
padding: 12px 12px 11px;
|
|
726
|
+
background: var(--surface);
|
|
727
|
+
border: 1px solid var(--line-strong);
|
|
728
|
+
box-shadow: var(--shadow-s);
|
|
729
|
+
}
|
|
730
|
+
.ad__tag { font-size: 9.5px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--faint); font-weight: 650; }
|
|
731
|
+
.ad b { display: block; font-size: 12.5px; font-weight: 620; margin-top: 3px; letter-spacing: -0.01em; }
|
|
732
|
+
.ad p { font-size: 11.5px; color: var(--muted); line-height: 1.45; margin-top: 2px; }
|
|
733
|
+
.ad a { color: var(--accent); font-size: 11.5px; font-weight: 620; text-decoration: none; display: inline-block; margin-top: 6px; }
|
|
734
|
+
.ad__x { position: absolute; top: 6px; right: 6px; color: var(--faint); width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; border-radius: 6px; }
|
|
735
|
+
.ad__x:hover { color: var(--ink); background: var(--surface-2); }
|
|
736
|
+
|
|
737
|
+
.user-row { display: flex; align-items: center; gap: 9px; padding: 6px 8px; border-radius: var(--r-s); width: 100%; text-align: left; }
|
|
738
|
+
.user-row:hover { background: color-mix(in srgb, var(--ink) 5%, transparent); }
|
|
739
|
+
.user-row b { display: block; font-size: 12.5px; font-weight: 600; line-height: 1.25; white-space: nowrap; }
|
|
740
|
+
.user-row span { display: block; font-size: 11px; color: var(--faint); line-height: 1.25; white-space: nowrap; }
|
|
741
|
+
.user-row > svg { margin-inline-start: auto; color: var(--faint); flex: none; }
|
|
742
|
+
|
|
743
|
+
/* collapsed rail */
|
|
744
|
+
.shell[data-collapsed="true"] .side { width: var(--shell-rail); padding-inline: 10px; }
|
|
745
|
+
.shell[data-collapsed="true"] :is(.side__head .word, .side__head .ver, .side .meta, .selector > svg,
|
|
746
|
+
.side__label, .nav-item .lbl, .nav-item .tail, .nav-item .chev, .nav-sub,
|
|
747
|
+
.ad, .user-row > svg) { display: none; }
|
|
748
|
+
.shell[data-collapsed="true"] .side__head { justify-content: center; padding-inline: 0; }
|
|
749
|
+
.shell[data-collapsed="true"] .selector { justify-content: center; padding: 8px 0; }
|
|
750
|
+
.shell[data-collapsed="true"] .nav-item { justify-content: center; padding: 0; gap: 0; }
|
|
751
|
+
.shell[data-collapsed="true"] .user-row { justify-content: center; }
|
|
752
|
+
|
|
753
|
+
/* topbar — search lives HERE now */
|
|
754
|
+
.top {
|
|
755
|
+
grid-column: 2;
|
|
756
|
+
display: flex; align-items: center; gap: 10px;
|
|
757
|
+
min-height: var(--shell-top);
|
|
758
|
+
padding: 0 18px 0 6px;
|
|
759
|
+
}
|
|
760
|
+
.top__toggle { color: var(--muted); }
|
|
761
|
+
.crumb { display: flex; align-items: center; gap: 8px; font-size: 13.5px; font-weight: 620; white-space: nowrap; }
|
|
762
|
+
.crumb .sep { color: var(--faint); font-weight: 400; }
|
|
763
|
+
.top__search {
|
|
764
|
+
display: flex; align-items: center; gap: 8px;
|
|
765
|
+
flex: 1;
|
|
766
|
+
max-width: 380px;
|
|
767
|
+
margin-inline: auto;
|
|
768
|
+
padding: 0 11px;
|
|
769
|
+
height: calc(var(--control-h) - 2px);
|
|
770
|
+
border-radius: var(--r-s);
|
|
771
|
+
border: 1px solid var(--line);
|
|
772
|
+
background: var(--surface);
|
|
773
|
+
color: var(--faint);
|
|
774
|
+
font-size: 12.5px;
|
|
775
|
+
}
|
|
776
|
+
.top__search:hover { border-color: var(--line-strong); color: var(--muted); }
|
|
777
|
+
.top__search kbd {
|
|
778
|
+
margin-inline-start: auto;
|
|
779
|
+
font-family: var(--font-mono); font-size: 10px;
|
|
780
|
+
border: 1px solid var(--line); border-radius: 5px;
|
|
781
|
+
padding: 1px 5px; color: var(--faint); background: var(--surface-2);
|
|
782
|
+
}
|
|
783
|
+
.top__end { display: flex; align-items: center; gap: 6px; }
|
|
784
|
+
.top__divider { width: 1px; height: 22px; background: var(--line-strong); margin: 0 6px; }
|
|
785
|
+
|
|
786
|
+
.account { position: relative; }
|
|
787
|
+
.account > button {
|
|
788
|
+
display: flex; align-items: center; gap: 9px;
|
|
789
|
+
height: var(--control-h);
|
|
790
|
+
padding: 0 10px 0 6px;
|
|
791
|
+
border-radius: 999px;
|
|
792
|
+
border: 1px solid transparent;
|
|
793
|
+
}
|
|
794
|
+
.account > button:hover { background: var(--surface); border-color: var(--line); box-shadow: var(--shadow-s); }
|
|
795
|
+
.account b { font-size: 12.5px; font-weight: 600; }
|
|
796
|
+
.account > button > svg { color: var(--faint); }
|
|
797
|
+
.menu {
|
|
798
|
+
position: absolute; top: calc(100% + 8px); right: 0;
|
|
799
|
+
min-width: 210px;
|
|
800
|
+
background: var(--surface);
|
|
801
|
+
border: 1px solid var(--line);
|
|
802
|
+
border-radius: var(--r-m);
|
|
803
|
+
box-shadow: var(--shadow-m);
|
|
804
|
+
padding: 6px;
|
|
805
|
+
display: none;
|
|
806
|
+
z-index: 40;
|
|
807
|
+
}
|
|
808
|
+
.account.open .menu { display: block; }
|
|
809
|
+
.menu__head { padding: 8px 10px 10px; border-bottom: 1px solid var(--line); margin-bottom: 6px; }
|
|
810
|
+
.menu__head b { font-size: 13px; display: block; }
|
|
811
|
+
.menu__head span { font-size: 11.5px; color: var(--faint); }
|
|
812
|
+
.menu button { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 8px 10px; border-radius: var(--r-s); font-size: 13px; color: var(--muted); }
|
|
813
|
+
.menu button:hover { background: var(--surface-2); color: var(--ink); }
|
|
814
|
+
.menu button.danger { color: var(--danger); }
|
|
815
|
+
|
|
816
|
+
/* main — the one big rounded card */
|
|
817
|
+
.main {
|
|
818
|
+
grid-column: 2;
|
|
819
|
+
overflow-y: auto;
|
|
820
|
+
margin: 0 14px 14px 6px;
|
|
821
|
+
background: var(--surface);
|
|
822
|
+
border: 1px solid var(--line);
|
|
823
|
+
border-radius: var(--r-xl);
|
|
824
|
+
box-shadow: var(--shadow-s);
|
|
825
|
+
}
|
|
826
|
+
.main__in { max-width: 1160px; margin: 0 auto; padding: calc(var(--pad-card) + 12px) calc(var(--pad-card) + 12px) 48px; }
|
|
827
|
+
|
|
828
|
+
.page-head { display: flex; align-items: flex-end; gap: 18px; flex-wrap: wrap; }
|
|
829
|
+
.page-head h1 { font-size: 22px; font-weight: 650; letter-spacing: -0.02em; }
|
|
830
|
+
.page-head .sub { color: var(--muted); font-size: 13.5px; margin-top: 5px; }
|
|
831
|
+
.page-head__end { margin-inline-start: auto; display: flex; align-items: center; gap: 10px; }
|
|
832
|
+
|
|
833
|
+
/* stat tiles — ONE card, hairline dividers (Manus) */
|
|
834
|
+
.tiles {
|
|
835
|
+
display: grid;
|
|
836
|
+
grid-template-columns: repeat(4, 1fr);
|
|
837
|
+
margin-top: 26px;
|
|
838
|
+
overflow: hidden;
|
|
839
|
+
}
|
|
840
|
+
.tile { padding: calc(var(--pad-card) - 3px) var(--pad-card); display: flex; flex-direction: column; gap: 4px; border-inline-start: 1px solid var(--line); }
|
|
841
|
+
.tile:first-child { border-inline-start: 0; }
|
|
842
|
+
.tile__label { font-size: 11px; color: var(--muted); font-weight: 620; letter-spacing: 0.07em; text-transform: uppercase; display: flex; align-items: center; gap: 8px; }
|
|
843
|
+
.tile__row { display: flex; align-items: baseline; gap: 10px; }
|
|
844
|
+
.tile__num { font-family: var(--font-display); font-size: 24px; font-weight: 650; letter-spacing: -0.02em; }
|
|
845
|
+
.delta { font-size: 11.5px; font-weight: 650; padding: 2px 7px; border-radius: 999px; }
|
|
846
|
+
.delta--up { color: var(--ok); background: var(--ok-subtle); }
|
|
847
|
+
.delta--down { color: var(--danger); background: var(--danger-subtle); }
|
|
848
|
+
.delta--flat { color: var(--muted); background: var(--surface-2); }
|
|
849
|
+
.tile svg.spark { margin-top: 8px; width: 100%; height: 34px; }
|
|
850
|
+
|
|
851
|
+
/* grid: chart + side column */
|
|
852
|
+
.grid-2 { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 14px; margin-top: 14px; }
|
|
853
|
+
.panel { padding: var(--pad-card); }
|
|
854
|
+
.panel__head { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
|
|
855
|
+
.panel__head h3 { font-size: 14px; font-weight: 650; letter-spacing: -0.01em; font-family: var(--font-display); }
|
|
856
|
+
.panel__head .end { margin-inline-start: auto; display: flex; align-items: center; gap: 10px; }
|
|
857
|
+
.legend { display: flex; gap: 14px; font-size: 12px; color: var(--muted); }
|
|
858
|
+
.legend i { display: inline-block; width: 14px; height: 3px; border-radius: 2px; background: var(--accent); vertical-align: middle; margin-inline-end: 6px; }
|
|
859
|
+
.legend .prev i { background: var(--chart-2); height: 0; border-top: 2.5px dashed var(--chart-2); }
|
|
860
|
+
|
|
861
|
+
.chart-wrap { position: relative; }
|
|
862
|
+
.panel--chart { display: flex; flex-direction: column; }
|
|
863
|
+
.toppages { margin-top: auto; border-top: 1px solid var(--line); padding-top: 12px; }
|
|
864
|
+
.tp-head { display: flex; justify-content: space-between; font-size: 11px; letter-spacing: 0.07em; text-transform: uppercase; color: var(--faint); font-weight: 640; margin-bottom: 4px; }
|
|
865
|
+
.tp-row { display: grid; grid-template-columns: 104px minmax(0, 1fr) auto; gap: 12px; align-items: center; padding: 7px 0; font-size: 12.5px; color: var(--muted); }
|
|
866
|
+
.tp-row i { display: block; position: relative; height: 6px; border-radius: 999px; background: var(--surface-2); border: 1px solid var(--line); overflow: hidden; }
|
|
867
|
+
.tp-row i::after { content: ""; position: absolute; inset: 0; width: var(--w); background: var(--accent); border-radius: 999px; opacity: 0.85; }
|
|
868
|
+
.tp-row b { color: var(--ink); font-weight: 620; }
|
|
869
|
+
|
|
870
|
+
.chart-tip {
|
|
871
|
+
position: absolute;
|
|
872
|
+
pointer-events: none;
|
|
873
|
+
background: var(--surface);
|
|
874
|
+
border: 1px solid var(--line-strong);
|
|
875
|
+
border-radius: var(--r-s);
|
|
876
|
+
box-shadow: var(--shadow-m);
|
|
877
|
+
padding: 8px 11px;
|
|
878
|
+
font-size: 11.5px;
|
|
879
|
+
display: none;
|
|
880
|
+
min-width: 122px;
|
|
881
|
+
z-index: 5;
|
|
882
|
+
}
|
|
883
|
+
.chart-tip b { display: block; font-size: 11px; color: var(--faint); font-weight: 600; margin-bottom: 4px; }
|
|
884
|
+
.chart-tip .row { display: flex; align-items: center; gap: 7px; color: var(--muted); }
|
|
885
|
+
.chart-tip .row i { width: 8px; height: 8px; border-radius: 3px; }
|
|
886
|
+
.chart-tip .row .v { margin-inline-start: auto; font-weight: 650; color: var(--ink); font-variant-numeric: tabular-nums; }
|
|
887
|
+
|
|
888
|
+
.side-col { display: flex; flex-direction: column; gap: 14px; }
|
|
889
|
+
.meter { display: flex; flex-direction: column; gap: 6px; margin-top: 12px; }
|
|
890
|
+
.meter__row { display: flex; justify-content: space-between; font-size: 12.5px; color: var(--muted); font-weight: 540; }
|
|
891
|
+
.meter__row b { color: var(--ink); font-weight: 620; }
|
|
892
|
+
.meter__bar { height: 6px; border-radius: 999px; background: var(--surface-2); border: 1px solid var(--line); overflow: hidden; }
|
|
893
|
+
.meter__bar i { display: block; height: 100%; border-radius: 999px; background: var(--accent); }
|
|
894
|
+
.meter__bar i.warnfill { background: var(--warn); }
|
|
895
|
+
|
|
896
|
+
.check-list { display: flex; flex-direction: column; gap: 4px; margin-top: 8px; }
|
|
897
|
+
.check {
|
|
898
|
+
display: flex; align-items: center; gap: 10px;
|
|
899
|
+
padding: 7px 8px; border-radius: var(--r-s);
|
|
900
|
+
font-size: 13px; color: var(--muted); font-weight: 540;
|
|
901
|
+
}
|
|
902
|
+
.check:hover { background: var(--surface-2); }
|
|
903
|
+
.check .box { width: 17px; height: 17px; border-radius: 6px; border: 1.5px solid var(--line-strong); flex: none; display: flex; align-items: center; justify-content: center; }
|
|
904
|
+
.check.done { color: var(--faint); text-decoration: line-through; }
|
|
905
|
+
.check.done .box { background: var(--ok); border-color: var(--ok); color: #fff; }
|
|
906
|
+
.check .go { margin-inline-start: auto; color: var(--accent); font-size: 11.5px; font-weight: 640; text-decoration: none; }
|
|
907
|
+
|
|
908
|
+
.feed { display: flex; flex-direction: column; margin-top: 6px; }
|
|
909
|
+
.feed__item { display: flex; gap: 11px; padding: 9px 2px; align-items: flex-start; border-bottom: 1px solid var(--line); }
|
|
910
|
+
.feed__item:last-child { border-bottom: 0; }
|
|
911
|
+
.feed__dot { width: 8px; height: 8px; border-radius: 50%; margin-top: 5px; flex: none; }
|
|
912
|
+
.feed__item p { font-size: 12.5px; color: var(--muted); line-height: 1.45; }
|
|
913
|
+
.feed__item p b { color: var(--ink); font-weight: 600; }
|
|
914
|
+
.feed__item time { display: block; font-size: 11px; color: var(--faint); margin-top: 1px; }
|
|
915
|
+
|
|
916
|
+
/* promo banner — plain card now */
|
|
917
|
+
.promo {
|
|
918
|
+
margin-top: 14px;
|
|
919
|
+
display: flex; align-items: center; gap: 16px;
|
|
920
|
+
padding: 16px var(--pad-card);
|
|
921
|
+
border-radius: var(--r-l);
|
|
922
|
+
background: var(--surface);
|
|
923
|
+
border: 1px solid var(--line-strong);
|
|
924
|
+
box-shadow: var(--shadow-s);
|
|
925
|
+
flex-wrap: wrap;
|
|
926
|
+
}
|
|
927
|
+
.promo b { font-size: 13.5px; font-weight: 650; display: block; letter-spacing: -0.01em; }
|
|
928
|
+
.promo p { font-size: 12.5px; color: var(--muted); }
|
|
929
|
+
.promo .brand-dots { margin: 0 0 0 auto; padding: 0; }
|
|
930
|
+
|
|
931
|
+
/* table */
|
|
932
|
+
.tablecard { margin-top: 14px; overflow: hidden; }
|
|
933
|
+
.tablewrap { overflow-x: auto; }
|
|
934
|
+
table { width: 100%; border-collapse: collapse; font-size: 13px; }
|
|
935
|
+
th {
|
|
936
|
+
text-align: left; font-size: 11px; letter-spacing: 0.07em; text-transform: uppercase;
|
|
937
|
+
color: var(--faint); font-weight: 640; padding: var(--cell-pad);
|
|
938
|
+
border-bottom: 1px solid var(--line);
|
|
939
|
+
white-space: nowrap;
|
|
940
|
+
}
|
|
941
|
+
td { padding: var(--cell-pad); border-bottom: 1px solid var(--line); color: var(--muted); white-space: nowrap; }
|
|
942
|
+
tbody tr:hover td { background: color-mix(in srgb, var(--ink) 2.5%, transparent); }
|
|
943
|
+
tbody tr:last-child td { border-bottom: 0; }
|
|
944
|
+
td .proj { display: flex; align-items: center; gap: 10px; color: var(--ink); font-weight: 600; }
|
|
945
|
+
td .pdot { width: 18px; height: 18px; border-radius: 6px; flex: none; opacity: 0.92; }
|
|
946
|
+
.tfoot { display: flex; align-items: center; gap: 10px; padding: 10px 16px; color: var(--faint); font-size: 12px; }
|
|
947
|
+
.tfoot .pages { margin-inline-start: auto; display: flex; gap: 4px; }
|
|
948
|
+
|
|
949
|
+
/* mobile drawer */
|
|
950
|
+
.scrim { display: none; position: fixed; inset: 0; z-index: 45; background: rgb(0 0 0 / 45%); border: 0; }
|
|
951
|
+
.top__drawer { display: none; }
|
|
952
|
+
|
|
953
|
+
@media (max-width: 1200px) {
|
|
954
|
+
.shell { grid-template-columns: minmax(0, 1fr); }
|
|
955
|
+
.top, .main { grid-column: 1; }
|
|
956
|
+
.side {
|
|
957
|
+
position: fixed; inset-block: 0; inset-inline-start: 0; z-index: 50;
|
|
958
|
+
transform: translateX(-105%);
|
|
959
|
+
background: var(--ground);
|
|
960
|
+
box-shadow: var(--shadow-l);
|
|
961
|
+
width: var(--shell-side) !important;
|
|
962
|
+
}
|
|
963
|
+
.shell[data-open="true"] .side { transform: none; }
|
|
964
|
+
.shell[data-open="true"] .scrim { display: block; }
|
|
965
|
+
.top__drawer { display: inline-flex; }
|
|
966
|
+
.top__collapse { display: none; }
|
|
967
|
+
.grid-2 { grid-template-columns: 1fr; }
|
|
968
|
+
.tiles { grid-template-columns: repeat(2, 1fr); }
|
|
969
|
+
.tile:nth-child(odd) { border-inline-start: 0; }
|
|
970
|
+
.tile:nth-child(n+3) { border-top: 1px solid var(--line); }
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
@media (max-width: 900px) {
|
|
974
|
+
.bento { grid-template-columns: repeat(2, 1fr); }
|
|
975
|
+
.b-2x2, .b-2x1 { grid-column: span 2; }
|
|
976
|
+
.band__grid { grid-template-columns: repeat(2, 1fr); }
|
|
977
|
+
.pricing { grid-template-columns: 1fr; }
|
|
978
|
+
.footer__grid { grid-template-columns: 1fr 1fr; }
|
|
979
|
+
.nav__links { display: none; }
|
|
980
|
+
.frame__body { grid-template-columns: 1fr; }
|
|
981
|
+
.frame__side { display: none; }
|
|
982
|
+
}
|
|
983
|
+
@media (max-width: 760px) {
|
|
984
|
+
.top__search { display: none; }
|
|
985
|
+
}
|
|
986
|
+
@media (max-width: 640px) {
|
|
987
|
+
.tiles { grid-template-columns: 1fr; }
|
|
988
|
+
.tile { border-inline-start: 0; }
|
|
989
|
+
.tile:nth-child(n+2) { border-top: 1px solid var(--line); }
|
|
990
|
+
.bento { grid-template-columns: 1fr; }
|
|
991
|
+
.b-2x2, .b-2x1 { grid-column: span 1; }
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
/* ─── Draft dock (meta chrome — always dark glass) ───────────────────────── */
|
|
995
|
+
|
|
996
|
+
.dock {
|
|
997
|
+
position: fixed;
|
|
998
|
+
bottom: 18px; left: 50%;
|
|
999
|
+
transform: translateX(-50%);
|
|
1000
|
+
z-index: 100;
|
|
1001
|
+
display: flex; align-items: center; gap: 5px;
|
|
1002
|
+
padding: 7px 10px;
|
|
1003
|
+
border-radius: 999px;
|
|
1004
|
+
background: rgb(17 17 18 / 90%);
|
|
1005
|
+
-webkit-backdrop-filter: blur(14px);
|
|
1006
|
+
backdrop-filter: blur(14px);
|
|
1007
|
+
border: 1px solid rgb(255 255 255 / 12%);
|
|
1008
|
+
box-shadow: 0 18px 50px -12px rgb(0 0 0 / 55%);
|
|
1009
|
+
color: #d0d0ce;
|
|
1010
|
+
font-size: 12px;
|
|
1011
|
+
flex-wrap: wrap;
|
|
1012
|
+
justify-content: center;
|
|
1013
|
+
max-width: calc(100vw - 24px);
|
|
1014
|
+
}
|
|
1015
|
+
.dock__tag { font-size: 9.5px; letter-spacing: 0.12em; font-weight: 700; color: #7f7f80; padding: 0 6px 0 4px; text-transform: uppercase; }
|
|
1016
|
+
.dock__sep { width: 1px; height: 18px; background: rgb(255 255 255 / 14%); margin: 0 3px; }
|
|
1017
|
+
.dock button { border-radius: 999px; }
|
|
1018
|
+
.dock .dseg { display: flex; background: rgb(255 255 255 / 7%); border-radius: 999px; padding: 2px; }
|
|
1019
|
+
.dock .dseg button { padding: 4px 12px; font-weight: 620; font-size: 12px; color: #9f9fa0; }
|
|
1020
|
+
.dock .dseg button[aria-pressed="true"] { background: #f1f1ef; color: #111112; }
|
|
1021
|
+
.dock .dicon { width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center; color: #9f9fa0; }
|
|
1022
|
+
.dock .dicon:hover { color: #f1f1ef; background: rgb(255 255 255 / 8%); }
|
|
1023
|
+
.dock .dicon[aria-pressed="true"] { color: #f1f1ef; background: rgb(255 255 255 / 14%); }
|
|
1024
|
+
.dock .bdot { border-color: transparent; box-shadow: 0 0 0 1px rgb(255 255 255 / 25%); width: 20px; height: 20px; }
|
|
1025
|
+
.dock .bdot[aria-pressed="true"] { box-shadow: 0 0 0 2px #f1f1ef; }
|
|
1026
|
+
.dock .tbtn { padding: 3px 9px; font-weight: 640; font-size: 11.5px; color: #9f9fa0; }
|
|
1027
|
+
.dock .tbtn[aria-pressed="true"] { background: rgb(255 255 255 / 14%); color: #f1f1ef; }
|
|
1028
|
+
.dock .tbtn.t-serif { font-family: "New York", ui-serif, Georgia, serif; }
|
|
1029
|
+
.dock .tbtn.t-mono { font-family: var(--font-mono); }
|
|
1030
|
+
|
|
1031
|
+
/* ─── Motion safety ──────────────────────────────────────────────────────── */
|
|
1032
|
+
|
|
1033
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1034
|
+
html { scroll-behavior: auto; }
|
|
1035
|
+
.marquee__track, .term::after, .pill-status--warn i, .frame-float { animation: none !important; }
|
|
1036
|
+
.rise { animation-duration: 0.01ms; }
|
|
1037
|
+
.rv { opacity: 1; transform: none; }
|
|
1038
|
+
.frame { transform: none; transition: none; }
|
|
1039
|
+
* { transition-duration: 0.01ms !important; }
|
|
1040
|
+
}
|
|
1041
|
+
</style>
|
|
1042
|
+
|
|
1043
|
+
<!-- ═══════════════════════ SVG symbol defs ═══════════════════════ -->
|
|
1044
|
+
<svg width="0" height="0" style="position:absolute" aria-hidden="true">
|
|
1045
|
+
<defs>
|
|
1046
|
+
<symbol id="i-home" viewBox="0 0 16 16"><path d="M2.5 6.5 8 2l5.5 4.5V13a1 1 0 0 1-1 1h-3v-4h-3v4h-3a1 1 0 0 1-1-1z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/></symbol>
|
|
1047
|
+
<symbol id="i-pulse" viewBox="0 0 16 16"><path d="M1.5 8h3l2-4.5L10 12l2-4h2.5" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></symbol>
|
|
1048
|
+
<symbol id="i-folder" viewBox="0 0 16 16"><path d="M1.5 4a1 1 0 0 1 1-1H6l1.5 2h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/></symbol>
|
|
1049
|
+
<symbol id="i-bolt" viewBox="0 0 16 16"><path d="M8.8 1.5 3.5 9h3.4l-.7 5.5L11.5 7H8.1z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/></symbol>
|
|
1050
|
+
<symbol id="i-users" viewBox="0 0 16 16"><circle cx="6" cy="5.5" r="2.5" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M1.5 13.5c.5-2.3 2.3-3.5 4.5-3.5s4 1.2 4.5 3.5M11 3.3a2.5 2.5 0 0 1 0 4.4M12 10.3c1.3.5 2.2 1.5 2.5 3.2" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></symbol>
|
|
1051
|
+
<symbol id="i-key" viewBox="0 0 16 16"><circle cx="5" cy="11" r="3" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M7.2 8.8 13.5 2.5M11 5l2 2M9 7l1.5 1.5" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></symbol>
|
|
1052
|
+
<symbol id="i-chart" viewBox="0 0 16 16"><path d="M2 2v11a1 1 0 0 0 1 1h11" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><path d="M5 10.5V8M8 10.5V5.5M11 10.5V7" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></symbol>
|
|
1053
|
+
<symbol id="i-gauge" viewBox="0 0 16 16"><path d="M2.5 12.5a6 6 0 1 1 11 0" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><path d="M8 9.5 10.8 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></symbol>
|
|
1054
|
+
<symbol id="i-gear" viewBox="0 0 16 16"><circle cx="8" cy="8" r="2.2" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M8 1.8v2M8 12.2v2M1.8 8h2M12.2 8h2M3.6 3.6l1.4 1.4M11 11l1.4 1.4M12.4 3.6 11 5M5 11l-1.4 1.4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></symbol>
|
|
1055
|
+
<symbol id="i-card" viewBox="0 0 16 16"><rect x="1.5" y="3.5" width="13" height="9" rx="1.5" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M1.5 6.5h13" stroke="currentColor" stroke-width="1.5"/></symbol>
|
|
1056
|
+
<symbol id="i-bell" viewBox="0 0 16 16"><path d="M8 2a4 4 0 0 1 4 4c0 3 .8 4 1.5 4.7H2.5C3.2 10 4 9 4 6a4 4 0 0 1 4-4zM6.5 13a1.6 1.6 0 0 0 3 0" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></symbol>
|
|
1057
|
+
<symbol id="i-search" viewBox="0 0 16 16"><circle cx="7" cy="7" r="4.5" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="m10.5 10.5 3 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></symbol>
|
|
1058
|
+
<symbol id="i-book" viewBox="0 0 16 16"><path d="M2.5 3.5A1.5 1.5 0 0 1 4 2h9.5v10.5H4A1.5 1.5 0 0 0 2.5 14z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M2.5 12.5A1.5 1.5 0 0 1 4 11h9.5" fill="none" stroke="currentColor" stroke-width="1.5"/></symbol>
|
|
1059
|
+
<symbol id="i-chev-d" viewBox="0 0 16 16"><path d="m4 6 4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></symbol>
|
|
1060
|
+
<symbol id="i-chev-ud" viewBox="0 0 16 16"><path d="m5 6.2 3-3 3 3M5 9.8l3 3 3-3" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></symbol>
|
|
1061
|
+
<symbol id="i-panel" viewBox="0 0 16 16"><rect x="2" y="2.5" width="12" height="11" rx="2" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M6.2 2.5v11" stroke="currentColor" stroke-width="1.5"/></symbol>
|
|
1062
|
+
<symbol id="i-plus" viewBox="0 0 16 16"><path d="M8 3v10M3 8h10" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/></symbol>
|
|
1063
|
+
<symbol id="i-check" viewBox="0 0 16 16"><path d="m3 8.5 3.2 3L13 4.5" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></symbol>
|
|
1064
|
+
<symbol id="i-x" viewBox="0 0 16 16"><path d="m4 4 8 8M12 4l-8 8" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></symbol>
|
|
1065
|
+
<symbol id="i-dots" viewBox="0 0 16 16"><circle cx="3.5" cy="8" r="1.2" fill="currentColor"/><circle cx="8" cy="8" r="1.2" fill="currentColor"/><circle cx="12.5" cy="8" r="1.2" fill="currentColor"/></symbol>
|
|
1066
|
+
<symbol id="i-arrow" viewBox="0 0 16 16"><path d="M2.5 8h10M9 4.5 13 8l-4 3.5" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></symbol>
|
|
1067
|
+
<symbol id="i-spark" viewBox="0 0 16 16"><path d="M8 1.5 9.6 6 14 8l-4.4 2L8 14.5 6.4 10 2 8l4.4-2z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/></symbol>
|
|
1068
|
+
<symbol id="i-sun" viewBox="0 0 16 16"><circle cx="8" cy="8" r="3" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M8 1.5v1.8M8 12.7v1.8M1.5 8h1.8M12.7 8h1.8M3.4 3.4l1.3 1.3M11.3 11.3l1.3 1.3M12.6 3.4l-1.3 1.3M4.7 11.3l-1.3 1.3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></symbol>
|
|
1069
|
+
<symbol id="i-moon" viewBox="0 0 16 16"><path d="M13.5 9.5A6 6 0 0 1 6.5 2.5 6 6 0 1 0 13.5 9.5z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/></symbol>
|
|
1070
|
+
<symbol id="i-density" viewBox="0 0 16 16"><path d="M2.5 4h11M2.5 8h11M2.5 12h11" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/></symbol>
|
|
1071
|
+
<symbol id="i-globe" viewBox="0 0 16 16"><circle cx="8" cy="8" r="6" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M2 8h12M8 2c-3.5 3.8-3.5 8.2 0 12 3.5-3.8 3.5-8.2 0-12z" fill="none" stroke="currentColor" stroke-width="1.2"/></symbol>
|
|
1072
|
+
<symbol id="i-desktop" viewBox="0 0 16 16"><rect x="1.5" y="2.5" width="13" height="9" rx="1.5" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M5.5 14h5M8 11.5V14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></symbol>
|
|
1073
|
+
<symbol id="i-puzzle" viewBox="0 0 16 16"><path d="M6 2.5h4v3a1.5 1.5 0 1 0 3 0v0h.5v8h-11v-8H3v0a1.5 1.5 0 1 0 3 0z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/></symbol>
|
|
1074
|
+
<symbol id="i-server" viewBox="0 0 16 16"><rect x="2" y="2.5" width="12" height="4.5" rx="1.2" fill="none" stroke="currentColor" stroke-width="1.5"/><rect x="2" y="9" width="12" height="4.5" rx="1.2" fill="none" stroke="currentColor" stroke-width="1.5"/><circle cx="4.6" cy="4.75" r="0.9" fill="currentColor"/><circle cx="4.6" cy="11.25" r="0.9" fill="currentColor"/></symbol>
|
|
1075
|
+
</defs>
|
|
1076
|
+
</svg>
|
|
1077
|
+
|
|
1078
|
+
<!-- ═══════════════════════════════ SITE ═══════════════════════════════ -->
|
|
1079
|
+
<div class="view view--site site" id="view-site">
|
|
1080
|
+
|
|
1081
|
+
<header class="nav" id="site-nav">
|
|
1082
|
+
<div class="nav__in">
|
|
1083
|
+
<span class="lockup"><span class="mark">Ω</span><span class="word">Playground</span></span>
|
|
1084
|
+
<nav class="nav__links" aria-label="Site">
|
|
1085
|
+
<a href="#bento">Product</a>
|
|
1086
|
+
<a href="#pricing">Pricing</a>
|
|
1087
|
+
<a href="#">Docs</a>
|
|
1088
|
+
<a href="#">Changelog</a>
|
|
1089
|
+
</nav>
|
|
1090
|
+
<div class="nav__cta">
|
|
1091
|
+
<button class="btn btn--quiet">Sign in</button>
|
|
1092
|
+
<button class="btn btn--ink">Get started</button>
|
|
1093
|
+
</div>
|
|
1094
|
+
</div>
|
|
1095
|
+
</header>
|
|
1096
|
+
|
|
1097
|
+
<section class="hero">
|
|
1098
|
+
<div class="hero__bg">
|
|
1099
|
+
<div class="hero__dots"></div>
|
|
1100
|
+
</div>
|
|
1101
|
+
<div class="hero__in">
|
|
1102
|
+
<span class="hero__badge rise"><i></i><b>OMEGA 1.0</b> is here — one framework, every surface</span>
|
|
1103
|
+
<h1 class="rise rise-2">One config.<span class="rot-line"><span class="rot" id="rot-word">Every surface.</span></span></h1>
|
|
1104
|
+
<p class="hero__sub rise rise-3">OMEGA turns a single <code>omega.json5</code> into your marketing site, dashboard, backend, desktop app, and browser extension. One brand. One deploy verb. Every target.</p>
|
|
1105
|
+
<div class="hero__cta rise rise-4">
|
|
1106
|
+
<button class="btn btn--ink btn--lg">Start building free</button>
|
|
1107
|
+
<button class="btn btn--ghost btn--lg hero__cmd mono">npx omega setup <svg width="14" height="14"><use href="#i-arrow"/></svg></button>
|
|
1108
|
+
</div>
|
|
1109
|
+
|
|
1110
|
+
<div class="frame-wrap rise rise-5">
|
|
1111
|
+
<div class="frame-float">
|
|
1112
|
+
<div class="frame">
|
|
1113
|
+
<div class="frame__bar">
|
|
1114
|
+
<i></i><i></i><i></i>
|
|
1115
|
+
<span class="frame__url"><svg width="11" height="11"><use href="#i-globe"/></svg> app.playground.omegajs.dev</span>
|
|
1116
|
+
</div>
|
|
1117
|
+
<div class="frame__body">
|
|
1118
|
+
<div class="frame__side">
|
|
1119
|
+
<span class="lockup"><span class="mark">Ω</span> Playground</span>
|
|
1120
|
+
<span class="fnav on"><svg width="13" height="13"><use href="#i-home"/></svg> Overview</span>
|
|
1121
|
+
<span class="fnav"><svg width="13" height="13"><use href="#i-folder"/></svg> Projects</span>
|
|
1122
|
+
<span class="fnav"><svg width="13" height="13"><use href="#i-chart"/></svg> Analytics</span>
|
|
1123
|
+
<span class="fnav"><svg width="13" height="13"><use href="#i-users"/></svg> Members</span>
|
|
1124
|
+
<span class="fnav"><svg width="13" height="13"><use href="#i-gear"/></svg> Settings</span>
|
|
1125
|
+
</div>
|
|
1126
|
+
<div class="frame__main">
|
|
1127
|
+
<div class="frame__tiles">
|
|
1128
|
+
<div class="ftile"><span>Revenue</span><b class="num">$12,480</b><span class="up">↑ 8.2%</span></div>
|
|
1129
|
+
<div class="ftile"><span>Active users</span><b class="num">3,204</b><span class="up">↑ 4.1%</span></div>
|
|
1130
|
+
<div class="ftile"><span>Uptime</span><b class="num">99.98%</b><span class="up">30 days</span></div>
|
|
1131
|
+
</div>
|
|
1132
|
+
<div class="fchart">
|
|
1133
|
+
<span>Traffic</span>
|
|
1134
|
+
<svg id="frame-chart" viewBox="0 0 560 150" width="100%" height="150" role="img" aria-label="Decorative traffic chart"></svg>
|
|
1135
|
+
</div>
|
|
1136
|
+
</div>
|
|
1137
|
+
</div>
|
|
1138
|
+
</div>
|
|
1139
|
+
</div>
|
|
1140
|
+
</div>
|
|
1141
|
+
</div>
|
|
1142
|
+
</section>
|
|
1143
|
+
|
|
1144
|
+
<section class="logos">
|
|
1145
|
+
<p>Powering every ITW Creative Works brand</p>
|
|
1146
|
+
<div class="marquee" aria-hidden="true">
|
|
1147
|
+
<div class="marquee__track" id="marquee-track">
|
|
1148
|
+
<span class="wlogo">SOMIIBO</span><span class="wlogo">StudyMonkey</span><span class="wlogo">SLAPFORM</span><span class="wlogo">chatsy.</span><span class="wlogo">Replyify</span><span class="wlogo">PROXIFLY</span><span class="wlogo">ITW Creative Works</span>
|
|
1149
|
+
</div>
|
|
1150
|
+
</div>
|
|
1151
|
+
</section>
|
|
1152
|
+
|
|
1153
|
+
<section class="section" id="bento">
|
|
1154
|
+
<div class="section__in">
|
|
1155
|
+
<span class="section__eyebrow rv">Why OMEGA</span>
|
|
1156
|
+
<h2 class="rv">Every target. Zero drift.</h2>
|
|
1157
|
+
<p class="section__sub rv">Every surface reads the same config, wears the same brand tokens, and ships with the same deploy verb — so your product feels like one product, everywhere.</p>
|
|
1158
|
+
|
|
1159
|
+
<div class="bento">
|
|
1160
|
+
<div class="card b-2x2 rv">
|
|
1161
|
+
<span class="icotile"><svg width="16" height="16"><use href="#i-globe"/></svg></span>
|
|
1162
|
+
<h3>One config, every target</h3>
|
|
1163
|
+
<p>Declare your brand once. Web, backend, desktop, and extension builds all derive from it — colors, icons, auth, analytics, payments.</p>
|
|
1164
|
+
<div class="targets">
|
|
1165
|
+
<span class="chip"><svg width="11" height="11"><use href="#i-globe"/></svg> web</span>
|
|
1166
|
+
<span class="chip"><svg width="11" height="11"><use href="#i-server"/></svg> backend</span>
|
|
1167
|
+
<span class="chip"><svg width="11" height="11"><use href="#i-desktop"/></svg> desktop</span>
|
|
1168
|
+
<span class="chip"><svg width="11" height="11"><use href="#i-puzzle"/></svg> extension</span>
|
|
1169
|
+
</div>
|
|
1170
|
+
<div class="codebox"><span class="c">// omega.json5</span><br>{<br> <span class="k">brand</span>: { <span class="k">name</span>: <span class="s">'Playground'</span>, <span class="k">color</span>: <span class="s">'#5B47FB'</span> },<br> <span class="k">targets</span>: {<br> <span class="k">web</span>: { <span class="k">theme</span>: <span class="s">'classy'</span> },<br> <span class="k">backend</span>: {}, <span class="k">desktop</span>: {}, <span class="k">extension</span>: {}<br> }<br>}</div>
|
|
1171
|
+
</div>
|
|
1172
|
+
|
|
1173
|
+
<div class="card rv">
|
|
1174
|
+
<span class="icotile"><svg width="16" height="16"><use href="#i-spark"/></svg></span>
|
|
1175
|
+
<h3>Your brand is a token</h3>
|
|
1176
|
+
<p>One hex in config restyles every accent. Try it —</p>
|
|
1177
|
+
<div class="brand-dots" data-brand-dots></div>
|
|
1178
|
+
</div>
|
|
1179
|
+
|
|
1180
|
+
<div class="card rv">
|
|
1181
|
+
<span class="icotile"><svg width="16" height="16"><use href="#i-moon"/></svg></span>
|
|
1182
|
+
<h3>Dark mode, day one</h3>
|
|
1183
|
+
<p>Both themes are defined at the token level. No retrofits.</p>
|
|
1184
|
+
<div class="split"><div class="lite">Light<i></i></div><div class="dark">Dark<i></i></div></div>
|
|
1185
|
+
</div>
|
|
1186
|
+
|
|
1187
|
+
<div class="card b-2x1 rv">
|
|
1188
|
+
<span class="icotile"><svg width="16" height="16"><use href="#i-bolt"/></svg></span>
|
|
1189
|
+
<h3>Deploys that mean it</h3>
|
|
1190
|
+
<p>Nothing publishes on commit. When you're ready, one verb ships every surface.</p>
|
|
1191
|
+
<div class="term"><span class="p">$</span> omega deploy <span class="okx">✓ web · backend · desktop · extension</span></div>
|
|
1192
|
+
</div>
|
|
1193
|
+
|
|
1194
|
+
<div class="card rv">
|
|
1195
|
+
<span class="icotile"><svg width="16" height="16"><use href="#i-key"/></svg></span>
|
|
1196
|
+
<h3>Auth → payments, wired</h3>
|
|
1197
|
+
<p>The unglamorous stuff is the default.</p>
|
|
1198
|
+
<div class="mini-rows">
|
|
1199
|
+
<div><svg width="13" height="13"><use href="#i-check"/></svg> Sign-in, OAuth & accounts</div>
|
|
1200
|
+
<div><svg width="13" height="13"><use href="#i-check"/></svg> Checkout & billing portal</div>
|
|
1201
|
+
<div><svg width="13" height="13"><use href="#i-check"/></svg> Usage limits & plans</div>
|
|
1202
|
+
</div>
|
|
1203
|
+
</div>
|
|
1204
|
+
|
|
1205
|
+
<div class="card rv">
|
|
1206
|
+
<span class="icotile"><svg width="16" height="16"><use href="#i-gauge"/></svg></span>
|
|
1207
|
+
<h3>Fast by default</h3>
|
|
1208
|
+
<p>Minified HTML, hashed assets, image matrix, CSS hot-swap in under a second.</p>
|
|
1209
|
+
<div class="mini-rows">
|
|
1210
|
+
<div><svg width="13" height="13"><use href="#i-check"/></svg> <span class="mono num"><1s</span> style reloads in dev</div>
|
|
1211
|
+
<div><svg width="13" height="13"><use href="#i-check"/></svg> Purged, hashed production CSS</div>
|
|
1212
|
+
</div>
|
|
1213
|
+
</div>
|
|
1214
|
+
</div>
|
|
1215
|
+
</div>
|
|
1216
|
+
</section>
|
|
1217
|
+
|
|
1218
|
+
<section class="band section">
|
|
1219
|
+
<div class="section__in">
|
|
1220
|
+
<div class="band__grid">
|
|
1221
|
+
<div class="band__cell rv"><b class="num" data-count="45">0</b><span>layouts skinned</span></div>
|
|
1222
|
+
<div class="band__cell rv"><b class="num" data-count="4">0</b><span>surface families</span></div>
|
|
1223
|
+
<div class="band__cell rv"><b class="num" data-count="1">0</b><span>token sheet</span></div>
|
|
1224
|
+
<div class="band__cell rv"><b class="num"><1s</b><span>css hot-swap</span></div>
|
|
1225
|
+
</div>
|
|
1226
|
+
</div>
|
|
1227
|
+
</section>
|
|
1228
|
+
|
|
1229
|
+
<section class="section" id="pricing">
|
|
1230
|
+
<div class="section__in">
|
|
1231
|
+
<span class="section__eyebrow rv">Pricing</span>
|
|
1232
|
+
<h2 class="rv">Start free. Scale when it's real.</h2>
|
|
1233
|
+
<div class="pricing">
|
|
1234
|
+
<div class="card price rv">
|
|
1235
|
+
<div class="price__head"><span class="price__name">Hobby</span></div>
|
|
1236
|
+
<div class="price__amt num">$0<span> /mo</span></div>
|
|
1237
|
+
<ul>
|
|
1238
|
+
<li><svg width="13" height="13"><use href="#i-check"/></svg> 1 project, all targets</li>
|
|
1239
|
+
<li><svg width="13" height="13"><use href="#i-check"/></svg> Community themes</li>
|
|
1240
|
+
<li><svg width="13" height="13"><use href="#i-check"/></svg> Deploy to your own infra</li>
|
|
1241
|
+
</ul>
|
|
1242
|
+
<button class="btn btn--ghost">Start free</button>
|
|
1243
|
+
</div>
|
|
1244
|
+
<div class="card price price--pop rv">
|
|
1245
|
+
<div class="price__head"><span class="price__name">Pro</span><span class="chip chip--ink">Most popular</span></div>
|
|
1246
|
+
<div class="price__amt num">$19<span> /mo</span></div>
|
|
1247
|
+
<ul>
|
|
1248
|
+
<li><svg width="13" height="13"><use href="#i-check"/></svg> Unlimited projects</li>
|
|
1249
|
+
<li><svg width="13" height="13"><use href="#i-check"/></svg> classy v2 + premium themes</li>
|
|
1250
|
+
<li><svg width="13" height="13"><use href="#i-check"/></svg> Payments & usage plans</li>
|
|
1251
|
+
<li><svg width="13" height="13"><use href="#i-check"/></svg> Remove the sidebar ad slot</li>
|
|
1252
|
+
</ul>
|
|
1253
|
+
<button class="btn btn--ink">Go Pro</button>
|
|
1254
|
+
</div>
|
|
1255
|
+
<div class="card price rv">
|
|
1256
|
+
<div class="price__head"><span class="price__name">Scale</span></div>
|
|
1257
|
+
<div class="price__amt num">$99<span> /mo</span></div>
|
|
1258
|
+
<ul>
|
|
1259
|
+
<li><svg width="13" height="13"><use href="#i-check"/></svg> Everything in Pro</li>
|
|
1260
|
+
<li><svg width="13" height="13"><use href="#i-check"/></svg> Multi-brand workspaces</li>
|
|
1261
|
+
<li><svg width="13" height="13"><use href="#i-check"/></svg> Priority support</li>
|
|
1262
|
+
</ul>
|
|
1263
|
+
<button class="btn btn--ghost">Talk to us</button>
|
|
1264
|
+
</div>
|
|
1265
|
+
</div>
|
|
1266
|
+
</div>
|
|
1267
|
+
</section>
|
|
1268
|
+
|
|
1269
|
+
<section class="section">
|
|
1270
|
+
<figure class="quote rv">
|
|
1271
|
+
<blockquote>“We rebuilt five products on OMEGA <em>without touching a stylesheet.</em>”</blockquote>
|
|
1272
|
+
<figcaption><span class="avatar">IW</span> Ian Wiedenman — ITW Creative Works</figcaption>
|
|
1273
|
+
</figure>
|
|
1274
|
+
</section>
|
|
1275
|
+
|
|
1276
|
+
<section class="section" style="padding-top: 0;">
|
|
1277
|
+
<div class="section__in">
|
|
1278
|
+
<div class="cta-band rv">
|
|
1279
|
+
<h2>Ready to ship every surface?</h2>
|
|
1280
|
+
<p>From <span class="mono">omega setup</span> to a live product — site, app, backend, desktop, extension.</p>
|
|
1281
|
+
<div class="hero__cta">
|
|
1282
|
+
<button class="btn btn--paper btn--lg">Start building free</button>
|
|
1283
|
+
<button class="btn btn--lg ghosty">Read the docs <svg width="14" height="14"><use href="#i-arrow"/></svg></button>
|
|
1284
|
+
</div>
|
|
1285
|
+
</div>
|
|
1286
|
+
</div>
|
|
1287
|
+
</section>
|
|
1288
|
+
|
|
1289
|
+
<footer class="footer">
|
|
1290
|
+
<div class="footer__in">
|
|
1291
|
+
<div class="footer__grid">
|
|
1292
|
+
<div class="footer__brand">
|
|
1293
|
+
<span class="lockup"><span class="mark">Ω</span><span class="word">Playground</span></span>
|
|
1294
|
+
<p>The OMEGA demonstration brand. One config, every surface — built with classy v2.</p>
|
|
1295
|
+
</div>
|
|
1296
|
+
<div><h4>Product</h4><a href="#">Features</a><a href="#">Pricing</a><a href="#">Themes</a><a href="#">Changelog</a></div>
|
|
1297
|
+
<div><h4>Resources</h4><a href="#">Docs</a><a href="#">Guides</a><a href="#">API</a><a href="#">Status</a></div>
|
|
1298
|
+
<div><h4>Company</h4><a href="#">About</a><a href="#">Blog</a><a href="#">Contact</a><a href="#">Legal</a></div>
|
|
1299
|
+
</div>
|
|
1300
|
+
<div class="footer__base">
|
|
1301
|
+
<span class="mark" style="width:22px;height:22px;font-size:12px;border-radius:7px;">Ω</span>
|
|
1302
|
+
<span>© 2026 OMEGA Playground. A test brand, deliberately on fire.</span>
|
|
1303
|
+
</div>
|
|
1304
|
+
</div>
|
|
1305
|
+
</footer>
|
|
1306
|
+
</div>
|
|
1307
|
+
|
|
1308
|
+
<!-- ═══════════════════════════════ APP ═══════════════════════════════ -->
|
|
1309
|
+
<div class="view view--app" id="view-app">
|
|
1310
|
+
<div class="shell" id="shell">
|
|
1311
|
+
|
|
1312
|
+
<aside class="side" id="side">
|
|
1313
|
+
<div class="side__head">
|
|
1314
|
+
<span class="mark">Ω</span>
|
|
1315
|
+
<span class="word">Playground</span>
|
|
1316
|
+
<span class="chip ver mono">v2</span>
|
|
1317
|
+
</div>
|
|
1318
|
+
|
|
1319
|
+
<button class="selector" title="Switch project">
|
|
1320
|
+
<span class="pdot"></span>
|
|
1321
|
+
<span class="meta"><b>somiibo</b><span>Production</span></span>
|
|
1322
|
+
<svg width="13" height="13"><use href="#i-chev-ud"/></svg>
|
|
1323
|
+
</button>
|
|
1324
|
+
|
|
1325
|
+
<button class="nav-item" aria-current="page"><svg width="15" height="15"><use href="#i-home"/></svg><span class="lbl">Overview</span></button>
|
|
1326
|
+
<button class="nav-item"><svg width="15" height="15"><use href="#i-pulse"/></svg><span class="lbl">Activity</span></button>
|
|
1327
|
+
|
|
1328
|
+
<div class="side__label">Workspace</div>
|
|
1329
|
+
<button class="nav-item" data-expand="grp-projects" aria-expanded="true">
|
|
1330
|
+
<svg width="15" height="15"><use href="#i-folder"/></svg><span class="lbl">Projects</span>
|
|
1331
|
+
<span class="chev"><svg width="13" height="13"><use href="#i-chev-d"/></svg></span>
|
|
1332
|
+
</button>
|
|
1333
|
+
<div class="nav-sub open" id="grp-projects">
|
|
1334
|
+
<div class="nav-sub__in">
|
|
1335
|
+
<button class="nav-item"><span class="lbl">somiibo</span><span class="tail chip mono">prod</span></button>
|
|
1336
|
+
<button class="nav-item"><span class="lbl">studymonkey</span></button>
|
|
1337
|
+
<button class="nav-item"><span class="lbl">slapform</span></button>
|
|
1338
|
+
<button class="nav-item" style="color:var(--faint);"><svg width="13" height="13"><use href="#i-plus"/></svg><span class="lbl">New project</span></button>
|
|
1339
|
+
</div>
|
|
1340
|
+
</div>
|
|
1341
|
+
<button class="nav-item"><svg width="15" height="15"><use href="#i-bolt"/></svg><span class="lbl">Automations</span><span class="tail chip chip--accent">New</span></button>
|
|
1342
|
+
<button class="nav-item"><svg width="15" height="15"><use href="#i-users"/></svg><span class="lbl">Members</span><span class="tail chip num">12</span></button>
|
|
1343
|
+
<button class="nav-item"><svg width="15" height="15"><use href="#i-key"/></svg><span class="lbl">API keys</span></button>
|
|
1344
|
+
|
|
1345
|
+
<div class="side__label">Insights</div>
|
|
1346
|
+
<button class="nav-item" data-expand="grp-analytics" aria-expanded="false">
|
|
1347
|
+
<svg width="15" height="15"><use href="#i-chart"/></svg><span class="lbl">Analytics</span>
|
|
1348
|
+
<span class="chev"><svg width="13" height="13"><use href="#i-chev-d"/></svg></span>
|
|
1349
|
+
</button>
|
|
1350
|
+
<div class="nav-sub" id="grp-analytics">
|
|
1351
|
+
<div class="nav-sub__in">
|
|
1352
|
+
<button class="nav-item"><span class="lbl">Traffic</span></button>
|
|
1353
|
+
<button class="nav-item"><span class="lbl">Engagement</span></button>
|
|
1354
|
+
<button class="nav-item"><span class="lbl">Retention</span></button>
|
|
1355
|
+
</div>
|
|
1356
|
+
</div>
|
|
1357
|
+
<button class="nav-item"><svg width="15" height="15"><use href="#i-gauge"/></svg><span class="lbl">Usage</span></button>
|
|
1358
|
+
|
|
1359
|
+
<div class="side__label">Settings</div>
|
|
1360
|
+
<button class="nav-item"><svg width="15" height="15"><use href="#i-gear"/></svg><span class="lbl">General</span></button>
|
|
1361
|
+
<button class="nav-item"><svg width="15" height="15"><use href="#i-card"/></svg><span class="lbl">Billing</span></button>
|
|
1362
|
+
|
|
1363
|
+
<div class="side__foot">
|
|
1364
|
+
<div class="ad" id="ad-slot">
|
|
1365
|
+
<button class="ad__x" id="ad-dismiss" aria-label="Dismiss ad"><svg width="11" height="11"><use href="#i-x"/></svg></button>
|
|
1366
|
+
<span class="ad__tag">Sponsored</span>
|
|
1367
|
+
<b>Ship faster with DevKit Pro</b>
|
|
1368
|
+
<p>The toolkit your deploys deserve.</p>
|
|
1369
|
+
<a href="#">Learn more → <span style="color:var(--faint);font-weight:400;">· Pro removes ads</span></a>
|
|
1370
|
+
</div>
|
|
1371
|
+
<button class="user-row">
|
|
1372
|
+
<span class="avatar">IW</span>
|
|
1373
|
+
<span class="meta"><b>Ian W.</b><span>ian@itwcreativeworks.com</span></span>
|
|
1374
|
+
<svg width="14" height="14"><use href="#i-dots"/></svg>
|
|
1375
|
+
</button>
|
|
1376
|
+
</div>
|
|
1377
|
+
</aside>
|
|
1378
|
+
|
|
1379
|
+
<header class="top">
|
|
1380
|
+
<button class="iconbtn top__drawer" id="drawer-btn" aria-label="Open navigation" aria-expanded="false"><svg width="16" height="16"><use href="#i-panel"/></svg></button>
|
|
1381
|
+
<button class="iconbtn top__collapse" id="collapse-btn" aria-label="Collapse sidebar" aria-expanded="true"><svg width="16" height="16"><use href="#i-panel"/></svg></button>
|
|
1382
|
+
<div class="crumb"><span style="color:var(--faint);font-weight:520;">somiibo</span><span class="sep">/</span><span>Overview</span></div>
|
|
1383
|
+
<span class="pill-status pill-status--ok" style="margin-inline-start:6px;"><i></i>Production</span>
|
|
1384
|
+
|
|
1385
|
+
<button class="top__search">
|
|
1386
|
+
<svg width="13" height="13"><use href="#i-search"/></svg>
|
|
1387
|
+
<span>Search…</span>
|
|
1388
|
+
<kbd>⌘K</kbd>
|
|
1389
|
+
</button>
|
|
1390
|
+
|
|
1391
|
+
<div class="top__end">
|
|
1392
|
+
<button class="iconbtn" aria-label="Documentation"><svg width="15" height="15"><use href="#i-book"/></svg></button>
|
|
1393
|
+
<button class="iconbtn" aria-label="Notifications"><svg width="15" height="15"><use href="#i-bell"/></svg><span class="dot"></span></button>
|
|
1394
|
+
<div class="top__divider"></div>
|
|
1395
|
+
<div class="account" id="account">
|
|
1396
|
+
<button aria-haspopup="menu" aria-expanded="false" id="account-btn">
|
|
1397
|
+
<span class="avatar">IW</span>
|
|
1398
|
+
<b>Ian W.</b>
|
|
1399
|
+
<svg width="12" height="12"><use href="#i-chev-d"/></svg>
|
|
1400
|
+
</button>
|
|
1401
|
+
<div class="menu" role="menu">
|
|
1402
|
+
<div class="menu__head"><b>Ian Wiedenman</b><span>ian@itwcreativeworks.com</span></div>
|
|
1403
|
+
<button role="menuitem"><svg width="14" height="14"><use href="#i-users"/></svg> Profile</button>
|
|
1404
|
+
<button role="menuitem"><svg width="14" height="14"><use href="#i-gear"/></svg> Preferences</button>
|
|
1405
|
+
<button role="menuitem"><svg width="14" height="14"><use href="#i-chev-ud"/></svg> Switch account</button>
|
|
1406
|
+
<button role="menuitem" class="danger"><svg width="14" height="14"><use href="#i-x"/></svg> Sign out</button>
|
|
1407
|
+
</div>
|
|
1408
|
+
</div>
|
|
1409
|
+
</div>
|
|
1410
|
+
</header>
|
|
1411
|
+
|
|
1412
|
+
<main class="main">
|
|
1413
|
+
<div class="main__in">
|
|
1414
|
+
<div class="page-head">
|
|
1415
|
+
<div>
|
|
1416
|
+
<h1>Good evening, Ian</h1>
|
|
1417
|
+
<p class="sub">Here's what's happening across your workspace.</p>
|
|
1418
|
+
</div>
|
|
1419
|
+
<div class="page-head__end">
|
|
1420
|
+
<div class="seg" role="group" aria-label="Period">
|
|
1421
|
+
<button aria-pressed="false">24h</button>
|
|
1422
|
+
<button aria-pressed="true">7d</button>
|
|
1423
|
+
<button aria-pressed="false">30d</button>
|
|
1424
|
+
</div>
|
|
1425
|
+
<button class="btn btn--ink"><svg width="13" height="13"><use href="#i-plus"/></svg> New project</button>
|
|
1426
|
+
</div>
|
|
1427
|
+
</div>
|
|
1428
|
+
|
|
1429
|
+
<div class="card tiles">
|
|
1430
|
+
<div class="tile">
|
|
1431
|
+
<span class="tile__label">Monthly revenue</span>
|
|
1432
|
+
<div class="tile__row"><span class="tile__num num">$12,480</span><span class="delta delta--up num">↑ 8.2%</span></div>
|
|
1433
|
+
<svg class="spark" data-spark="4,6,5,8,9,8,11,12,11,13,14,13,15,17" aria-hidden="true"></svg>
|
|
1434
|
+
</div>
|
|
1435
|
+
<div class="tile">
|
|
1436
|
+
<span class="tile__label">Active users</span>
|
|
1437
|
+
<div class="tile__row"><span class="tile__num num">3,204</span><span class="delta delta--up num">↑ 4.1%</span></div>
|
|
1438
|
+
<svg class="spark" data-spark="6,7,7,8,9,10,9,11,10,12,12,13,13,14" aria-hidden="true"></svg>
|
|
1439
|
+
</div>
|
|
1440
|
+
<div class="tile">
|
|
1441
|
+
<span class="tile__label">API requests</span>
|
|
1442
|
+
<div class="tile__row"><span class="tile__num num">1.2M</span><span class="delta delta--down num">↓ 2.3%</span></div>
|
|
1443
|
+
<svg class="spark" data-spark="12,13,11,12,10,11,9,10,9,8,9,8,8,7" aria-hidden="true"></svg>
|
|
1444
|
+
</div>
|
|
1445
|
+
<div class="tile">
|
|
1446
|
+
<span class="tile__label">Uptime <span class="pill-status pill-status--ok"><i></i></span></span>
|
|
1447
|
+
<div class="tile__row"><span class="tile__num num">99.98%</span><span class="delta delta--flat num">30 days</span></div>
|
|
1448
|
+
<svg class="spark" data-spark="12,12,12,12,11.6,12,12,12,12,11.8,12,12,12,12" aria-hidden="true"></svg>
|
|
1449
|
+
</div>
|
|
1450
|
+
</div>
|
|
1451
|
+
|
|
1452
|
+
<div class="grid-2">
|
|
1453
|
+
<div class="card panel panel--chart">
|
|
1454
|
+
<div class="panel__head">
|
|
1455
|
+
<h3>Traffic</h3>
|
|
1456
|
+
<div class="end">
|
|
1457
|
+
<div class="legend"><span><i></i>This period</span><span class="prev"><i></i>Previous</span></div>
|
|
1458
|
+
<div class="seg" role="group" aria-label="Traffic metric">
|
|
1459
|
+
<button aria-pressed="true">Visitors</button>
|
|
1460
|
+
<button aria-pressed="false">Page views</button>
|
|
1461
|
+
</div>
|
|
1462
|
+
</div>
|
|
1463
|
+
</div>
|
|
1464
|
+
<div class="chart-wrap">
|
|
1465
|
+
<svg id="big-chart" viewBox="0 0 720 260" width="100%" role="img" aria-label="Visitors for the last 14 days, this period versus previous"></svg>
|
|
1466
|
+
<div class="chart-tip" id="chart-tip"></div>
|
|
1467
|
+
</div>
|
|
1468
|
+
<div class="toppages">
|
|
1469
|
+
<div class="tp-head"><span>Top pages</span><span>Visitors</span></div>
|
|
1470
|
+
<div class="tp-row"><span class="mono">/</span><i style="--w:100%"></i><b class="num">4,812</b></div>
|
|
1471
|
+
<div class="tp-row"><span class="mono">/pricing</span><i style="--w:42%"></i><b class="num">1,904</b></div>
|
|
1472
|
+
<div class="tp-row"><span class="mono">/signin</span><i style="--w:24%"></i><b class="num">1,102</b></div>
|
|
1473
|
+
</div>
|
|
1474
|
+
</div>
|
|
1475
|
+
|
|
1476
|
+
<div class="side-col">
|
|
1477
|
+
<div class="card panel">
|
|
1478
|
+
<div class="panel__head"><h3>Usage</h3><div class="end"><a href="#" style="color:var(--accent);font-size:12px;font-weight:640;text-decoration:none;">Upgrade</a></div></div>
|
|
1479
|
+
<div class="meter">
|
|
1480
|
+
<div class="meter__row"><span>Builds</span><b class="num">82 / 100</b></div>
|
|
1481
|
+
<div class="meter__bar"><i class="warnfill" style="width:82%"></i></div>
|
|
1482
|
+
</div>
|
|
1483
|
+
<div class="meter">
|
|
1484
|
+
<div class="meter__row"><span>Bandwidth</span><b class="num">64%</b></div>
|
|
1485
|
+
<div class="meter__bar"><i style="width:64%"></i></div>
|
|
1486
|
+
</div>
|
|
1487
|
+
<div class="meter">
|
|
1488
|
+
<div class="meter__row"><span>Seats</span><b class="num">9 / 12</b></div>
|
|
1489
|
+
<div class="meter__bar"><i style="width:75%"></i></div>
|
|
1490
|
+
</div>
|
|
1491
|
+
</div>
|
|
1492
|
+
|
|
1493
|
+
<div class="card panel">
|
|
1494
|
+
<div class="panel__head"><h3>Get started</h3><span class="chip num">2/4</span></div>
|
|
1495
|
+
<div class="check-list">
|
|
1496
|
+
<div class="check done"><span class="box"><svg width="10" height="10"><use href="#i-check"/></svg></span> Create your first project</div>
|
|
1497
|
+
<div class="check done"><span class="box"><svg width="10" height="10"><use href="#i-check"/></svg></span> Connect a domain</div>
|
|
1498
|
+
<div class="check"><span class="box"></span> Invite your team <a class="go" href="#">Invite →</a></div>
|
|
1499
|
+
<div class="check"><span class="box"></span> Enable payments <a class="go" href="#">Set up →</a></div>
|
|
1500
|
+
</div>
|
|
1501
|
+
</div>
|
|
1502
|
+
|
|
1503
|
+
<div class="card panel">
|
|
1504
|
+
<div class="panel__head"><h3>Activity</h3></div>
|
|
1505
|
+
<div class="feed">
|
|
1506
|
+
<div class="feed__item"><i class="feed__dot" style="background:var(--ok)"></i><p><b>Deploy succeeded</b> — somiibo · web<time>2 minutes ago</time></p></div>
|
|
1507
|
+
<div class="feed__item"><i class="feed__dot" style="background:var(--accent)"></i><p><b>Nathan</b> invited <b>rachel@itw.co</b><time>1 hour ago</time></p></div>
|
|
1508
|
+
<div class="feed__item"><i class="feed__dot" style="background:var(--warn)"></i><p><b>Usage alert</b> — builds at 82%<time>3 hours ago</time></p></div>
|
|
1509
|
+
<div class="feed__item"><i class="feed__dot" style="background:var(--ok)"></i><p><b>Payment received</b> — $49.00 · Pro<time>Yesterday</time></p></div>
|
|
1510
|
+
</div>
|
|
1511
|
+
</div>
|
|
1512
|
+
</div>
|
|
1513
|
+
</div>
|
|
1514
|
+
|
|
1515
|
+
<div class="promo">
|
|
1516
|
+
<span class="icotile"><svg width="16" height="16"><use href="#i-spark"/></svg></span>
|
|
1517
|
+
<div>
|
|
1518
|
+
<b>classy v2 is live for your workspace</b>
|
|
1519
|
+
<p>Swap the accent, keep the theme — your whole stack recolors from one token.</p>
|
|
1520
|
+
</div>
|
|
1521
|
+
<div class="brand-dots" data-brand-dots></div>
|
|
1522
|
+
<button class="btn btn--ghost">Try it</button>
|
|
1523
|
+
</div>
|
|
1524
|
+
|
|
1525
|
+
<div class="card tablecard">
|
|
1526
|
+
<div class="panel__head" style="padding:16px var(--pad-card) 0;">
|
|
1527
|
+
<h3>Recent deployments</h3>
|
|
1528
|
+
<div class="end"><button class="btn btn--ghost" style="height:28px;font-size:12px;">View all</button></div>
|
|
1529
|
+
</div>
|
|
1530
|
+
<div class="tablewrap">
|
|
1531
|
+
<table>
|
|
1532
|
+
<thead>
|
|
1533
|
+
<tr><th scope="col">Project</th><th scope="col">Target</th><th scope="col">Status</th><th scope="col">Duration</th><th scope="col">When</th><th scope="col"></th></tr>
|
|
1534
|
+
</thead>
|
|
1535
|
+
<tbody>
|
|
1536
|
+
<tr>
|
|
1537
|
+
<td><span class="proj"><span class="pdot" style="background:#6366f1"></span>somiibo <span class="chip mono">prod</span></span></td>
|
|
1538
|
+
<td><span class="chip"><svg width="11" height="11"><use href="#i-globe"/></svg> web</span></td>
|
|
1539
|
+
<td><span class="pill-status pill-status--ok"><i></i>Live</span></td>
|
|
1540
|
+
<td class="mono num">42s</td>
|
|
1541
|
+
<td>2 min ago</td>
|
|
1542
|
+
<td><button class="iconbtn" aria-label="Row actions" style="width:26px;height:26px;"><svg width="14" height="14"><use href="#i-dots"/></svg></button></td>
|
|
1543
|
+
</tr>
|
|
1544
|
+
<tr>
|
|
1545
|
+
<td><span class="proj"><span class="pdot" style="background:#6366f1"></span>somiibo <span class="chip mono">prod</span></span></td>
|
|
1546
|
+
<td><span class="chip"><svg width="11" height="11"><use href="#i-server"/></svg> backend</span></td>
|
|
1547
|
+
<td><span class="pill-status pill-status--ok"><i></i>Live</span></td>
|
|
1548
|
+
<td class="mono num">1m 18s</td>
|
|
1549
|
+
<td>2 min ago</td>
|
|
1550
|
+
<td><button class="iconbtn" aria-label="Row actions" style="width:26px;height:26px;"><svg width="14" height="14"><use href="#i-dots"/></svg></button></td>
|
|
1551
|
+
</tr>
|
|
1552
|
+
<tr>
|
|
1553
|
+
<td><span class="proj"><span class="pdot" style="background:#f59e0b"></span>studymonkey <span class="chip mono">staging</span></span></td>
|
|
1554
|
+
<td><span class="chip"><svg width="11" height="11"><use href="#i-desktop"/></svg> desktop</span></td>
|
|
1555
|
+
<td><span class="pill-status pill-status--warn"><i></i>Building</span></td>
|
|
1556
|
+
<td class="mono num">—</td>
|
|
1557
|
+
<td>6 min ago</td>
|
|
1558
|
+
<td><button class="iconbtn" aria-label="Row actions" style="width:26px;height:26px;"><svg width="14" height="14"><use href="#i-dots"/></svg></button></td>
|
|
1559
|
+
</tr>
|
|
1560
|
+
<tr>
|
|
1561
|
+
<td><span class="proj"><span class="pdot" style="background:#10b981"></span>slapform <span class="chip mono">prod</span></span></td>
|
|
1562
|
+
<td><span class="chip"><svg width="11" height="11"><use href="#i-puzzle"/></svg> extension</span></td>
|
|
1563
|
+
<td><span class="pill-status pill-status--ok"><i></i>Live</span></td>
|
|
1564
|
+
<td class="mono num">55s</td>
|
|
1565
|
+
<td>1 hour ago</td>
|
|
1566
|
+
<td><button class="iconbtn" aria-label="Row actions" style="width:26px;height:26px;"><svg width="14" height="14"><use href="#i-dots"/></svg></button></td>
|
|
1567
|
+
</tr>
|
|
1568
|
+
<tr>
|
|
1569
|
+
<td><span class="proj"><span class="pdot" style="background:#ec4899"></span>chatsy <span class="chip mono">prod</span></span></td>
|
|
1570
|
+
<td><span class="chip"><svg width="11" height="11"><use href="#i-globe"/></svg> web</span></td>
|
|
1571
|
+
<td><span class="pill-status pill-status--danger"><i></i>Failed</span></td>
|
|
1572
|
+
<td class="mono num">12s</td>
|
|
1573
|
+
<td>3 hours ago</td>
|
|
1574
|
+
<td><button class="btn btn--ghost" style="height:26px;font-size:12px;padding:0 10px;">Retry</button></td>
|
|
1575
|
+
</tr>
|
|
1576
|
+
</tbody>
|
|
1577
|
+
</table>
|
|
1578
|
+
</div>
|
|
1579
|
+
<div class="tfoot">
|
|
1580
|
+
<span class="num">Showing 5 of 128 deployments</span>
|
|
1581
|
+
<div class="pages">
|
|
1582
|
+
<button class="iconbtn" style="width:26px;height:26px;transform:rotate(90deg)" aria-label="Previous page"><svg width="13" height="13"><use href="#i-chev-d"/></svg></button>
|
|
1583
|
+
<button class="iconbtn" style="width:26px;height:26px;transform:rotate(-90deg)" aria-label="Next page"><svg width="13" height="13"><use href="#i-chev-d"/></svg></button>
|
|
1584
|
+
</div>
|
|
1585
|
+
</div>
|
|
1586
|
+
</div>
|
|
1587
|
+
|
|
1588
|
+
</div>
|
|
1589
|
+
</main>
|
|
1590
|
+
|
|
1591
|
+
<button class="scrim" id="scrim" aria-label="Close navigation" tabindex="-1"></button>
|
|
1592
|
+
</div>
|
|
1593
|
+
</div>
|
|
1594
|
+
|
|
1595
|
+
<!-- ═══════════════════════ DRAFT CONTROL DOCK ═══════════════════════ -->
|
|
1596
|
+
<div class="dock" role="toolbar" aria-label="Draft controls">
|
|
1597
|
+
<span class="dock__tag">Draft 2</span>
|
|
1598
|
+
<div class="dseg" role="group" aria-label="View">
|
|
1599
|
+
<button id="dock-site" aria-pressed="true">Site</button>
|
|
1600
|
+
<button id="dock-app" aria-pressed="false">App</button>
|
|
1601
|
+
</div>
|
|
1602
|
+
<span class="dock__sep"></span>
|
|
1603
|
+
<button class="dicon" id="dock-light" aria-pressed="true" title="Light theme" aria-label="Light theme"><svg width="15" height="15"><use href="#i-sun"/></svg></button>
|
|
1604
|
+
<button class="dicon" id="dock-dark" aria-pressed="false" title="Dark theme" aria-label="Dark theme"><svg width="15" height="15"><use href="#i-moon"/></svg></button>
|
|
1605
|
+
<span class="dock__sep"></span>
|
|
1606
|
+
<span data-brand-dots data-dock></span>
|
|
1607
|
+
<span class="dock__sep"></span>
|
|
1608
|
+
<button class="tbtn" data-type-btn="default" aria-pressed="true" title="Serif marketing · sans app (default)">Mix</button>
|
|
1609
|
+
<button class="tbtn" data-type-btn="sans" aria-pressed="false" title="Sans everywhere">Sans</button>
|
|
1610
|
+
<button class="tbtn t-serif" data-type-btn="editorial" aria-pressed="false" title="Serif display everywhere">Serif</button>
|
|
1611
|
+
<button class="tbtn t-mono" data-type-btn="terminal" aria-pressed="false" title="Mono display everywhere">Mono</button>
|
|
1612
|
+
<span class="dock__sep"></span>
|
|
1613
|
+
<button class="dicon" id="dock-density" aria-pressed="false" title="Compact density" aria-label="Toggle compact density"><svg width="15" height="15"><use href="#i-density"/></svg></button>
|
|
1614
|
+
</div>
|
|
1615
|
+
|
|
1616
|
+
<script>
|
|
1617
|
+
/* classy v2 draft 2 — mockup logic (throwaway comp; the real theme ships its own modules) */
|
|
1618
|
+
(() => {
|
|
1619
|
+
const root = document.documentElement;
|
|
1620
|
+
|
|
1621
|
+
/* ── draft dock: view / theme / brand / type / density ────────────────── */
|
|
1622
|
+
|
|
1623
|
+
const BRANDS = [
|
|
1624
|
+
{ id: 'omega', dot: '#5b47fb' },
|
|
1625
|
+
{ id: 'ember', dot: '#e8590c' },
|
|
1626
|
+
{ id: 'emerald', dot: '#0e9f6e' },
|
|
1627
|
+
{ id: 'ocean', dot: '#2563eb' },
|
|
1628
|
+
{ id: 'rose', dot: '#e11d63' },
|
|
1629
|
+
];
|
|
1630
|
+
|
|
1631
|
+
function setBrand(id) {
|
|
1632
|
+
if (id === 'omega') {
|
|
1633
|
+
delete root.dataset.brand;
|
|
1634
|
+
} else {
|
|
1635
|
+
root.dataset.brand = id;
|
|
1636
|
+
}
|
|
1637
|
+
document.querySelectorAll('.bdot').forEach((dot) => {
|
|
1638
|
+
dot.setAttribute('aria-pressed', String(dot.dataset.brand === id));
|
|
1639
|
+
});
|
|
1640
|
+
drawAllCharts();
|
|
1641
|
+
}
|
|
1642
|
+
|
|
1643
|
+
document.querySelectorAll('[data-brand-dots]').forEach((host) => {
|
|
1644
|
+
BRANDS.forEach((brand) => {
|
|
1645
|
+
const btn = document.createElement('button');
|
|
1646
|
+
btn.className = 'bdot';
|
|
1647
|
+
btn.dataset.brand = brand.id;
|
|
1648
|
+
btn.style.background = brand.dot;
|
|
1649
|
+
btn.title = `Brand: ${brand.id}`;
|
|
1650
|
+
btn.setAttribute('aria-label', `Brand accent: ${brand.id}`);
|
|
1651
|
+
btn.setAttribute('aria-pressed', String(brand.id === 'omega'));
|
|
1652
|
+
btn.addEventListener('click', () => setBrand(brand.id));
|
|
1653
|
+
host.appendChild(btn);
|
|
1654
|
+
});
|
|
1655
|
+
});
|
|
1656
|
+
|
|
1657
|
+
const dockSite = document.getElementById('dock-site');
|
|
1658
|
+
const dockApp = document.getElementById('dock-app');
|
|
1659
|
+
|
|
1660
|
+
function setView(view) {
|
|
1661
|
+
root.dataset.view = view;
|
|
1662
|
+
dockSite.setAttribute('aria-pressed', String(view === 'site'));
|
|
1663
|
+
dockApp.setAttribute('aria-pressed', String(view === 'app'));
|
|
1664
|
+
drawAllCharts();
|
|
1665
|
+
}
|
|
1666
|
+
dockSite.addEventListener('click', () => setView('site'));
|
|
1667
|
+
dockApp.addEventListener('click', () => setView('app'));
|
|
1668
|
+
|
|
1669
|
+
const dockLight = document.getElementById('dock-light');
|
|
1670
|
+
const dockDark = document.getElementById('dock-dark');
|
|
1671
|
+
|
|
1672
|
+
function setTheme(theme) {
|
|
1673
|
+
root.dataset.theme = theme;
|
|
1674
|
+
dockLight.setAttribute('aria-pressed', String(theme === 'light'));
|
|
1675
|
+
dockDark.setAttribute('aria-pressed', String(theme === 'dark'));
|
|
1676
|
+
drawAllCharts();
|
|
1677
|
+
}
|
|
1678
|
+
dockLight.addEventListener('click', () => setTheme('light'));
|
|
1679
|
+
dockDark.addEventListener('click', () => setTheme('dark'));
|
|
1680
|
+
|
|
1681
|
+
document.querySelectorAll('[data-type-btn]').forEach((btn) => {
|
|
1682
|
+
btn.addEventListener('click', () => {
|
|
1683
|
+
const type = btn.dataset.typeBtn;
|
|
1684
|
+
if (type === 'default') {
|
|
1685
|
+
delete root.dataset.type;
|
|
1686
|
+
} else {
|
|
1687
|
+
root.dataset.type = type;
|
|
1688
|
+
}
|
|
1689
|
+
document.querySelectorAll('[data-type-btn]').forEach((b) => {
|
|
1690
|
+
b.setAttribute('aria-pressed', String(b === btn));
|
|
1691
|
+
});
|
|
1692
|
+
});
|
|
1693
|
+
});
|
|
1694
|
+
|
|
1695
|
+
const dockDensity = document.getElementById('dock-density');
|
|
1696
|
+
dockDensity.addEventListener('click', () => {
|
|
1697
|
+
const compact = root.dataset.density !== 'compact';
|
|
1698
|
+
if (compact) {
|
|
1699
|
+
root.dataset.density = 'compact';
|
|
1700
|
+
} else {
|
|
1701
|
+
delete root.dataset.density;
|
|
1702
|
+
}
|
|
1703
|
+
dockDensity.setAttribute('aria-pressed', String(compact));
|
|
1704
|
+
});
|
|
1705
|
+
|
|
1706
|
+
/* sync initial theme buttons with the viewer/OS theme */
|
|
1707
|
+
const prefersDark = matchMedia('(prefers-color-scheme: dark)');
|
|
1708
|
+
const startDark = root.dataset.theme
|
|
1709
|
+
? root.dataset.theme === 'dark'
|
|
1710
|
+
: prefersDark.matches;
|
|
1711
|
+
dockLight.setAttribute('aria-pressed', String(!startDark));
|
|
1712
|
+
dockDark.setAttribute('aria-pressed', String(startDark));
|
|
1713
|
+
|
|
1714
|
+
/* ── site: glassy nav + rotating hero word + reveals + marquee ────────── */
|
|
1715
|
+
|
|
1716
|
+
const nav = document.getElementById('site-nav');
|
|
1717
|
+
const onScroll = () => nav.classList.toggle('scrolled', window.scrollY > 8);
|
|
1718
|
+
addEventListener('scroll', onScroll, { passive: true });
|
|
1719
|
+
onScroll();
|
|
1720
|
+
|
|
1721
|
+
const reduceMotion = matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
1722
|
+
|
|
1723
|
+
const WORDS = ['Every surface.', 'Your website.', 'Your backend.', 'Your desktop app.', 'Your extension.'];
|
|
1724
|
+
const rotEl = document.getElementById('rot-word');
|
|
1725
|
+
if (!reduceMotion) {
|
|
1726
|
+
let wordIndex = 0;
|
|
1727
|
+
setInterval(() => {
|
|
1728
|
+
rotEl.classList.add('out');
|
|
1729
|
+
setTimeout(() => {
|
|
1730
|
+
wordIndex = (wordIndex + 1) % WORDS.length;
|
|
1731
|
+
rotEl.textContent = WORDS[wordIndex];
|
|
1732
|
+
rotEl.classList.remove('out');
|
|
1733
|
+
}, 260);
|
|
1734
|
+
}, 2600);
|
|
1735
|
+
}
|
|
1736
|
+
|
|
1737
|
+
const track = document.getElementById('marquee-track');
|
|
1738
|
+
track.innerHTML += track.innerHTML; // duplicate for the seamless loop
|
|
1739
|
+
|
|
1740
|
+
const countUp = (el) => {
|
|
1741
|
+
const target = Number(el.dataset.count);
|
|
1742
|
+
if (reduceMotion) { el.textContent = target; return; }
|
|
1743
|
+
const t0 = performance.now();
|
|
1744
|
+
const tick = (t) => {
|
|
1745
|
+
const k = Math.min(1, (t - t0) / 900);
|
|
1746
|
+
el.textContent = Math.round(target * (1 - Math.pow(1 - k, 3)));
|
|
1747
|
+
if (k < 1) requestAnimationFrame(tick);
|
|
1748
|
+
};
|
|
1749
|
+
requestAnimationFrame(tick);
|
|
1750
|
+
};
|
|
1751
|
+
|
|
1752
|
+
const seen = new WeakSet();
|
|
1753
|
+
const observer = new IntersectionObserver((entries) => {
|
|
1754
|
+
entries.forEach((entry) => {
|
|
1755
|
+
if (!entry.isIntersecting) return;
|
|
1756
|
+
entry.target.classList.add('in');
|
|
1757
|
+
entry.target.querySelectorAll('[data-count]').forEach((el) => {
|
|
1758
|
+
if (seen.has(el)) return;
|
|
1759
|
+
seen.add(el);
|
|
1760
|
+
countUp(el);
|
|
1761
|
+
});
|
|
1762
|
+
observer.unobserve(entry.target);
|
|
1763
|
+
});
|
|
1764
|
+
}, { threshold: 0.15 });
|
|
1765
|
+
document.querySelectorAll('.rv').forEach((el) => observer.observe(el));
|
|
1766
|
+
|
|
1767
|
+
/* ── charts (drawn from data so they re-paint on theme/brand swap) ────── */
|
|
1768
|
+
|
|
1769
|
+
const css = (name) => getComputedStyle(root).getPropertyValue(name).trim();
|
|
1770
|
+
|
|
1771
|
+
const CURR = [420, 460, 445, 510, 548, 530, 585, 620, 604, 668, 701, 662, 731, 768];
|
|
1772
|
+
const PREV = [380, 398, 412, 405, 440, 452, 438, 472, 489, 470, 502, 516, 508, 522];
|
|
1773
|
+
const DAYS = ['Jul 1', 'Jul 2', 'Jul 3', 'Jul 4', 'Jul 5', 'Jul 6', 'Jul 7',
|
|
1774
|
+
'Jul 8', 'Jul 9', 'Jul 10', 'Jul 11', 'Jul 12', 'Jul 13', 'Jul 14'];
|
|
1775
|
+
|
|
1776
|
+
const pts = (data, x0, x1, y0, y1, max) =>
|
|
1777
|
+
data.map((v, i) => [x0 + (i * (x1 - x0)) / (data.length - 1), y1 - (v / max) * (y1 - y0)]);
|
|
1778
|
+
|
|
1779
|
+
const lineD = (p) => 'M' + p.map(([x, y]) => `${x.toFixed(1)},${y.toFixed(1)}`).join(' L');
|
|
1780
|
+
|
|
1781
|
+
function drawBigChart() {
|
|
1782
|
+
const svg = document.getElementById('big-chart');
|
|
1783
|
+
const accent = css('--accent');
|
|
1784
|
+
const second = css('--chart-2');
|
|
1785
|
+
const line = css('--line');
|
|
1786
|
+
const faint = css('--faint');
|
|
1787
|
+
const MAX = 800;
|
|
1788
|
+
const [x0, x1, y0, y1] = [34, 706, 14, 224];
|
|
1789
|
+
const cp = pts(CURR, x0, x1, y0, y1, MAX);
|
|
1790
|
+
const pp = pts(PREV, x0, x1, y0, y1, MAX);
|
|
1791
|
+
|
|
1792
|
+
let grid = '';
|
|
1793
|
+
[0, 200, 400, 600, 800].forEach((v) => {
|
|
1794
|
+
const y = y1 - (v / MAX) * (y1 - y0);
|
|
1795
|
+
grid += `<line x1="${x0}" y1="${y}" x2="${x1}" y2="${y}" stroke="${line}" stroke-width="1"/>` +
|
|
1796
|
+
`<text x="${x0 - 8}" y="${y + 3.5}" text-anchor="end" font-size="10" fill="${faint}">${v}</text>`;
|
|
1797
|
+
});
|
|
1798
|
+
let xlabels = '';
|
|
1799
|
+
[0, 3, 6, 9, 13].forEach((i) => {
|
|
1800
|
+
xlabels += `<text x="${cp[i][0]}" y="248" text-anchor="middle" font-size="10" fill="${faint}">${DAYS[i]}</text>`;
|
|
1801
|
+
});
|
|
1802
|
+
|
|
1803
|
+
const areaD = `${lineD(cp)} L${x1},${y1} L${x0},${y1} Z`;
|
|
1804
|
+
const endC = cp[cp.length - 1];
|
|
1805
|
+
const endP = pp[pp.length - 1];
|
|
1806
|
+
|
|
1807
|
+
svg.innerHTML = `
|
|
1808
|
+
<defs>
|
|
1809
|
+
<linearGradient id="area-fill" x1="0" y1="0" x2="0" y2="1">
|
|
1810
|
+
<stop offset="0%" stop-color="${accent}" stop-opacity="0.18"/>
|
|
1811
|
+
<stop offset="100%" stop-color="${accent}" stop-opacity="0"/>
|
|
1812
|
+
</linearGradient>
|
|
1813
|
+
</defs>
|
|
1814
|
+
${grid}${xlabels}
|
|
1815
|
+
<path d="${areaD}" fill="url(#area-fill)"/>
|
|
1816
|
+
<path d="${lineD(pp)}" fill="none" stroke="${second}" stroke-width="2" stroke-dasharray="5 5" stroke-linecap="round"/>
|
|
1817
|
+
<path d="${lineD(cp)}" fill="none" stroke="${accent}" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
1818
|
+
<circle cx="${endC[0]}" cy="${endC[1]}" r="4" fill="${accent}"/>
|
|
1819
|
+
<circle cx="${endC[0]}" cy="${endC[1]}" r="8" fill="${accent}" opacity="0.18"/>
|
|
1820
|
+
<text x="${endC[0] - 10}" y="${endC[1] - 12}" text-anchor="end" font-size="11" font-weight="650" fill="${accent}">768</text>
|
|
1821
|
+
<text x="${endP[0] - 10}" y="${endP[1] + 18}" text-anchor="end" font-size="11" font-weight="600" fill="${second}">522</text>
|
|
1822
|
+
<g id="chart-hover" style="display:none">
|
|
1823
|
+
<line id="hover-line" y1="${y0}" y2="${y1}" stroke="${faint}" stroke-width="1" stroke-dasharray="3 3"/>
|
|
1824
|
+
<circle id="hover-dot-c" r="4" fill="${accent}" stroke="${css('--surface')}" stroke-width="2"/>
|
|
1825
|
+
<circle id="hover-dot-p" r="4" fill="${second}" stroke="${css('--surface')}" stroke-width="2"/>
|
|
1826
|
+
</g>`;
|
|
1827
|
+
|
|
1828
|
+
/* hover layer */
|
|
1829
|
+
const tip = document.getElementById('chart-tip');
|
|
1830
|
+
const hover = svg.querySelector('#chart-hover');
|
|
1831
|
+
const hline = svg.querySelector('#hover-line');
|
|
1832
|
+
const hdc = svg.querySelector('#hover-dot-c');
|
|
1833
|
+
const hdp = svg.querySelector('#hover-dot-p');
|
|
1834
|
+
|
|
1835
|
+
svg.onpointermove = (event) => {
|
|
1836
|
+
const rect = svg.getBoundingClientRect();
|
|
1837
|
+
const sx = ((event.clientX - rect.left) / rect.width) * 720;
|
|
1838
|
+
const i = Math.max(0, Math.min(CURR.length - 1,
|
|
1839
|
+
Math.round(((sx - x0) / (x1 - x0)) * (CURR.length - 1))));
|
|
1840
|
+
const [cx, cy] = cp[i];
|
|
1841
|
+
hover.style.display = '';
|
|
1842
|
+
hline.setAttribute('x1', cx); hline.setAttribute('x2', cx);
|
|
1843
|
+
hdc.setAttribute('cx', cx); hdc.setAttribute('cy', cy);
|
|
1844
|
+
hdp.setAttribute('cx', pp[i][0]); hdp.setAttribute('cy', pp[i][1]);
|
|
1845
|
+
tip.style.display = 'block';
|
|
1846
|
+
tip.innerHTML = `<b>${DAYS[i]}</b>
|
|
1847
|
+
<div class="row"><i style="background:${accent}"></i>This period <span class="v num">${CURR[i]}</span></div>
|
|
1848
|
+
<div class="row"><i style="background:${second}"></i>Previous <span class="v num">${PREV[i]}</span></div>`;
|
|
1849
|
+
const px = (cx / 720) * rect.width;
|
|
1850
|
+
tip.style.left = `${Math.min(rect.width - 140, Math.max(4, px + 14))}px`;
|
|
1851
|
+
tip.style.top = `${(cy / 260) * rect.height - 8}px`;
|
|
1852
|
+
};
|
|
1853
|
+
svg.onpointerleave = () => {
|
|
1854
|
+
hover.style.display = 'none';
|
|
1855
|
+
tip.style.display = 'none';
|
|
1856
|
+
};
|
|
1857
|
+
}
|
|
1858
|
+
|
|
1859
|
+
function drawSparks() {
|
|
1860
|
+
document.querySelectorAll('svg.spark').forEach((svg) => {
|
|
1861
|
+
const data = svg.dataset.spark.split(',').map(Number);
|
|
1862
|
+
const max = Math.max(...data) * 1.15;
|
|
1863
|
+
const p = pts(data, 2, 118, 4, 32, max);
|
|
1864
|
+
const accent = css('--accent');
|
|
1865
|
+
const end = p[p.length - 1];
|
|
1866
|
+
svg.setAttribute('viewBox', '0 0 120 36');
|
|
1867
|
+
svg.innerHTML = `
|
|
1868
|
+
<path d="${lineD(p)} L118,34 L2,34 Z" fill="${accent}" opacity="0.09"/>
|
|
1869
|
+
<path d="${lineD(p)}" fill="none" stroke="${accent}" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/>
|
|
1870
|
+
<circle cx="${end[0]}" cy="${end[1]}" r="2.6" fill="${accent}"/>`;
|
|
1871
|
+
});
|
|
1872
|
+
}
|
|
1873
|
+
|
|
1874
|
+
function drawFrameChart() {
|
|
1875
|
+
const svg = document.getElementById('frame-chart');
|
|
1876
|
+
const accent = css('--accent');
|
|
1877
|
+
const second = css('--chart-2');
|
|
1878
|
+
const p1 = pts(CURR, 6, 554, 8, 140, 800);
|
|
1879
|
+
const p2 = pts(PREV, 6, 554, 8, 140, 800);
|
|
1880
|
+
svg.innerHTML = `
|
|
1881
|
+
<path d="${lineD(p1)} L554,146 L6,146 Z" fill="${accent}" opacity="0.1"/>
|
|
1882
|
+
<path d="${lineD(p2)}" fill="none" stroke="${second}" stroke-width="1.6" stroke-dasharray="4 4"/>
|
|
1883
|
+
<path d="${lineD(p1)}" fill="none" stroke="${accent}" stroke-width="2" stroke-linecap="round"/>`;
|
|
1884
|
+
}
|
|
1885
|
+
|
|
1886
|
+
function drawAllCharts() {
|
|
1887
|
+
requestAnimationFrame(() => {
|
|
1888
|
+
drawBigChart();
|
|
1889
|
+
drawSparks();
|
|
1890
|
+
drawFrameChart();
|
|
1891
|
+
});
|
|
1892
|
+
}
|
|
1893
|
+
drawAllCharts();
|
|
1894
|
+
prefersDark.addEventListener('change', drawAllCharts);
|
|
1895
|
+
|
|
1896
|
+
/* ── app shell: nested nav, collapse, drawer, menus, ad dismiss ───────── */
|
|
1897
|
+
|
|
1898
|
+
document.querySelectorAll('[data-expand]').forEach((parent) => {
|
|
1899
|
+
parent.addEventListener('click', () => {
|
|
1900
|
+
const sub = document.getElementById(parent.dataset.expand);
|
|
1901
|
+
const open = parent.getAttribute('aria-expanded') !== 'true';
|
|
1902
|
+
parent.setAttribute('aria-expanded', String(open));
|
|
1903
|
+
sub.classList.toggle('open', open);
|
|
1904
|
+
});
|
|
1905
|
+
});
|
|
1906
|
+
|
|
1907
|
+
const shell = document.getElementById('shell');
|
|
1908
|
+
const collapseBtn = document.getElementById('collapse-btn');
|
|
1909
|
+
collapseBtn.addEventListener('click', () => {
|
|
1910
|
+
const collapsed = shell.dataset.collapsed !== 'true';
|
|
1911
|
+
shell.dataset.collapsed = String(collapsed);
|
|
1912
|
+
collapseBtn.setAttribute('aria-expanded', String(!collapsed));
|
|
1913
|
+
});
|
|
1914
|
+
|
|
1915
|
+
const drawerBtn = document.getElementById('drawer-btn');
|
|
1916
|
+
const scrim = document.getElementById('scrim');
|
|
1917
|
+
const setDrawer = (open) => {
|
|
1918
|
+
shell.dataset.open = String(open);
|
|
1919
|
+
drawerBtn.setAttribute('aria-expanded', String(open));
|
|
1920
|
+
};
|
|
1921
|
+
drawerBtn.addEventListener('click', () => setDrawer(shell.dataset.open !== 'true'));
|
|
1922
|
+
scrim.addEventListener('click', () => setDrawer(false));
|
|
1923
|
+
|
|
1924
|
+
const account = document.getElementById('account');
|
|
1925
|
+
const accountBtn = document.getElementById('account-btn');
|
|
1926
|
+
accountBtn.addEventListener('click', (event) => {
|
|
1927
|
+
event.stopPropagation();
|
|
1928
|
+
const open = !account.classList.contains('open');
|
|
1929
|
+
account.classList.toggle('open', open);
|
|
1930
|
+
accountBtn.setAttribute('aria-expanded', String(open));
|
|
1931
|
+
});
|
|
1932
|
+
addEventListener('click', () => {
|
|
1933
|
+
account.classList.remove('open');
|
|
1934
|
+
accountBtn.setAttribute('aria-expanded', 'false');
|
|
1935
|
+
});
|
|
1936
|
+
|
|
1937
|
+
document.getElementById('ad-dismiss').addEventListener('click', () => {
|
|
1938
|
+
document.getElementById('ad-slot').remove();
|
|
1939
|
+
});
|
|
1940
|
+
|
|
1941
|
+
/* segmented controls + sidebar nav: purely visual state for the draft */
|
|
1942
|
+
document.querySelectorAll('.seg').forEach((seg) => {
|
|
1943
|
+
seg.addEventListener('click', (event) => {
|
|
1944
|
+
const btn = event.target.closest('button');
|
|
1945
|
+
if (!btn) return;
|
|
1946
|
+
seg.querySelectorAll('button').forEach((b) => b.setAttribute('aria-pressed', String(b === btn)));
|
|
1947
|
+
});
|
|
1948
|
+
});
|
|
1949
|
+
document.querySelectorAll('.side .nav-item:not([data-expand])').forEach((item) => {
|
|
1950
|
+
item.addEventListener('click', () => {
|
|
1951
|
+
document.querySelectorAll('.side .nav-item').forEach((n) => n.removeAttribute('aria-current'));
|
|
1952
|
+
item.setAttribute('aria-current', 'page');
|
|
1953
|
+
});
|
|
1954
|
+
});
|
|
1955
|
+
})();
|
|
1956
|
+
</script>
|