/* ============================================================ Keysat docs — shared layout. Inline-only deps allowed. ============================================================ */ @import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap'); :root { --navy-950:#0E1F33; --navy-900:#142A47; --navy-800:#1E3A5F; --navy-700:#2A4A75; --navy-100:#E4EAF1; --cream-50:#FBF9F2; --cream-100:#F5F1E8; --cream-200:#EDE7D7; --gold-700:#8A6F3D; --gold-500:#BFA068; --gold-400:#D4B985; --ink-900:#0E1F33; --ink-700:#2C3E54; --ink-500:#5A6B7F; --ink-400:#7E8C9D; --success:#2D7A5F; --success-bg:#E3F0EA; --warning:#B8861F; --warning-bg:#F7EFD7; --danger:#B23A3A; --danger-bg:#F4E0E0; --border-1:rgba(14,31,51,0.12); --border-2:rgba(14,31,51,0.20); --font-display:'Manrope','Helvetica Neue',Arial,sans-serif; --font-body:'Inter','Helvetica Neue',Arial,sans-serif; --font-mono:'JetBrains Mono',ui-monospace,'SF Mono',Menlo,monospace; } *{box-sizing:border-box} html,body{margin:0;padding:0} body{ font-family:var(--font-body); color:var(--ink-900); background:var(--cream-100); background-image: radial-gradient(rgba(14,31,51,0.022) 1px, transparent 1px), radial-gradient(rgba(138,111,61,0.020) 1px, transparent 1px); background-size:3px 3px, 7px 7px; -webkit-font-smoothing:antialiased; } a{color:var(--navy-800); text-decoration:none} a:hover{text-decoration:underline; text-decoration-thickness:1.5px; text-underline-offset:3px} /* Top nav */ .topnav{ position:sticky; top:0; z-index:10; background:rgba(245,241,232,0.9); backdrop-filter:blur(10px); border-bottom:1px solid var(--border-1); padding:14px 28px; display:flex; align-items:center; gap:18px; } .topnav .brand{ display:flex; align-items:center; gap:10px; font-family:var(--font-display); font-weight:500; color:var(--navy-900); font-size:14px; letter-spacing:0.28em; text-transform:uppercase; } .topnav .brand img{width:26px; height:26px} .topnav .docs-tag{ font-size:11px; font-weight:700; letter-spacing:0.18em; text-transform:uppercase; color:var(--gold-700); padding-left:10px; border-left:1px solid var(--border-2); } .topnav nav{margin-left:auto; display:flex; gap:22px; font-size:13.5px; color:var(--ink-700)} .topnav nav a{color:var(--ink-700)} .topnav nav a:hover{color:var(--navy-900); text-decoration:none} .topnav nav a.active{color:var(--navy-900); font-weight:600} /* Layout */ .layout{ display:grid; grid-template-columns:240px 1fr 220px; max-width:1280px; margin:0 auto; gap:32px; padding:28px 28px 64px; } aside.side{ position:sticky; top:74px; align-self:start; font-size:13.5px; max-height:calc(100vh - 90px); overflow:auto; padding-right:8px; } aside.side .group{margin-bottom:18px} aside.side .group .glabel{ font-size:10.5px; font-weight:700; letter-spacing:0.16em; text-transform:uppercase; color:var(--gold-700); margin:6px 8px 6px; } aside.side a{ display:block; padding:5px 10px; border-radius:5px; color:var(--ink-700); line-height:1.4; } aside.side a:hover{background:var(--cream-200); text-decoration:none} aside.side a.active{background:var(--navy-800); color:var(--cream-50); font-weight:600} main.prose{min-width:0} .prose .crumb{font-size:12px; color:var(--ink-500); margin-bottom:8px; letter-spacing:0.04em} .prose h1{ font-family:var(--font-display); font-weight:500; font-size:38px; letter-spacing:-0.022em; color:var(--navy-950); margin:0 0 8px; line-height:1.1; } .prose .lead{ font-size:17px; line-height:1.55; color:var(--ink-700); margin:0 0 24px; max-width:640px; } .prose h2{ font-family:var(--font-display); font-weight:700; font-size:24px; letter-spacing:-0.015em; color:var(--navy-950); margin:36px 0 12px; padding-top:24px; border-top:1px solid var(--border-1); } .prose h3{ font-family:var(--font-display); font-weight:700; font-size:17px; color:var(--navy-950); margin:22px 0 8px; letter-spacing:-0.01em; } .prose p{font-size:15px; line-height:1.65; color:var(--ink-700); margin:0 0 14px; max-width:680px} .prose ul, .prose ol{padding-left:22px; margin:0 0 14px; max-width:680px} .prose li{font-size:15px; line-height:1.65; color:var(--ink-700); margin-bottom:4px} .prose code{ font-family:var(--font-mono); font-size:13px; background:var(--cream-200); padding:2px 6px; border-radius:4px; color:var(--navy-900); } .prose strong{color:var(--navy-950); font-weight:700} .prose em{color:var(--ink-700)} .prose a{color:var(--navy-800); font-weight:500} pre.code{ background:var(--navy-950); color:var(--cream-50); padding:18px 22px; border-radius:10px; overflow-x:auto; font-family:var(--font-mono); font-size:13px; line-height:1.7; margin:14px 0 20px; border:1px solid var(--navy-900); max-width:680px; } pre.code .c{color:rgba(245,241,232,0.45)} pre.code .k{color:var(--gold-400)} pre.code .s{color:#d4b985} pre.code .f{color:var(--cream-50)} pre.code .n{color:#a6b7cf} pre.code .p{color:rgba(245,241,232,0.55)} .callout{ border:1px solid var(--border-1); border-left:3px solid var(--gold-500); background:var(--cream-50); border-radius:8px; padding:14px 16px; margin:14px 0 22px; display:flex; gap:12px; align-items:flex-start; max-width:680px; } .callout [data-lucide]{ color:var(--gold-700); width:18px; height:18px; flex-shrink:0; margin-top:2px; } .callout p{margin:0; font-size:14px} .callout strong{color:var(--navy-950); font-weight:700} .callout.warn{border-left-color:var(--warning); background:var(--warning-bg)} .callout.warn [data-lucide]{color:var(--warning)} .callout.danger{border-left-color:var(--danger); background:var(--danger-bg)} .callout.danger [data-lucide]{color:var(--danger)} /* Right TOC */ aside.toc{ position:sticky; top:74px; align-self:start; font-size:12.5px; border-left:1px solid var(--border-1); padding:8px 0 8px 18px; max-height:calc(100vh - 90px); overflow:auto; } aside.toc .label{ font-size:10.5px; font-weight:700; letter-spacing:0.16em; text-transform:uppercase; color:var(--gold-700); margin-bottom:10px; } aside.toc a{ display:block; padding:4px 0; color:var(--ink-500); line-height:1.4; } aside.toc a:hover{color:var(--navy-900); text-decoration:none} aside.toc a.active{ color:var(--navy-900); font-weight:600; border-left:2px solid var(--gold-500); margin-left:-20px; padding-left:18px; } /* Tables in prose */ table.t{ width:100%; border-collapse:separate; border-spacing:0; background:var(--cream-50); border:1px solid var(--border-1); border-radius:10px; overflow:hidden; margin:14px 0 20px; max-width:680px; } table.t th{ text-align:left; font-size:11px; font-weight:700; letter-spacing:0.12em; text-transform:uppercase; color:var(--ink-500); padding:12px 16px; background:var(--cream-100); border-bottom:1px solid var(--border-1); } table.t td{ padding:12px 16px; border-bottom:1px solid var(--border-1); font-size:13.5px; color:var(--ink-700); vertical-align:top; } table.t tr:last-child td{border-bottom:0} table.t code{font-size:12.5px} /* Cards inside prose for "what's next" links */ .next-grid{ display:grid; grid-template-columns:1fr 1fr; gap:16px; margin:18px 0 24px; max-width:680px; } .next-card{ display:block; background:var(--cream-50); border:1px solid var(--border-1); border-radius:10px; padding:18px; transition:all 120ms; } .next-card:hover{ border-color:var(--border-2); text-decoration:none; background:var(--cream-100); } .next-card .eyebrow{ font-size:10.5px; font-weight:700; letter-spacing:0.18em; text-transform:uppercase; color:var(--gold-700); margin-bottom:6px; display:block; } .next-card h4{ font-family:var(--font-display); font-weight:700; font-size:15px; margin:0 0 4px; letter-spacing:-0.01em; color:var(--navy-950); } .next-card p{ font-size:13px; color:var(--ink-700); line-height:1.5; margin:0; max-width:none; } /* Code-language tabs (for SDK examples) */ .lang-tabs{ display:flex; gap:0; margin:14px 0 0; max-width:680px; border-bottom:1px solid var(--border-1); } .lang-tabs button{ background:transparent; border:0; cursor:pointer; font-family:var(--font-body); font-weight:500; font-size:13px; color:var(--ink-500); padding:10px 16px; border-bottom:2px solid transparent; margin-bottom:-1px; } .lang-tabs button:hover{color:var(--navy-900)} .lang-tabs button.active{color:var(--navy-900); font-weight:600; border-bottom-color:var(--gold-500)} @media (max-width: 980px){ .layout{grid-template-columns:1fr; gap:18px; padding:18px} aside.side, aside.toc{position:static; max-height:none; overflow:visible; border:0; padding:0} aside.toc{display:none} .topnav nav{display:none} .next-grid{grid-template-columns:1fr} }