diff --git a/src/App.css b/src/App.css index b3908e8..4695e47 100644 --- a/src/App.css +++ b/src/App.css @@ -1,32 +1,364 @@ -:root{--bg:#0b0b10;--panel:#111118;--panel-2:#16161f;--panel-3:#1b1b25;--line:#292933;--text:#f1f0f7;--muted:#92919e;--subtle:#666572;--accent:#a69bff;--positive:#73dfae;--warning:#ffc777;--critical:#ff8585;--pink:#e58bff;--blue:#9bcbff;--mono:'DM Mono',monospace}.app-shell{min-height:100vh;background:var(--bg);background-image:radial-gradient(circle at 71% 1%,rgba(139,125,255,.09),transparent 28rem)}.topbar{height:68px;border-bottom:1px solid var(--line);background:rgba(11,11,16,.82);backdrop-filter:blur(18px);display:flex;align-items:center;padding:0 34px;gap:32px;position:sticky;top:0;z-index:10}.brand,.top-links,.top-search,.hero-actions,.showcase-foot,.status-line,.code-head,.section-heading,.release-icon,.input-with-action,.toggle-field{display:flex;align-items:center}.brand{gap:10px;white-space:nowrap}.brand-mark{width:26px;height:26px;border:1px solid var(--accent);border-radius:8px;display:grid;place-items:center;transform:rotate(45deg)}.brand-mark span{width:9px;height:9px;background:var(--accent);border-radius:3px}.brand-mark.large{width:42px;height:42px;border-radius:12px}.brand-mark.large span{width:14px;height:14px}.brand b{font-weight:800;letter-spacing:-.04em;font-size:17px}.version,.api-pill,.nav-count{font:11px var(--mono);color:var(--muted);border:1px solid var(--line);padding:3px 7px;border-radius:5px}.top-search{max-width:380px;flex:1;margin-left:auto;margin-right:auto;gap:10px;color:var(--subtle);background:var(--panel);border:1px solid var(--line);border-radius:7px;padding:8px 11px}.top-search:focus-within{border-color:#56517b}.top-search input{background:none;border:0;outline:0;color:var(--text);min-width:0;flex:1;font-size:12px}.top-search kbd{font:10px var(--mono);color:var(--subtle);border:1px solid var(--line);border-radius:4px;padding:3px 5px}.top-links{gap:22px;font-size:12px;color:var(--muted)}.top-links a:hover,.text-button:hover{color:var(--text)}.icon-button,.avatar{border:0;background:none;color:var(--muted);display:grid;place-items:center;padding:7px;border-radius:6px}.icon-button:hover{background:var(--panel-3);color:var(--text)}.avatar{width:28px;height:28px;background:#312e50;color:#c9c4ff;font-size:10px;font-weight:700}.mobile-menu{display:none}.body-layout{display:grid;grid-template-columns:240px minmax(0,1fr)}.sidebar{border-right:1px solid var(--line);min-height:calc(100vh - 68px);padding:33px 18px 24px;display:flex;flex-direction:column;position:sticky;top:68px;height:calc(100vh - 68px)}.sidebar-intro{padding:0 12px 30px;border-bottom:1px solid var(--line);margin-bottom:26px}.sidebar-intro p{font-size:11px;line-height:1.6;color:var(--subtle);margin:8px 0 0;max-width:150px}.eyebrow,.section-index,.nav-label{font:10px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--subtle)}.accent{color:var(--accent)}.nav-group{margin-bottom:27px}.nav-label{display:block;padding:0 12px;margin-bottom:9px}.nav-item{width:100%;border:0;background:none;color:var(--muted);text-align:left;padding:8px 12px;border-radius:6px;font-size:12px;display:flex;align-items:center;gap:10px;transition:.2s}.nav-item:hover{color:var(--text);background:var(--panel)}.nav-item.active{color:var(--text);background:var(--panel-3);box-shadow:inset 2px 0 var(--accent)}.nav-dot{width:4px;height:4px;border-radius:50%;background:var(--subtle)}.active .nav-dot{background:var(--accent)}.nav-count{margin-left:auto;padding:2px 5px;color:var(--accent);border-color:#433e68}.sidebar-bottom{margin-top:auto;border-top:1px solid var(--line);padding:18px 12px 0}.status-line{gap:8px;color:var(--muted);font-size:10px;margin-bottom:7px}.status-dot{width:6px;height:6px;background:var(--positive);box-shadow:0 0 10px var(--positive);border-radius:50%}.mono{font-family:var(--mono);font-size:10px}.muted{color:var(--subtle)}.main-content{min-width:0}.breadcrumbs{max-width:1180px;margin:0 auto;padding:27px 48px 0;display:flex;gap:10px;font:10px var(--mono);color:var(--subtle)}.breadcrumbs strong{color:var(--accent);font-weight:400}.hero-section{max-width:1180px;margin:0 auto;padding:67px 48px 78px;display:flex;justify-content:space-between;gap:40px;min-height:386px}.hero-copy{max-width:590px}.hero-copy h1{font-size:clamp(42px,5vw,70px);line-height:1.02;letter-spacing:-.07em;margin:17px 0 19px;font-weight:800}.hero-copy p{color:var(--muted);font-size:16px;line-height:1.7;max-width:510px}.hero-actions{gap:11px;margin-top:31px}.button{border:1px solid transparent;border-radius:6px;padding:9px 14px;color:var(--text);font-size:11px;display:inline-flex;align-items:center;gap:8px;transition:.2s;white-space:nowrap}.button.primary{background:var(--accent);color:#171526;font-weight:700}.button.primary:hover{filter:brightness(1.12);transform:translateY(-1px)}.button.secondary{background:var(--panel-3);border-color:var(--line)}.button.secondary:hover,.button.hover-state{background:#252535}.button.danger{background:rgba(255,133,133,.12);color:var(--critical);border-color:rgba(255,133,133,.18)}.button.ghost{background:transparent;color:var(--muted)}.button.ghost:hover{color:var(--text);background:var(--panel)}.hero-orbit{width:280px;height:225px;position:relative;flex:0 0 280px;margin:6px 40px 0 0}.orbit{position:absolute;border:1px solid #343146;border-radius:50%;transform:rotate(-22deg)}.orbit-one{width:270px;height:112px;top:45px;left:0}.orbit-two{width:215px;height:215px;top:2px;left:28px;transform:rotate(58deg);border-color:#24233a}.orbit-core{position:absolute;top:71px;right:88px;width:105px;height:83px;border:1px solid #403b61;background:rgba(27,26,40,.88);border-radius:14px;display:flex;align-items:center;justify-content:center;gap:8px;color:var(--muted);font:10px var(--mono);line-height:1.4;box-shadow:0 0 45px rgba(166,155,255,.12)}.orbit-core b{color:var(--positive);font-weight:400}.orbit-label{position:absolute;font:9px var(--mono);color:var(--subtle);letter-spacing:.08em}.orbit-label b{display:block;color:var(--accent);font-weight:400;margin-top:4px}.label-one{top:13px;right:5px}.label-two{bottom:4px;left:7px}.label-three{bottom:31px;right:0}.content-grid{max-width:1180px;margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr) 220px;gap:63px;padding:0 48px}.content-main{min-width:0}.section-block{padding:45px 0;border-top:1px solid var(--line)}.section-heading{justify-content:space-between;align-items:flex-start;gap:20px}.section-heading h2{font-size:28px;letter-spacing:-.05em;margin:10px 0 7px}.section-heading p{margin:0;color:var(--muted);font-size:12px}.api-pill{white-space:nowrap;margin-top:5px}.text-button{display:inline-flex;gap:8px;align-items:center;border:0;background:none;color:var(--accent);font-size:11px;margin-top:10px}.tabs{display:flex;gap:22px;border-bottom:1px solid var(--line);margin-top:30px}.tab{border:0;background:none;color:var(--subtle);font-size:11px;padding:0 0 12px;border-bottom:1px solid transparent}.tab.active{color:var(--text);border-color:var(--accent)}.showcase{margin-top:20px;background:var(--panel);border:1px solid var(--line);border-radius:9px;overflow:hidden}.showcase-head,.showcase-foot{padding:13px 17px;border-bottom:1px solid var(--line);justify-content:space-between}.button-matrix{padding:7px 17px}.button-row{min-height:58px;display:grid;grid-template-columns:90px 1fr 1fr 42px 1fr;align-items:center;gap:14px;border-bottom:1px solid #202029}.button-row:last-child{border:0}.row-label{font:10px var(--mono);color:var(--muted)}.icon-only{padding:8px!important;justify-content:center}.loading{color:var(--muted)!important;background:var(--panel-2)!important;border-color:var(--line)!important}.spinner{width:12px;height:12px;border:2px solid #454450;border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.showcase-foot{border-top:1px solid var(--line);border-bottom:0;justify-content:flex-start;gap:7px}.density{border:1px solid transparent;background:none;color:var(--subtle);font:10px var(--mono);padding:6px 8px;border-radius:5px}.density span{color:#555462}.density.active{background:#29263f;color:var(--accent)}.foot-check{margin-left:auto;color:var(--positive);font:10px var(--mono);display:flex;align-items:center;gap:5px}.color-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;margin-top:23px}.color-card{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:10px;display:grid;grid-template-columns:32px 1fr 16px;align-items:center;gap:9px}.swatch{width:32px;height:32px;border-radius:6px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}.color-card strong,.color-card span{display:block;font-size:11px}.color-card .mono{color:var(--subtle);margin-top:4px}.copy-icon{border:0;background:none;color:var(--subtle);padding:0}.copy-icon:hover{color:var(--text)}.forms-grid{display:grid;grid-template-columns:1fr 1fr;gap:25px 18px;margin-top:24px;background:var(--panel);border:1px solid var(--line);border-radius:9px;padding:20px}.field{display:flex;flex-direction:column;gap:8px;font-size:11px;color:var(--muted)}.field em{font:9px var(--mono);font-style:normal;color:var(--accent);float:right;text-transform:uppercase}.field input{background:var(--panel-2);border:1px solid var(--line);border-radius:5px;padding:10px;color:var(--text);outline:0;font-size:12px}.field input:focus{border-color:#5b5486}.field small,.toggle-field small{font-size:10px;color:var(--subtle)}.input-with-action{background:var(--panel-2);border:1px solid var(--line);border-radius:5px}.input-with-action input{border:0;flex:1;min-width:0;background:transparent}.input-with-action button{border:0;background:none;color:var(--subtle);padding:0 11px}.toggle-field{grid-column:1/-1;background:var(--panel-2);border-radius:6px;padding:12px 13px;justify-content:space-between}.toggle-field b,.toggle-field small{display:block}.toggle-field small{margin-top:4px}.toggle{width:36px;height:20px;border:0;border-radius:20px;background:var(--line);padding:3px}.toggle span{display:block;width:14px;height:14px;border-radius:50%;background:var(--muted);transition:.2s}.toggle.on{background:var(--accent)}.toggle.on span{background:#19172b;transform:translateX(16px)}.bottom-section{padding-bottom:30px}.code-card{background:#0e0e14;border:1px solid var(--line);border-radius:9px;margin-top:24px;overflow:hidden}.code-head{justify-content:space-between;background:var(--panel);padding:10px 14px;border-bottom:1px solid var(--line)}.segmented{display:flex;gap:3px}.segmented button,.copy-button{border:0;background:none;color:var(--subtle);font:10px var(--mono);padding:5px 7px;border-radius:4px}.segmented button.selected{background:#29263f;color:var(--accent)}.copy-button{display:flex;gap:6px;align-items:center}.copy-button:hover{color:var(--text)}.code-card pre{margin:0;padding:21px;font:12px/1.7 var(--mono);color:#c8c5d2;overflow:auto}.pink{color:var(--pink)}.green{color:var(--positive)}.blue{color:var(--blue)}.right-rail{padding-top:45px}.rail-card{border-top:1px solid var(--line);padding:18px 0 20px}.rail-link{display:flex;gap:11px;padding:9px 0;color:var(--muted);font-size:11px;text-decoration:none}.rail-link span{font:10px var(--mono);color:var(--subtle)}.rail-link.active,.rail-link:hover{color:var(--accent)}.release{background:linear-gradient(145deg,#171626,#111118);border:1px solid #2c2945;border-radius:8px;padding:15px;margin:10px 0 18px}.release-icon{color:var(--accent);background:#27233e;width:31px;height:31px;justify-content:center;border-radius:7px;margin-bottom:16px}.release strong{font-size:12px}.release p,.rail-copy{color:var(--muted);font-size:11px;line-height:1.7;margin:8px 0 14px}.full{width:100%;justify-content:center}.release .text-button{margin-top:0}footer{max-width:1180px;margin:0 auto;padding:30px 48px 40px;border-top:1px solid var(--line);display:flex;justify-content:space-between;color:var(--subtle);font-size:10px} -@media(max-width:1020px){.topbar{padding:0 20px;gap:16px}.top-links a{display:none}.body-layout{grid-template-columns:200px minmax(0,1fr)}.hero-section,.content-grid{padding-left:28px;padding-right:28px}.content-grid{gap:30px;grid-template-columns:minmax(0,1fr) 190px}.hero-orbit{transform:scale(.82);transform-origin:right top;margin-right:0}} -@media(max-width:760px){.topbar{height:60px}.top-search{order:3;position:absolute;left:18px;right:18px;top:68px;max-width:none;display:none}.top-links{margin-left:auto}.mobile-menu{display:grid}.body-layout{display:block}.sidebar{display:none;position:fixed;z-index:9;top:60px;left:0;right:0;bottom:0;height:auto;background:rgba(11,11,16,.98);border:0}.menu-open .sidebar{display:flex}.breadcrumbs{padding:24px 20px 0}.hero-section{display:block;padding:54px 20px 58px}.hero-copy h1{font-size:50px}.hero-orbit{display:none}.content-grid{display:block;padding:0 20px}.right-rail{display:none}.section-block{padding:34px 0}.section-heading{display:block}.api-pill{display:inline-block;margin-top:18px}.button-row{grid-template-columns:70px 1fr 1fr;gap:8px}.button-row .icon-only,.button-row .loading{display:none}.color-grid{grid-template-columns:1fr 1fr}.forms-grid{grid-template-columns:1fr}.toggle-field{grid-column:auto}footer{padding:24px 20px 30px;display:block}footer .mono{display:block;margin-top:8px}} -@media(max-width:450px){.version{display:none}.brand b{font-size:15px}.hero-copy h1{font-size:42px}.hero-actions{align-items:stretch;flex-direction:column}.hero-actions .button{justify-content:center}.button-row{grid-template-columns:58px 1fr 1fr}.button{padding:8px 9px;font-size:10px}.showcase-foot{flex-wrap:wrap}.foot-check{margin-left:0;width:100%;margin-top:6px}.color-card{grid-template-columns:28px 1fr}.color-card .swatch{width:28px;height:28px}.color-card .copy-icon{display:none}} +/* Northstar design system — application layer. + Consumes ONLY tokens from src/tokens.css. Do not hardcode + px font sizes, hex colors, or raw accent washes here. -/* Markdown and CodeMirror surfaces */ -.markdown-card,.editor-card{margin-top:24px;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:var(--panel)} -.markdown-toolbar,.editor-tabs{display:flex;align-items:center;justify-content:space-between;padding:12px 17px;border-bottom:1px solid var(--line);background:#0f0f16} -.markdown-body{max-width:700px;margin:0 auto;padding:34px 38px 40px;color:#b8b6c4;font-size:13px;line-height:1.75}.md-kicker{font:10px var(--mono);letter-spacing:.13em;color:var(--accent)}.markdown-body h3{color:var(--text);font-size:25px;letter-spacing:-.05em;line-height:1.2;margin:13px 0 10px}.markdown-body h4{color:var(--text);font-size:13px;margin:25px 0 7px}.markdown-body p{margin:0 0 16px}.markdown-body code{font:11px var(--mono);color:var(--accent);background:#25223a;border:1px solid #38335a;border-radius:4px;padding:2px 5px}.md-callout{display:flex;gap:12px;padding:13px 15px;margin:22px 0;border:1px solid #3b3861;border-left:2px solid var(--accent);border-radius:6px;background:linear-gradient(100deg,#1a1829,#15151d)}.md-callout p{margin:0;font-size:12px;line-height:1.6}.md-callout strong{color:var(--text)}.callout-mark{color:var(--accent);font-size:16px}.markdown-body ul{margin:0 0 21px;padding-left:20px}.markdown-body li{padding-left:5px}.markdown-body li::marker{color:var(--accent)}.md-table{border:1px solid var(--line);border-radius:6px;overflow:hidden;font-size:11px}.md-table>div{display:grid;grid-template-columns:1.1fr 1fr 1.4fr;gap:10px;padding:9px 12px;border-bottom:1px solid var(--line)}.md-table>div:last-child{border-bottom:0}.md-table>div:first-child{color:var(--subtle);font:10px var(--mono);text-transform:uppercase;letter-spacing:.08em;background:#15151d}.md-table code{font-size:10px;background:none;border:0;padding:0}.md-accent{color:var(--accent)} -.editor-card{background:#0d0e14;border-color:#292b3c;box-shadow:0 16px 35px rgba(0,0,0,.18)}.editor-tabs{justify-content:flex-start;gap:0;padding:0 13px;background:#171820}.editor-dot{width:8px;height:8px;border-radius:50%;background:var(--positive);box-shadow:0 0 8px rgba(115,223,174,.6);margin-right:14px}.editor-tab{padding:12px 15px;color:var(--subtle);font:10px var(--mono);border-right:1px solid #292b3c}.editor-tab.active{color:#d9d7e5;background:#0d0e14;border-top:2px solid var(--accent);padding-top:10px}.editor-actions{margin-left:auto;color:#515363;font:9px var(--mono);letter-spacing:3px}.editor-body{display:grid;grid-template-columns:43px 1fr;min-height:218px;background:linear-gradient(90deg,rgba(20,21,30,.7),transparent 16%)}.line-numbers{padding:17px 10px 17px 0;border-right:1px solid #252735;text-align:right;color:#515363;font:11px/1.72 var(--mono);user-select:none}.editor-body pre{margin:0;padding:17px 20px;font:12px/1.72 var(--mono);overflow:auto;color:#c7c8d7}.cm-comment{color:#626779;font-style:italic}.cm-keyword{color:#e58bff}.cm-variable{color:#a69bff}.cm-property{color:#9bcbff}.cm-string{color:#73dfae}.editor-status{display:flex;gap:18px;padding:8px 14px;border-top:1px solid #252735;background:#171820;color:#666b7c;font:10px var(--mono)}.editor-ready{margin-left:auto;color:var(--positive);display:flex;align-items:center;gap:5px} -@media(max-width:760px){.markdown-body{padding:26px 20px 30px}.md-table{font-size:10px}.editor-body pre{padding:17px 12px}.editor-status{gap:10px;font-size:9px}.editor-status span:nth-child(2){display:none}} + Patterns: + • typography ......... var(--text-*) (+ var(--font-mono)) + • surfaces/borders ... var(--panel-*), var(--line-*), var(--text-*) + • accent washes ...... color-mix(in srgb, var(--accent) N%, transparent) + • spacing / radius ... var(--space-*), var(--radius-*) +*/ -/* Motion & finishing touches */ +/* ── Shell & topbar ─────────────────────────────────────────── */ +.app-shell{min-height:100vh;background:var(--bg);background-image:radial-gradient(circle at 71% 1%,color-mix(in srgb,var(--accent) 9%,transparent),transparent 28rem)} + +.topbar{height:68px;border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:blur(18px);display:flex;align-items:center;padding:0 var(--space-7);gap:var(--space-7);position:sticky;top:0;z-index:10} +.brand,.top-links,.top-search,.hero-actions,.showcase-foot,.status-line,.code-head,.section-heading,.release-icon,.input-with-action,.toggle-field{display:flex;align-items:center} + +.brand{gap:10px;white-space:nowrap} +.brand-mark{width:26px;height:26px;border:1px solid var(--accent);border-radius:var(--radius-md);display:grid;place-items:center;transform:rotate(45deg)} +.brand-mark span{width:9px;height:9px;background:var(--accent);border-radius:3px} +.brand-mark.large{width:42px;height:42px;border-radius:var(--radius-xl)} +.brand-mark.large span{width:14px;height:14px} +.brand b{font-weight:800;letter-spacing:-.04em;font-size:var(--text-base)} + +.version,.api-pill,.nav-count{font:var(--text-3xs) var(--font-mono);color:var(--muted);border:1px solid var(--line);padding:var(--space-1) 7px;border-radius:var(--radius-sm)} + +.top-search{max-width:380px;flex:1;margin-left:auto;margin-right:auto;gap:10px;color:var(--subtle);background:var(--panel);border:1px solid var(--line);border-radius:7px;padding:var(--space-2) 11px} +.top-search:focus-within{border-color:var(--line-focus)} +.top-search input{background:none;border:0;outline:0;color:var(--text);min-width:0;flex:1;font-size:var(--text-sm)} +.top-search kbd{font:var(--text-3xs) var(--font-mono);color:var(--subtle);border:1px solid var(--line);border-radius:4px;padding:var(--space-1) var(--space-1)} + +.top-links{gap:var(--space-5);font-size:var(--text-sm);color:var(--muted)} +.top-links a:hover,.text-button:hover{color:var(--text)} + +.icon-button,.avatar{border:0;background:none;color:var(--muted);display:grid;place-items:center;padding:7px;border-radius:var(--radius-md)} +.icon-button:hover{background:var(--panel-3);color:var(--text)} +.avatar{width:28px;height:28px;background:color-mix(in srgb,var(--accent) 14%,var(--panel-2));color:color-mix(in srgb,var(--accent) 85%,white);font-size:var(--text-3xs);font-weight:700} +.mobile-menu{display:none} + +.body-layout{display:grid;grid-template-columns:240px minmax(0,1fr)} + +/* ── Sidebar ────────────────────────────────────────────────── */ +.sidebar{border-right:1px solid var(--line);min-height:calc(100vh - 68px);padding:var(--space-7) var(--space-4) var(--space-6);display:flex;flex-direction:column;position:sticky;top:68px;height:calc(100vh - 68px)} +.sidebar-intro{padding:0 var(--space-3) var(--space-7);border-bottom:1px solid var(--line);margin-bottom:var(--space-6)} +.sidebar-intro p{font-size:var(--text-3xs);line-height:1.6;color:var(--subtle);margin:var(--space-2) 0 0;max-width:150px} + +.eyebrow,.section-index,.nav-label{font:var(--text-3xs) var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--subtle)} +.accent{color:var(--accent)} + +.nav-group{margin-bottom:var(--space-6)} +.nav-label{display:block;padding:0 var(--space-3);margin-bottom:9px} +.nav-item{width:100%;border:0;background:none;color:var(--muted);text-align:left;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font-size:var(--text-sm);display:flex;align-items:center;gap:10px;transition:.2s} +.nav-item:hover{color:var(--text);background:var(--panel)} +.nav-item.active{color:var(--text);background:var(--panel-3);box-shadow:inset 2px 0 var(--accent)} +.nav-dot{width:4px;height:4px;border-radius:50%;background:var(--subtle)} +.active .nav-dot{background:var(--accent)} +.nav-count{margin-left:auto;padding:2px var(--space-1);color:var(--accent);border-color:var(--line-hover)} +.sidebar-bottom{margin-top:auto;border-top:1px solid var(--line);padding:var(--space-4) var(--space-3) 0} +.status-line{gap:var(--space-2);color:var(--muted);font-size:var(--text-3xs);margin-bottom:7px} +.status-dot{width:6px;height:6px;background:var(--positive);box-shadow:0 0 10px var(--positive);border-radius:50%} +.mono{font-family:var(--font-mono);font-size:var(--text-3xs)} +.muted{color:var(--subtle)} + +/* ── Main column ────────────────────────────────────────────── */ +.main-content{min-width:0} +.breadcrumbs{max-width:1180px;margin:0 auto;padding:var(--space-6) var(--space-9) 0;display:flex;gap:10px;font:var(--text-3xs) var(--font-mono);color:var(--subtle)} +.breadcrumbs strong{color:var(--accent);font-weight:400} + +.hero-section{max-width:1180px;margin:0 auto;padding:var(--space-10) var(--space-9) var(--space-11);display:flex;justify-content:space-between;gap:var(--space-8);min-height:386px} +.hero-copy{max-width:590px} +.hero-copy h1{font-size:var(--text-hero);line-height:1.02;letter-spacing:-.07em;margin:var(--space-4) 0 var(--space-5);font-weight:800} +.hero-copy p{color:var(--muted);font-size:var(--text-base);line-height:1.7;max-width:510px} +.hero-actions{gap:var(--space-3);margin-top:var(--space-7)} + +.button{border:1px solid transparent;border-radius:var(--radius-md);padding:var(--space-2) var(--space-4);color:var(--text);font-size:var(--text-xs);display:inline-flex;align-items:center;gap:var(--space-2);transition:.2s;white-space:nowrap} +.button.primary{background:var(--accent);color:var(--accent-contrast);font-weight:700} +.button.primary:hover{filter:brightness(1.12);transform:translateY(-1px)} +.button.secondary{background:var(--panel-3);border-color:var(--line)} +.button.secondary:hover,.button.hover-state{background:var(--panel-active)} +.button.danger{background:color-mix(in srgb,var(--critical) 12%,transparent);color:var(--critical);border-color:color-mix(in srgb,var(--critical) 18%,transparent)} +.button.ghost{background:transparent;color:var(--muted)} +.button.ghost:hover{color:var(--text);background:var(--panel)} + +.hero-orbit{width:280px;height:225px;position:relative;flex:0 0 280px;margin:var(--space-2) var(--space-8) 0 0} +.orbit{position:absolute;border:1px solid color-mix(in srgb,var(--accent) 12%,var(--line-soft));border-radius:50%;transform:rotate(-22deg)} +.orbit-one{width:270px;height:112px;top:45px;left:0} +.orbit-two{width:215px;height:215px;top:2px;left:28px;transform:rotate(58deg);border-color:color-mix(in srgb,var(--accent) 6%,var(--line-soft))} +.orbit-core{position:absolute;top:71px;right:88px;width:105px;height:83px;border:1px solid color-mix(in srgb,var(--accent) 18%,var(--panel-3));background:color-mix(in srgb,var(--panel-3) 88%,transparent);border-radius:var(--radius-xl);display:flex;align-items:center;justify-content:center;gap:var(--space-2);color:var(--muted);font:var(--text-3xs) var(--font-mono);line-height:1.4;box-shadow:0 0 45px color-mix(in srgb,var(--accent) 12%,transparent)} +.orbit-core b{color:var(--positive);font-weight:400} +.orbit-label{position:absolute;font:var(--text-3xs) var(--font-mono);color:var(--subtle);letter-spacing:.08em} +.orbit-label b{display:block;color:var(--accent);font-weight:400;margin-top:4px} +.label-one{top:13px;right:5px} +.label-two{bottom:4px;left:7px} +.label-three{bottom:31px;right:0} + +.content-grid{max-width:1180px;margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr) 220px;gap:var(--space-10);padding:0 var(--space-9)} +.content-main{min-width:0} + +.section-block{padding:var(--space-9) 0;border-top:1px solid var(--line)} +.section-heading{justify-content:space-between;align-items:flex-start;gap:var(--space-5)} +.section-heading h2{font-size:var(--text-2xl);letter-spacing:-.05em;margin:10px 0 7px} +.section-heading p{margin:0;color:var(--muted);font-size:var(--text-sm)} +.api-pill{white-space:nowrap;margin-top:var(--space-1)} +.text-button{display:inline-flex;gap:var(--space-2);align-items:center;border:0;background:none;color:var(--accent);font-size:var(--text-xs);margin-top:10px} + +/* ── Button showcase ────────────────────────────────────────── */ +.tabs{display:flex;gap:var(--space-5);border-bottom:1px solid var(--line);margin-top:var(--space-7)} +.tab{border:0;background:none;color:var(--subtle);font-size:var(--text-xs);padding:0 0 var(--space-3);border-bottom:1px solid transparent} +.tab.active{color:var(--text);border-color:var(--accent)} +.showcase{margin-top:var(--space-5);background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden} +.showcase-head,.showcase-foot{padding:var(--space-4) var(--space-4);border-bottom:1px solid var(--line);justify-content:space-between} +.button-matrix{padding:7px var(--space-4);overflow-x:auto} +.button-row{min-height:58px;min-width:560px;display:grid;grid-template-columns:90px 1fr 1fr 42px 1fr;align-items:center;gap:var(--space-4);border-bottom:1px solid var(--line-soft)} +.button-row:last-child{border:0} +.row-label{font:var(--text-3xs) var(--font-mono);color:var(--muted)} +.icon-only{padding:var(--space-2)!important;justify-content:center} +.loading{color:var(--muted)!important;background:var(--panel-2)!important;border-color:var(--line)!important} +.spinner{width:12px;height:12px;border:2px solid color-mix(in srgb,var(--muted) 25%,var(--panel-3));border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite} +@keyframes spin{to{transform:rotate(360deg)}} +.showcase-foot{border-top:1px solid var(--line);border-bottom:0;justify-content:flex-start;gap:7px} +.density{border:1px solid transparent;background:none;color:var(--subtle);font:var(--text-3xs) var(--font-mono);padding:var(--space-2) var(--space-2);border-radius:var(--radius-sm)} +.density span{color:var(--subtle)} +.density.active{background:color-mix(in srgb,var(--accent) 10%,var(--panel-3));color:var(--accent)} +.foot-check{margin-left:auto;color:var(--positive);font:var(--text-3xs) var(--font-mono);display:flex;align-items:center;gap:var(--space-1)} + +/* ── Color tokens & forms ───────────────────────────────────── */ +.color-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-2);margin-top:var(--space-5)} +.color-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);padding:var(--space-3);display:grid;grid-template-columns:32px 1fr 16px;align-items:center;gap:9px} +.swatch{width:32px;height:32px;border-radius:var(--radius-md);box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)} +.color-card strong,.color-card span{display:block;font-size:var(--text-xs)} +.color-card .mono{color:var(--subtle);margin-top:4px} +.copy-icon{border:0;background:none;color:var(--subtle);padding:0} +.copy-icon:hover{color:var(--text)} + +.forms-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-5) var(--space-4);margin-top:var(--space-5);background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);padding:var(--space-5)} +.field{display:flex;flex-direction:column;gap:var(--space-2);font-size:var(--text-xs);color:var(--muted)} +.field em{font:var(--text-3xs) var(--font-mono);font-style:normal;color:var(--accent);float:right;text-transform:uppercase} +.field input{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--space-3);color:var(--text);outline:0;font-size:var(--text-sm)} +.field input:focus{border-color:var(--line-focus)} +.field small,.toggle-field small{font-size:var(--text-3xs);color:var(--subtle)} +.input-with-action{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius-sm)} +.input-with-action input{border:0;flex:1;min-width:0;background:transparent} +.input-with-action button{border:0;background:none;color:var(--subtle);padding:0 11px} +.toggle-field{grid-column:1/-1;background:var(--panel-2);border-radius:var(--radius-md);padding:var(--space-3) var(--space-3);justify-content:space-between} +.toggle-field b,.toggle-field small{display:block} +.toggle-field small{margin-top:4px} +.toggle{width:36px;height:20px;border:0;border-radius:var(--radius-pill);background:var(--line);padding:var(--space-1)} +.toggle span{display:block;width:14px;height:14px;border-radius:50%;background:var(--muted);transition:.2s} +.toggle.on{background:var(--accent)} +.toggle.on span{background:var(--accent-contrast);transform:translateX(16px)} +.bottom-section{padding-bottom:var(--space-7)} + +/* ── Code presentation ──────────────────────────────────────── */ +.code-card{background:var(--bg-deep);border:1px solid var(--line);border-radius:var(--radius-lg);margin-top:var(--space-5);overflow:hidden} +.code-head{justify-content:space-between;background:var(--panel);padding:10px var(--space-4);border-bottom:1px solid var(--line)} +.segmented{display:flex;gap:var(--space-1)} +.segmented button,.copy-button{border:0;background:none;color:var(--subtle);font:var(--text-3xs) var(--font-mono);padding:var(--space-1) 7px;border-radius:4px} +.segmented button.selected{background:color-mix(in srgb,var(--accent) 10%,var(--panel-3));color:var(--accent)} +.copy-button{display:flex;gap:var(--space-1);align-items:center} +.copy-button:hover{color:var(--text)} +.code-card pre{margin:0;padding:var(--space-5);font:var(--text-sm)/1.7 var(--font-mono);color:var(--text-code);overflow:auto} +.pink{color:var(--pink)} +.green{color:var(--positive)} +.blue{color:var(--blue)} + +/* ── Right rail & footer ────────────────────────────────────── */ +.right-rail{padding-top:var(--space-9)} +.rail-card{border-top:1px solid var(--line);padding:var(--space-4) 0 var(--space-5)} +.rail-link{display:flex;gap:11px;padding:9px 0;color:var(--muted);font-size:var(--text-xs);text-decoration:none} +.rail-link span{font:var(--text-3xs) var(--font-mono);color:var(--subtle)} +.rail-link.active,.rail-link:hover{color:var(--accent)} +.release{background:linear-gradient(145deg,color-mix(in srgb,var(--accent) 4%,var(--panel)),var(--panel));border:1px solid color-mix(in srgb,var(--accent) 8%,var(--line-soft));border-radius:var(--radius-lg);padding:var(--space-4);margin:10px 0 var(--space-4)} +.release-icon{color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,var(--panel-3));width:31px;height:31px;justify-content:center;border-radius:7px;margin-bottom:var(--space-4)} +.release strong{font-size:var(--text-sm)} +.release p,.rail-copy{color:var(--muted);font-size:var(--text-xs);line-height:1.7;margin:var(--space-2) 0 var(--space-4)} +.full{width:100%;justify-content:center} +.release .text-button{margin-top:0} +footer{max-width:1180px;margin:0 auto;padding:var(--space-7) var(--space-9) var(--space-8);border-top:1px solid var(--line);display:flex;justify-content:space-between;color:var(--subtle);font-size:var(--text-3xs)} + +/* ── Responsive ─────────────────────────────────────────────── */ +@media(max-width:1020px){ + .topbar{padding:0 var(--space-5);gap:var(--space-4)} + .top-links a{display:none} + .body-layout{grid-template-columns:200px minmax(0,1fr)} + .hero-section,.content-grid{padding-left:var(--space-7);padding-right:var(--space-7)} + .content-grid{gap:var(--space-7);grid-template-columns:minmax(0,1fr) 190px} + .hero-orbit{transform:scale(.82);transform-origin:right top;margin-right:0} +} +@media(max-width:760px){ + .topbar{height:60px} + .top-search{order:3;position:absolute;left:18px;right:18px;top:68px;max-width:none;display:none} + .top-links{margin-left:auto} + .mobile-menu{display:grid} + .body-layout{display:block} + .sidebar{display:none;position:fixed;z-index:9;top:60px;left:0;right:0;bottom:0;height:auto;background:color-mix(in srgb,var(--bg) 98%,transparent);border:0} + .menu-open .sidebar{display:flex} + .breadcrumbs{padding:var(--space-5) var(--space-5) 0} + .hero-section{display:block;padding:var(--space-9) var(--space-5) var(--space-10)} + .hero-copy h1{font-size:var(--text-hero)} + .hero-orbit{display:none} + .content-grid{display:block;padding:0 var(--space-5)} + .right-rail{display:none} + .section-block{padding:var(--space-7) 0} + .section-heading{display:block} + .api-pill{display:inline-block;margin-top:var(--space-4)} + .button-row{grid-template-columns:70px 1fr 1fr;gap:var(--space-2)} + .button-row .icon-only,.button-row .loading{display:none} + .color-grid{grid-template-columns:1fr 1fr} + .forms-grid{grid-template-columns:1fr} + .toggle-field{grid-column:auto} + footer{padding:var(--space-6) var(--space-5) var(--space-7);display:block} + footer .mono{display:block;margin-top:var(--space-2)} +} +@media(max-width:450px){ + .version{display:none} + .brand b{font-size:var(--text-md)} + .hero-actions{align-items:stretch;flex-direction:column} + .hero-actions .button{justify-content:center} + .button-row{grid-template-columns:58px 1fr 1fr} + .button{padding:var(--space-2);font-size:var(--text-2xs)} + .showcase-foot{flex-wrap:wrap} + .foot-check{margin-left:0;width:100%;margin-top:var(--space-2)} + .color-card{grid-template-columns:28px 1fr} + .color-card .swatch{width:28px;height:28px} + .color-card .copy-icon{display:none} +} + +/* ── Markdown & CodeMirror surfaces ─────────────────────────── */ +.markdown-card,.editor-card{margin-top:var(--space-5);border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:var(--panel)} +.markdown-toolbar,.editor-tabs{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--line);background:var(--bg-deep)} +.markdown-body{max-width:700px;margin:0 auto;padding:var(--space-8) var(--space-9) var(--space-8);color:var(--text-soft);font-size:var(--text-md);line-height:1.75} +.md-kicker{font:var(--text-3xs) var(--font-mono);letter-spacing:.13em;color:var(--accent)} +.markdown-body h3{color:var(--text);font-size:var(--text-xl);letter-spacing:-.05em;line-height:1.2;margin:var(--space-3) 0 10px} +.markdown-body h4{color:var(--text);font-size:var(--text-md);margin:var(--space-5) 0 7px} +.markdown-body p{margin:0 0 var(--space-4)} +.markdown-body code{font:var(--text-xs) var(--font-mono);color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--panel-3));border:1px solid color-mix(in srgb,var(--accent) 18%,var(--panel-3));border-radius:4px;padding:2px var(--space-1)} +.md-callout{display:flex;gap:var(--space-3);padding:var(--space-3) var(--space-4);margin:var(--space-5) 0;border:1px solid color-mix(in srgb,var(--accent) 25%,var(--panel-3));border-left:2px solid var(--accent);border-radius:var(--radius-md);background:linear-gradient(100deg,color-mix(in srgb,var(--accent) 4%,var(--panel-2)),var(--panel-2))} +.md-callout p{margin:0;font-size:var(--text-sm);line-height:1.6} +.md-callout strong{color:var(--text)} +.callout-mark{color:var(--accent);font-size:var(--text-base)} +.markdown-body ul{margin:0 0 var(--space-5);padding-left:var(--space-5)} +.markdown-body li{padding-left:var(--space-1)} +.markdown-body li::marker{color:var(--accent)} +.md-table{border:1px solid var(--line);border-radius:var(--radius-md);overflow:hidden;font-size:var(--text-xs)} +.md-table>div{display:grid;grid-template-columns:1.1fr 1fr 1.4fr;gap:10px;padding:9px var(--space-3);border-bottom:1px solid var(--line)} +.md-table>div:last-child{border-bottom:0} +.md-table>div:first-child{color:var(--subtle);font:var(--text-3xs) var(--font-mono);text-transform:uppercase;letter-spacing:.08em;background:var(--panel-2)} +.md-table code{font-size:var(--text-3xs);background:none;border:0;padding:0} +.md-accent{color:var(--accent)} + +.editor-card{background:var(--bg-deep);border-color:var(--line);box-shadow:0 16px 35px rgba(0,0,0,.18)} +.editor-tabs{justify-content:flex-start;gap:0;padding:0 var(--space-3);background:var(--panel-2)} +.editor-dot{width:8px;height:8px;border-radius:50%;background:var(--positive);box-shadow:0 0 8px color-mix(in srgb,var(--positive) 60%,transparent);margin-right:var(--space-4)} +.editor-tab{padding:var(--space-3) var(--space-4);color:var(--subtle);font:var(--text-3xs) var(--font-mono);border-right:1px solid var(--line)} +.editor-tab.active{color:var(--text-bright);background:var(--bg-deep);border-top:2px solid var(--accent);padding-top:10px} +.editor-actions{margin-left:auto;color:var(--subtle);font:var(--text-3xs) var(--font-mono);letter-spacing:3px} +.editor-body{display:grid;grid-template-columns:43px 1fr;min-height:218px;background:linear-gradient(90deg,rgba(20,21,30,.7),transparent 16%)} +.line-numbers{padding:var(--space-4) 10px var(--space-4) 0;border-right:1px solid var(--line-soft);text-align:right;color:var(--subtle);font:var(--text-xs)/1.72 var(--font-mono);user-select:none} +.editor-body pre{margin:0;padding:var(--space-4) var(--space-5);font:var(--text-sm)/1.72 var(--font-mono);overflow:auto;color:var(--text-code)} +.cm-comment{color:var(--subtle);font-style:italic} +.cm-keyword{color:var(--pink)} +.cm-variable{color:var(--accent)} +.cm-property{color:var(--blue)} +.cm-string{color:var(--positive)} +.editor-status{display:flex;gap:var(--space-4);padding:var(--space-2) var(--space-4);border-top:1px solid var(--line-soft);background:var(--panel-2);color:var(--subtle);font:var(--text-3xs) var(--font-mono)} +.editor-ready{margin-left:auto;color:var(--positive);display:flex;align-items:center;gap:var(--space-1)} + +@media(max-width:760px){ + .markdown-body{padding:var(--space-6) var(--space-5) var(--space-7)} + .md-table{font-size:var(--text-3xs)} + .editor-body pre{padding:var(--space-4) var(--space-3)} + .editor-status{gap:10px;font-size:var(--text-3xs)} + .editor-status span:nth-child(2){display:none} +} + +/* ── Motion & finishing touches ─────────────────────────────── */ @keyframes rise-in{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}} -@keyframes soft-glow{0%,100%{box-shadow:0 0 0 rgba(166,155,255,0)}50%{box-shadow:0 0 34px rgba(166,155,255,.16)}} +@keyframes soft-glow{0%,100%{box-shadow:0 0 0 rgba(166,155,255,0)}50%{box-shadow:0 0 34px color-mix(in srgb,var(--accent) 16%,transparent)}} @keyframes orbit-drift{from{transform:rotate(-22deg) rotate(0deg)}to{transform:rotate(-22deg) rotate(360deg)}} @keyframes orbit-drift-reverse{from{transform:rotate(58deg) rotate(360deg)}to{transform:rotate(58deg) rotate(0deg)}} @keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}} @keyframes pulse-dot{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.72)}} -.hero-section{animation:rise-in .7s cubic-bezier(.2,.8,.2,1) both}.hero-copy h1{background:linear-gradient(110deg,#f5f3ff 15%,#aaa0ff 55%,#f5f3ff 85%);background-size:220% auto;background-clip:text;-webkit-background-clip:text;color:transparent;animation:shimmer 9s linear infinite}.hero-copy p{animation:rise-in .7s .1s cubic-bezier(.2,.8,.2,1) both}.hero-actions{animation:rise-in .7s .18s cubic-bezier(.2,.8,.2,1) both}.hero-orbit{animation:rise-in .9s .18s cubic-bezier(.2,.8,.2,1) both}.orbit-one{animation:orbit-drift 24s linear infinite}.orbit-two{animation:orbit-drift-reverse 30s linear infinite}.orbit-core{animation:soft-glow 4s ease-in-out infinite}.orbit-label{animation:rise-in .7s .7s both} -.section-block{animation:rise-in .65s .1s cubic-bezier(.2,.8,.2,1) both}.section-block:nth-child(2){animation-delay:.16s}.section-block:nth-child(3){animation-delay:.22s}.section-block:nth-child(4){animation-delay:.28s}.button-row{transition:background .25s ease,transform .25s ease}.button-row:hover{background:rgba(166,155,255,.035);transform:translateX(3px)}.button{position:relative;overflow:hidden}.button:not(:disabled)::after,.copy-button::after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 25%,rgba(255,255,255,.13) 50%,transparent 75%);transform:translateX(-120%);transition:transform .55s ease}.button:hover::after,.copy-button:hover::after{transform:translateX(120%)}.button:focus-visible,.tab:focus-visible,.nav-item:focus-visible,.density:focus-visible,.segmented button:focus-visible,.text-button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.button.primary{box-shadow:0 5px 18px rgba(166,155,255,.18)}.button.primary:active{transform:translateY(1px) scale(.98)}.button.secondary:hover,.button.ghost:hover,.density:hover{border-color:#4a4760}.swatch{transition:transform .3s ease,box-shadow .3s ease}.color-card{transition:transform .25s ease,border-color .25s ease,background .25s ease}.color-card:hover{transform:translateY(-4px);border-color:#514c72;background:#15151e}.color-card:hover .swatch{transform:scale(1.08);box-shadow:0 0 18px color-mix(in srgb,var(--accent) 30%,transparent),inset 0 0 0 1px rgba(255,255,255,.2)}.nav-item{position:relative}.nav-item::after{content:"";position:absolute;right:10px;width:0;height:1px;background:var(--accent);transition:width .25s ease}.nav-item:hover::after{width:12px}.status-dot{animation:pulse-dot 2.5s ease-in-out infinite}.field input,.input-with-action{transition:border-color .25s ease,box-shadow .25s ease,background .25s ease}.field input:hover,.input-with-action:hover{background:#191923;border-color:#393847}.field input:focus,.input-with-action:focus-within{box-shadow:0 0 0 3px rgba(166,155,255,.08),0 0 20px rgba(166,155,255,.06)}.toggle{transition:background .25s ease,transform .2s ease}.toggle:active{transform:scale(.94)}.release{transition:transform .3s ease,box-shadow .3s ease}.release:hover{transform:translateY(-4px);box-shadow:0 14px 38px rgba(0,0,0,.2),0 0 25px rgba(166,155,255,.06)}.release-icon{transition:transform .4s cubic-bezier(.2,.8,.2,1)}.release:hover .release-icon{transform:rotate(-8deg) scale(1.08)}.code-card{transition:border-color .3s ease,box-shadow .3s ease}.code-card:hover{border-color:#413d5c;box-shadow:0 15px 40px rgba(0,0,0,.14)}.copy-button{position:relative;overflow:hidden}.top-search{transition:border-color .25s ease,box-shadow .25s ease}.top-search:hover{border-color:#393847}.top-search:focus-within{box-shadow:0 0 0 3px rgba(166,155,255,.06)} -@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}.hero-copy h1{background:none;color:var(--text)}} +.hero-section{animation:rise-in .7s cubic-bezier(.2,.8,.2,1) both} +.hero-copy h1{background:linear-gradient(110deg,var(--text-bright) 15%,var(--accent) 55%,var(--text-bright) 85%);background-size:220% auto;background-clip:text;-webkit-background-clip:text;color:transparent;animation:shimmer 9s linear infinite} +.hero-copy p{animation:rise-in .7s .1s cubic-bezier(.2,.8,.2,1) both} +.hero-actions{animation:rise-in .7s .18s cubic-bezier(.2,.8,.2,1) both} +.hero-orbit{animation:rise-in .9s .18s cubic-bezier(.2,.8,.2,1) both} +.orbit-one{animation:orbit-drift 24s linear infinite} +.orbit-two{animation:orbit-drift-reverse 30s linear infinite} +.orbit-core{animation:soft-glow 4s ease-in-out infinite} +.orbit-label{animation:rise-in .7s .7s both} +.section-block{animation:rise-in .65s .1s cubic-bezier(.2,.8,.2,1) both} +.section-block:nth-child(2){animation-delay:.16s} +.section-block:nth-child(3){animation-delay:.22s} +.section-block:nth-child(4){animation-delay:.28s} +.button-row{transition:background .25s ease,transform .25s ease} +.button-row:hover{background:color-mix(in srgb,var(--accent) 4%,transparent);transform:translateX(3px)} +.button{position:relative;overflow:hidden} +.button:not(:disabled)::after,.copy-button::after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 25%,rgba(255,255,255,.13) 50%,transparent 75%);transform:translateX(-120%);transition:transform .55s ease} +.button:hover::after,.copy-button:hover::after{transform:translateX(120%)} +.button:focus-visible,.tab:focus-visible,.nav-item:focus-visible,.density:focus-visible,.segmented button:focus-visible,.text-button:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)} +.button.primary{box-shadow:0 5px 18px color-mix(in srgb,var(--accent) 18%,transparent)} +.button.primary:active{transform:translateY(1px) scale(.98)} +.button.secondary:hover,.button.ghost:hover,.density:hover{border-color:var(--line-hover)} +.swatch{transition:transform .3s ease,box-shadow .3s ease} +.color-card{transition:transform .25s ease,border-color .25s ease,background .25s ease} +.color-card:hover{transform:translateY(-4px);border-color:var(--line-hover);background:var(--panel-hover)} +.color-card:hover .swatch{transform:scale(1.08);box-shadow:0 0 18px color-mix(in srgb,var(--accent) 30%,transparent),inset 0 0 0 1px rgba(255,255,255,.2)} +.nav-item{position:relative} +.nav-item::after{content:"";position:absolute;right:10px;width:0;height:1px;background:var(--accent);transition:width .25s ease} +.nav-item:hover::after{width:12px} +.status-dot{animation:pulse-dot 2.5s ease-in-out infinite} +.field input,.input-with-action{transition:border-color .25s ease,box-shadow .25s ease,background .25s ease} +.field input:hover,.input-with-action:hover{background:var(--panel-hover);border-color:var(--line-hover)} +.field input:focus,.input-with-action:focus-within{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 8%,transparent),0 0 20px color-mix(in srgb,var(--accent) 6%,transparent)} +.toggle{transition:background .25s ease,transform .2s ease} +.toggle:active{transform:scale(.94)} +.release{transition:transform .3s ease,box-shadow .3s ease} +.release:hover{transform:translateY(-4px);box-shadow:0 14px 38px rgba(0,0,0,.2),0 0 25px color-mix(in srgb,var(--accent) 6%,transparent)} +.release-icon{transition:transform .4s cubic-bezier(.2,.8,.2,1)} +.release:hover .release-icon{transform:rotate(-8deg) scale(1.08)} +.code-card{transition:border-color .3s ease,box-shadow .3s ease} +.code-card:hover{border-color:var(--line-hover);box-shadow:0 15px 40px rgba(0,0,0,.14)} +.copy-button{position:relative;overflow:hidden} +.top-search{transition:border-color .25s ease,box-shadow .25s ease} +.top-search:hover{border-color:var(--line-hover)} +.top-search:focus-within{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 6%,transparent)} -/* Refined navigation rail: editorial, flat, and easy to scan. */ -.sidebar{padding:22px 0 18px;background:linear-gradient(180deg,#0d0d13 0%,#0b0b10 76%)} -.sidebar-heading{display:flex;align-items:center;justify-content:space-between;padding:0 20px 20px;border-bottom:1px solid var(--line)} -.sidebar-library{display:flex;align-items:center;gap:8px;color:var(--text);font:500 11px var(--mono);letter-spacing:.05em;text-transform:uppercase}.sidebar-library svg{color:var(--accent)} -.sidebar-collapse{border:0;background:none;color:var(--subtle);font:11px var(--mono);padding:4px 0}.sidebar-collapse:hover{color:var(--text)} -.sidebar-intro{padding:20px 20px 22px;margin:0;border-bottom:1px solid var(--line)}.sidebar-intro p{max-width:180px;margin-top:8px} -.sidebar nav{padding-top:22px}.nav-group{margin-bottom:24px}.nav-label{padding:0 20px;margin-bottom:8px;color:#555462;font-size:9px}.nav-item{position:relative;width:100%;border-radius:0;padding:9px 20px;gap:11px;letter-spacing:-.01em}.nav-item:hover{background:#13131b}.nav-item.active{background:linear-gradient(90deg,rgba(166,155,255,.15),rgba(166,155,255,.035));box-shadow:inset 2px 0 var(--accent);color:#f5f3ff}.nav-item.active::before{content:"";position:absolute;right:20px;width:5px;height:5px;border-radius:50%;background:var(--accent);box-shadow:0 0 10px rgba(166,155,255,.8)}.nav-item::after{display:none}.nav-glyph{width:13px;color:#555462;font:14px var(--mono);line-height:1;text-align:center}.nav-item.active .nav-glyph{color:var(--accent)}.nav-count{border:0;padding:0;margin-left:auto;color:#716aab;background:none;font-size:10px}.sidebar-bottom{padding:16px 20px 0}.sidebar-bottom .status-line{font-size:9px} -@media(max-width:760px){.sidebar{padding-top:18px}.sidebar-heading{padding-left:20px;padding-right:20px}.sidebar-intro{padding-top:18px}.sidebar nav{padding-top:20px}.nav-item{padding-top:10px;padding-bottom:10px}} +@media(prefers-reduced-motion:reduce){ + *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important} + .hero-copy h1{background:none;color:var(--text)} +} + +/* ── Sidebar refinement: editorial, flat, easy to scan ──────── */ +.sidebar{padding:var(--space-5) 0 var(--space-4);background:linear-gradient(180deg,var(--bg-deep) 0%,var(--bg) 76%)} +.sidebar-heading{display:flex;align-items:center;justify-content:space-between;padding:0 var(--space-5) var(--space-5);border-bottom:1px solid var(--line)} +.sidebar-library{display:flex;align-items:center;gap:var(--space-2);color:var(--text);font:500 var(--text-xs) var(--font-mono);letter-spacing:.05em;text-transform:uppercase} +.sidebar-library svg{color:var(--accent)} +.sidebar-collapse{border:0;background:none;color:var(--subtle);font:var(--text-xs) var(--font-mono);padding:4px 0} +.sidebar-collapse:hover{color:var(--text)} +.sidebar-intro{padding:var(--space-5) var(--space-5) var(--space-5);margin:0;border-bottom:1px solid var(--line)} +.sidebar-intro p{max-width:180px;margin-top:var(--space-2)} +.sidebar nav{padding-top:var(--space-5)} +.nav-group{margin-bottom:var(--space-5)} +.nav-label{padding:0 var(--space-5);margin-bottom:var(--space-2);color:var(--subtle);font-size:var(--text-3xs)} +.nav-item{position:relative;width:100%;border-radius:0;padding:9px var(--space-5);gap:11px;letter-spacing:-.01em} +.nav-item:hover{background:var(--panel-hover)} +.nav-item.active{background:linear-gradient(90deg,color-mix(in srgb,var(--accent) 15%,transparent),color-mix(in srgb,var(--accent) 4%,transparent));box-shadow:inset 2px 0 var(--accent);color:var(--text-bright)} +.nav-item.active::before{content:"";position:absolute;right:var(--space-5);width:5px;height:5px;border-radius:50%;background:var(--accent);box-shadow:0 0 10px color-mix(in srgb,var(--accent) 80%,transparent)} +.nav-item::after{display:none} +.nav-glyph{width:13px;color:var(--subtle);font:var(--text-md) var(--font-mono);line-height:1;text-align:center} +.nav-item.active .nav-glyph{color:var(--accent)} +.nav-count{border:0;padding:0;margin-left:auto;color:color-mix(in srgb,var(--accent) 60%,var(--subtle));background:none;font-size:var(--text-3xs)} +.sidebar-bottom{padding:var(--space-4) var(--space-5) 0} +.sidebar-bottom .status-line{font-size:var(--text-3xs)} + +@media(max-width:760px){ + .sidebar{padding-top:var(--space-4)} + .sidebar-heading{padding-left:var(--space-5);padding-right:var(--space-5)} + .sidebar-intro{padding-top:var(--space-4)} + .sidebar nav{padding-top:var(--space-5)} + .nav-item{padding-top:10px;padding-bottom:10px} +} diff --git a/src/index.css b/src/index.css index 888aed3..a905045 100644 --- a/src/index.css +++ b/src/index.css @@ -1,3 +1,4 @@ @import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700;800&display=swap'); -:root { font-family:'Manrope',sans-serif; color:#f1f0f7; background:#0b0b10; font-synthesis:none; text-rendering:optimizeLegibility; -webkit-font-smoothing:antialiased; } +@import './tokens.css'; +:root { font-family:var(--font-sans); color:var(--text); background:var(--bg); font-synthesis:none; text-rendering:optimizeLegibility; -webkit-font-smoothing:antialiased; } * { box-sizing:border-box; } html { scroll-behavior:smooth; } body { margin:0; min-width:320px; } button,input { font:inherit; } button { cursor:pointer; } diff --git a/vite.config.ts b/vite.config.ts index 9982072..d0849a0 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,4 +4,9 @@ import { defineConfig } from 'vite' // https://vite.dev/config/ export default defineConfig({ plugins: [react()], + server: { + host: '0.0.0.0', + port: 5173, + allowedHosts: ['.preview.k6n.net'], + }, })