/* SPDX-FileCopyrightText: 2026 Progmasoft */ /* SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.1 */ :root { --blue-700: #004e8c; --blue-600: #0066b8; --blue-500: #0078d4; --blue-100: #dff0ff; --violet-600: #6750a4; --green-600: #16825d; --ink-950: #121417; --ink-800: #2a2f35; --ink-650: #4c545d; --ink-500: #68717c; --line: #d9dee4; --line-strong: #b9c1ca; --surface: #ffffff; --surface-muted: #f5f7f9; --surface-blue: #f1f8ff; --header-surface: rgb(255 255 255 / 94%); --hero-background: radial-gradient(circle at 85% 14%, rgb(0 120 212 / 10%), transparent 34%), linear-gradient(180deg, #fff, #f7fbff); --account-background: linear-gradient( 145deg, #f8fbff 0%, #fff 55%, #f1f8ff 100% ); --danger: #b42318; --shadow-sm: 0 2px 8px rgb(18 20 23 / 8%); --shadow-md: 0 16px 44px rgb(18 20 23 / 12%); --radius-sm: 4px; --radius-md: 8px; --radius-lg: 16px; --shell: 1180px; color-scheme: light; } /* Light is deliberately the product default. Dark mode is an explicit, persistent preference so operating-system changes do not surprise users. */ :root[data-theme="dark"] { --blue-700: #86c8ff; --blue-600: #5db5f7; --blue-500: #369fe8; --blue-100: #14314a; --violet-600: #a88eff; --green-600: #5bd5aa; --ink-950: #f4f6f8; --ink-800: #dfe4e9; --ink-650: #bac3cc; --ink-500: #98a4af; --line: #343c45; --line-strong: #53606d; --surface: #101317; --surface-muted: #171c22; --surface-blue: #10283a; --header-surface: rgb(16 19 23 / 94%); --hero-background: radial-gradient(circle at 85% 14%, rgb(54 159 232 / 16%), transparent 34%), linear-gradient(180deg, #101317, #131a22); --account-background: linear-gradient( 145deg, #131a22 0%, #101317 55%, #102231 100% ); --danger: #ff8f86; --shadow-sm: 0 2px 8px rgb(0 0 0 / 28%); --shadow-md: 0 16px 44px rgb(0 0 0 / 42%); color-scheme: dark; } * { box-sizing: border-box; } html { scroll-behavior: smooth; } body { margin: 0; background: var(--surface); color: var(--ink-950); font-family: "Segoe UI Variable", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.5; text-rendering: optimizeLegibility; } a { color: var(--blue-600); text-decoration: none; } a:hover { text-decoration: underline; } button, input { font: inherit; } button, a { -webkit-tap-highlight-color: transparent; } :focus-visible { outline: 3px solid #ffbf47; outline-offset: 3px; } .shell { width: min(calc(100% - 40px), var(--shell)); margin-inline: auto; } .site-header { position: relative; z-index: 20; min-height: 68px; border-bottom: 1px solid var(--line); background: var(--header-surface); backdrop-filter: blur(14px); } .header-inner { min-height: 68px; display: flex; align-items: center; justify-content: space-between; gap: 32px; } .brand { display: inline-flex; align-items: center; gap: 11px; color: var(--ink-950); } .brand:hover { text-decoration: none; } .brand-mark { width: 24px; height: 24px; display: grid; flex: 0 0 auto; grid-template-columns: repeat(2, 1fr); grid-template-rows: repeat(2, 1fr); gap: 2px; } .brand-tile { display: block; } .brand-tile-slate { background: #3b4658; } .brand-tile-teal { background: #1e7188; } .brand-tile-violet { background: #7655fa; } .brand-tile-orange { background: #dc7644; } .brand-name { color: #8e0000; font-size: 20px; font-weight: 650; letter-spacing: -0.02em; line-height: 1; } :root[data-theme="dark"] .brand-name { color: #f23636; } .brand-product { border-left: 2px solid var(--ink-800); margin-left: 5px; padding-left: 16px; color: var(--ink-800); font-size: 16px; font-weight: 600; } .primary-nav { display: flex; align-items: center; gap: 28px; } .preference-controls { display: flex; gap: 6px; align-items: center; padding-left: 4px; } .preference-controls button, .preference-controls select { min-height: 34px; display: inline-flex; gap: 6px; align-items: center; border: 1px solid var(--line); border-radius: var(--radius-sm); padding: 6px 9px; background: var(--surface); color: var(--ink-800); cursor: pointer; font-size: 12px; font-weight: 700; } .preference-controls button:hover, .preference-controls select:hover { border-color: var(--blue-600); background: var(--surface-blue); } /* The language menu is the native select: the browser supplies the list, keyboard handling and the accessible name without any script. */ .preference-controls select { display: inline-block; font-family: inherit; } .preference-controls select:disabled { cursor: progress; opacity: 0.7; } .primary-nav > a { color: var(--ink-800); font-size: 14px; font-weight: 600; } .primary-nav > a:hover { color: var(--blue-600); text-decoration: none; } .button { min-height: 44px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--blue-600); border-radius: var(--radius-sm); padding: 10px 21px; background: var(--blue-600); color: white; cursor: pointer; font-weight: 650; line-height: 1.2; transition: background 140ms ease, border-color 140ms ease, box-shadow 140ms ease, transform 140ms ease; } .button:hover { border-color: var(--blue-700); background: var(--blue-700); color: white; text-decoration: none; box-shadow: var(--shadow-sm); } .button:active { transform: translateY(1px); } .button:disabled { cursor: wait; opacity: 0.68; } .button-small { min-height: 36px; padding: 8px 15px; color: white !important; } .button-secondary { border-color: var(--line-strong); background: var(--surface); color: var(--ink-800); } .button-secondary:hover { border-color: var(--blue-600); background: var(--surface-blue); color: var(--blue-700); } .button-light { border-color: white; background: white; color: var(--blue-700); } .button-light:hover { border-color: white; background: #eef7ff; color: var(--blue-700); } .eyebrow { margin: 0 0 12px; color: var(--blue-700); font-size: 13px; font-weight: 750; letter-spacing: 0.095em; text-transform: uppercase; } .hero { overflow: hidden; border-bottom: 1px solid var(--line); background: var(--hero-background); } .hero-grid { min-height: 650px; display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(420px, 0.95fr); align-items: center; gap: 78px; padding-block: 76px; } .hero-copy h1 { max-width: 740px; margin: 0; font-size: clamp(46px, 5.5vw, 76px); font-weight: 720; letter-spacing: -0.05em; line-height: 1.02; } .hero-copy h1 span { color: var(--blue-600); } .hero-lede { max-width: 680px; margin: 26px 0 0; color: var(--ink-650); font-size: 20px; line-height: 1.6; } .hero-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 32px; } .hero-facts { display: flex; flex-wrap: wrap; gap: 36px; margin: 48px 0 0; } .hero-facts div { display: grid; gap: 2px; } .hero-facts dt { font-size: 18px; font-weight: 700; } .hero-facts dd { margin: 0; color: var(--ink-500); font-size: 13px; } .system-window { overflow: hidden; border: 1px solid #c6d1dd; border-radius: var(--radius-lg); background: var(--surface); box-shadow: var(--shadow-md); transform: perspective(1200px) rotateY(-4deg) rotateX(1deg); } .window-bar { min-height: 48px; display: flex; align-items: center; gap: 7px; border-bottom: 1px solid var(--line); padding: 0 17px; background: var(--surface-muted); } .window-bar span { width: 9px; height: 9px; border-radius: 50%; background: #a9b2bc; } .window-bar code { margin-left: auto; color: var(--ink-500); font-family: "Cascadia Code", Consolas, monospace; font-size: 11px; } .system-stack { padding: 28px; background: linear-gradient(145deg, var(--surface), var(--surface-muted)); } .stack-row { display: grid; grid-template-columns: 78px 1fr; align-items: center; gap: 5px 16px; border: 1px solid var(--line); border-left: 4px solid var(--blue-500); border-radius: var(--radius-md); padding: 19px 20px; background: var(--surface); box-shadow: var(--shadow-sm); } .stack-row > span { grid-row: span 2; color: var(--ink-500); font-size: 12px; font-weight: 700; text-transform: uppercase; } .stack-row strong { font-size: 18px; } .stack-row small { color: var(--ink-500); } .stack-project { border-left-color: var(--violet-600); } .stack-native { border-left-color: var(--green-600); } .stack-arrow { height: 34px; display: grid; place-items: center; color: var(--ink-500); } .section { padding-block: 96px; } .section-muted { border-block: 1px solid var(--line); background: var(--surface-muted); } .section-heading { display: flex; align-items: end; justify-content: space-between; gap: 50px; margin-bottom: 40px; } .section-heading.vertical { display: block; margin: 0; } .section-heading h2, .callout h2, .account-landing h1 { margin: 0; font-size: clamp(34px, 4vw, 52px); letter-spacing: -0.04em; line-height: 1.08; } .section-heading > p, .section-heading.vertical > p:last-child { max-width: 510px; margin: 0; color: var(--ink-650); font-size: 17px; } .section-heading.vertical > p:last-child { margin-top: 22px; } .product-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } .product-card { min-height: 330px; display: flex; flex-direction: column; border: 1px solid var(--line); border-top: 5px solid var(--blue-500); border-radius: var(--radius-md); padding: 30px; background: var(--surface); box-shadow: var(--shadow-sm); } .product-card.accent-violet { border-top-color: var(--violet-600); } .product-card.accent-green { border-top-color: var(--green-600); } .product-card h3 { margin: 4px 0 14px; font-size: 30px; letter-spacing: -0.035em; } .product-card > p:not(.eyebrow) { margin: 0; color: var(--ink-650); line-height: 1.65; } .product-card > a { margin-top: auto; padding-top: 24px; font-weight: 700; } .principles-grid { display: grid; grid-template-columns: minmax(0, 0.8fr) minmax(480px, 1.2fr); gap: 90px; } .principle-list { display: grid; gap: 0; } .principle-list article { display: grid; grid-template-columns: 55px 1fr; gap: 20px; border-bottom: 1px solid var(--line); padding: 27px 0; } .principle-list article:first-child { padding-top: 0; } .principle-list article > span { color: var(--blue-600); font-family: "Cascadia Code", Consolas, monospace; font-size: 13px; font-weight: 700; } .principle-list h3 { margin: 0 0 7px; font-size: 21px; } .principle-list p { margin: 0; color: var(--ink-650); } .callout-section { padding-block: 72px; } .callout { display: flex; align-items: center; justify-content: space-between; gap: 44px; border-radius: var(--radius-lg); padding: 52px 58px; background: linear-gradient(125deg, #004e8c, #0078d4); color: white; box-shadow: var(--shadow-md); } .callout .eyebrow { color: #d8eeff; } .callout p:last-child { max-width: 650px; margin: 16px 0 0; color: #e9f5ff; font-size: 17px; } .site-footer { border-top: 1px solid #343a40; background: #20252a; color: #d8dde2; } .site-footer .brand { color: white; } .footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 70px; padding-block: 60px; } .footer-grid > div { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; } .footer-grid p { max-width: 430px; margin: 12px 0 0; color: #aeb6bf; } .footer-grid a { color: #d8dde2; } .footer-grid strong { margin-bottom: 7px; color: white; } .footer-bottom { display: flex; justify-content: space-between; gap: 20px; border-top: 1px solid #3a4148; padding-block: 22px; color: #aeb6bf; font-size: 13px; } .account-landing { min-height: 70vh; } .account-landing-hero { border-bottom: 1px solid var(--line); padding-block: 100px; background: var(--account-background); } .account-landing-grid { display: grid; grid-template-columns: 1fr minmax(390px, 0.75fr); align-items: center; gap: 90px; } .account-landing h1 { max-width: 720px; } .account-landing-grid > div:first-child > p:not(.eyebrow) { max-width: 660px; margin: 24px 0 0; color: var(--ink-650); font-size: 19px; } .identity-card { display: grid; gap: 0; border: 1px solid var(--line-strong); border-radius: var(--radius-lg); padding: 28px; background: var(--surface); box-shadow: var(--shadow-md); } .identity-icon { width: 62px; height: 62px; display: grid; place-items: center; margin-bottom: 20px; border-radius: 50%; background: var(--blue-600); color: white; font-size: 30px; font-weight: 700; } .identity-card > div:not(.identity-icon) { display: grid; gap: 2px; border-top: 1px solid var(--line); padding-block: 15px; } .identity-card span { color: var(--ink-500); font-size: 12px; font-weight: 700; text-transform: uppercase; } .feature-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; } .feature-grid article { border-left: 3px solid var(--blue-500); padding: 4px 0 4px 24px; } .feature-grid article > span { color: var(--blue-600); font-family: "Cascadia Code", Consolas, monospace; font-size: 12px; } .feature-grid h2 { margin: 10px 0 8px; font-size: 21px; } .feature-grid p { margin: 0; color: var(--ink-650); } .account-page { min-height: 100vh; background: var(--surface-muted); } .account-main { width: min(calc(100% - 40px), 1080px); min-height: calc(100vh - 69px); display: grid; grid-template-columns: 1fr minmax(420px, 0.8fr); align-items: center; gap: 80px; margin-inline: auto; padding-block: 72px; } .account-intro h1 { margin: 0; font-size: clamp(40px, 5vw, 62px); letter-spacing: -0.045em; line-height: 1.05; } .account-intro > p:not(.eyebrow) { max-width: 560px; margin: 22px 0 0; color: var(--ink-650); font-size: 18px; } .account-trust { display: grid; gap: 12px; margin-top: 36px; color: var(--ink-650); font-size: 14px; } .account-trust span { display: flex; align-items: center; gap: 10px; } .account-trust span::before { width: 18px; height: 18px; display: grid; place-items: center; border-radius: 50%; background: #dff6ed; color: var(--green-600); content: "✓"; font-size: 11px; font-weight: 800; } .account-panel { border: 1px solid var(--line); border-radius: var(--radius-md); background: var(--surface); box-shadow: var(--shadow-md); } .auth-form { display: grid; gap: 21px; padding: 38px; } .form-heading h2 { margin: 0; font-size: 27px; letter-spacing: -0.025em; } .form-heading p { margin: 8px 0 0; color: var(--ink-650); } .form-message { border-radius: var(--radius-sm); padding: 12px 14px; font-size: 14px; } .form-message-error { border: 1px solid #f1aaa4; background: #fff2f0; color: var(--danger); } .field-group { display: grid; gap: 7px; } .field-group label { color: var(--ink-800); font-size: 14px; font-weight: 650; } .field-group input { width: 100%; height: 44px; border: 1px solid #89939e; border-radius: var(--radius-sm); padding: 8px 11px; background: var(--surface); color: var(--ink-950); } .field-group input:hover { border-color: var(--ink-650); } .field-group input:focus { border-color: var(--blue-600); outline: 2px solid rgb(0 102 184 / 18%); outline-offset: 0; } .field-group small { color: var(--ink-500); font-size: 12px; } .field-label-row { display: flex; justify-content: space-between; gap: 20px; } .field-label-row a { font-size: 13px; } .password-field { position: relative; } .password-field input { padding-right: 64px; } .password-toggle { position: absolute; top: 4px; right: 5px; height: 36px; border: 0; border-radius: 3px; padding-inline: 10px; background: transparent; color: var(--blue-700); cursor: pointer; font-size: 12px; font-weight: 700; } .password-toggle:hover { background: var(--surface-blue); } .auth-submit { width: 100%; margin-top: 3px; } .auth-divider { align-items: center; color: var(--muted); display: flex; font-size: 0.78rem; gap: 0.75rem; text-transform: uppercase; } .auth-divider::before, .auth-divider::after { background: var(--line); content: ""; flex: 1; height: 1px; } .google-auth-button { background: transparent; border-color: var(--line); color: var(--ink); width: 100%; } .google-auth-button:hover { border-color: var(--accent); } .consent-field { display: flex; align-items: flex-start; gap: 10px; color: var(--ink-650); font-size: 14px; line-height: 1.5; } .consent-field input { flex: none; width: 18px; height: 18px; margin: 2px 0 0; accent-color: var(--violet-600); } .form-switch { margin: 0; color: var(--ink-650); text-align: center; font-size: 14px; } .dashboard-layout { min-height: 100vh; display: grid; grid-template-columns: 270px 1fr; background: var(--surface-muted); } .dashboard-sidebar { position: sticky; top: 0; height: 100vh; display: flex; flex-direction: column; align-items: flex-start; border-right: 1px solid var(--line); padding: 34px 26px; background: var(--surface); } .account-avatar { width: 52px; height: 52px; display: grid; place-items: center; margin-bottom: 13px; border-radius: 50%; background: linear-gradient(145deg, var(--blue-500), var(--blue-700)); color: white; font-weight: 750; } .dashboard-sidebar > strong { font-size: 17px; } .dashboard-sidebar > span { overflow: hidden; width: 100%; margin-top: 3px; color: var(--ink-500); font-size: 12px; text-overflow: ellipsis; } .dashboard-sidebar nav { width: 100%; display: grid; gap: 4px; margin-top: 34px; } .dashboard-sidebar nav a { border-radius: var(--radius-sm); padding: 10px 12px; color: var(--ink-800); font-size: 14px; font-weight: 600; } .dashboard-sidebar nav a:hover, .dashboard-sidebar nav a.active { background: var(--surface-blue); color: var(--blue-700); text-decoration: none; } .dashboard-sidebar-preferences { width: 100%; margin-top: 24px; padding-top: 20px; border-top: 1px solid var(--line); } .dashboard-sidebar-preferences .preference-controls { padding-left: 0; } .text-button { margin-top: auto; border: 0; padding: 8px 0; background: transparent; color: var(--blue-700); cursor: pointer; font-weight: 650; } .dashboard-content { width: min(calc(100% - 64px), 1050px); margin-inline: auto; padding-block: 64px; } .dashboard-heading h1 { margin: 0; font-size: clamp(34px, 4vw, 50px); letter-spacing: -0.04em; } .dashboard-heading > p:last-child { margin: 12px 0 0; color: var(--ink-650); font-size: 17px; } .dashboard-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; margin-top: 38px; } .dashboard-card { border: 1px solid var(--line); border-radius: var(--radius-md); padding: 28px; background: var(--surface); box-shadow: var(--shadow-sm); } .dashboard-card-wide { grid-column: 1 / -1; } .card-kicker { color: var(--blue-700); font-size: 12px; font-weight: 750; letter-spacing: 0.08em; text-transform: uppercase; } .dashboard-card h2 { margin: 8px 0 13px; font-size: 22px; } .dashboard-card > p { margin: 0 0 22px; color: var(--ink-650); } .detail-list { display: grid; margin: 0; } .detail-list div { display: grid; grid-template-columns: 120px 1fr; gap: 20px; border-top: 1px solid var(--line); padding-block: 11px; } .detail-list dt { color: var(--ink-500); } .detail-list dd { margin: 0; font-weight: 600; } .service-row { display: flex; align-items: center; justify-content: space-between; gap: 30px; border-top: 1px solid var(--line); padding-block: 16px; } .service-row > div { display: grid; } .service-row span:not(.status-badge) { color: var(--ink-500); font-size: 13px; } .status-badge { border-radius: 999px; padding: 4px 10px; font-size: 12px; font-weight: 700; } .status-planned { background: #fff4ce; color: #6a4b00; } :root[data-theme="dark"] .form-message-error { border-color: #7a3936; background: #321b1d; } :root[data-theme="dark"] .account-trust span::before { background: #15392e; } :root[data-theme="dark"] .status-planned { background: #493a11; color: #ffe58b; } :root[data-theme="dark"] .button-light { color: #004e8c; } .dashboard-state { position: relative; min-height: 100vh; display: grid; place-items: center; padding: 40px; background: var(--surface-muted); color: var(--ink-650); } .dashboard-state > p { margin: 0; } .dashboard-state-preferences { position: absolute; top: 24px; right: 24px; } .dashboard-error { color: var(--danger); } @media (max-width: 920px) { .hero-grid, .account-landing-grid, .account-main, .principles-grid { grid-template-columns: 1fr; } .hero-grid { gap: 54px; } .hero-visual { max-width: 620px; } .product-grid, .feature-grid { grid-template-columns: 1fr; } .product-card { min-height: 260px; } .account-main { max-width: 650px; gap: 42px; } .dashboard-layout { grid-template-columns: 1fr; } .dashboard-sidebar { position: static; height: auto; border-right: 0; border-bottom: 1px solid var(--line); } .dashboard-sidebar nav { grid-template-columns: repeat(3, 1fr); } .text-button { margin-top: 18px; } } @media (max-width: 680px) { .shell, .account-main { width: min(calc(100% - 28px), var(--shell)); } .site-header, .header-inner { min-height: 60px; } .primary-nav > a:not(.button) { display: none; } .preference-controls button span:last-child { display: none; } .hero-grid { min-height: auto; grid-template-columns: minmax(0, 1fr); padding-block: 60px; } .hero-copy h1 { font-size: 44px; } .hero-lede { font-size: 17px; } .hero-facts { gap: 22px; } .system-window { transform: none; } .system-stack { padding: 18px; } .stack-row { grid-template-columns: 1fr; } .stack-row > span { grid-row: auto; } .section { padding-block: 66px; } .section-heading, .callout, .footer-bottom { align-items: flex-start; flex-direction: column; } .callout { padding: 34px 28px; } .footer-grid { grid-template-columns: 1fr; gap: 38px; } .account-landing-hero { padding-block: 64px; } .account-landing-grid { grid-template-columns: minmax(0, 1fr); gap: 50px; } .account-main { padding-block: 50px; } .auth-form { padding: 26px 22px; } .dashboard-content { width: min(calc(100% - 28px), 1050px); padding-block: 42px; } .dashboard-grid { grid-template-columns: 1fr; } .dashboard-sidebar nav { grid-template-columns: 1fr; } .detail-list div { grid-template-columns: 1fr; gap: 3px; } } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { scroll-behavior: auto !important; transition-duration: 0.01ms !important; } } /* * Right-to-left text. Only the text follows the direction of the language: * the page layout, the navigation and code keep their left-to-right * arrangement. Blocks of prose run right to left, and short pieces such as * links, buttons and list items take the direction of their own first * letter, so a product name on its own still reads left to right. */ [data-text-direction="rtl"] :is(h1, h2, h3, h4, h5, h6, p, blockquote, figcaption, dt, dd, legend) { direction: rtl; } [data-text-direction="rtl"] :is(a, button, label, li, small, strong, span, option, summary) { unicode-bidi: plaintext; } [data-text-direction="rtl"] :is(code, pre, kbd, samp, input) { direction: ltr; unicode-bidi: isolate; } /* The theme changes in one frame; nothing animates its colours meanwhile. */ .theme-switching, .theme-switching *, .theme-switching *::before, .theme-switching *::after { transition: none !important; }