/* ==========================================================================
   api.css — scoped styles for /api.html (Entwickler-Einstieg)
   Canon rule 4: scoped override file, never a blind edit of sections.css.
   Every colour is a DESIGN-TOKENS-AIOOS value. No new hexes.
   Reuses from sections.css: .container .section .footer .foot-* .ro
   ========================================================================== */

:root{
  --blue:#0084FF;
  --blue-deep:#0B63E0;
  --brand-royal:#2D6CF6;
  --brand-cyan:#22D3EE;
  --brand-teal:#14B8A6;
  --ink:#0A1222;
  --ink-soft:#1E2D49;
  --ink-2:#46546B;
  --muted-2:#8395AE;
  --navy-panel:#0F1B33;
  --navy-raised:#1A2C54;
  --on-navy:#EAF2FF;
  --on-navy-soft:#C7D3E8;
  --on-navy-mut:#93A5C4;
  --font-head:'Fustat',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --font-body:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --font-mono:ui-monospace,'SF Mono','Cascadia Mono','Segoe UI Mono',Consolas,monospace;
}

*{box-sizing:border-box; margin:0; padding:0}
html{scroll-behavior:smooth}
body{
  font-family:var(--font-body);
  color:var(--ink);                 /* explicit ink — never inherit */
  background:linear-gradient(175deg,#F6F9FF,#EFF5FF,#F2FAFB);
  background-attachment:fixed;
  -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;
  min-height:100vh;
}
.page{position:relative; width:100%; overflow-x:clip}

/* ---------- navbar (mirrors the landing, same measurements) ---------- */
.nav-shell{position:sticky; top:30px; z-index:40; display:flex; justify-content:center; padding:0 20px}
/* MUST stay scoped to .nav-shell: a bare nav{} also hits <nav class="foot-legal">
   in the footer and paints glass on it (caught in the 1440 render, 2026-08-11). */
.nav-shell nav{
  width:fit-content; display:flex; align-items:center; gap:38px;
  padding:11px 11px 11px 26px; border-radius:16px;
  background:rgba(255,255,255,.3); backdrop-filter:blur(50px); -webkit-backdrop-filter:blur(50px);
  border:1px solid rgba(0,0,0,.1);
  box-shadow:inset 0 4px 4px 0 rgba(255,255,255,.25), 0 18px 50px -22px rgba(20,50,110,.35);
}
.brand{font-family:var(--font-head); font-weight:800; font-size:22px; letter-spacing:-.04em; color:var(--ink); display:flex; align-items:center; gap:9px; text-decoration:none}
.brand .mk{width:33px; height:26px; display:block; filter:drop-shadow(0 4px 8px rgba(0,132,255,.35))}
.brand .mk svg{display:block; width:100%; height:100%}
.nav-links{display:flex; gap:30px}
.nav-links a{color:#33405A; text-decoration:none; font-size:15px; font-weight:500; letter-spacing:-.01em; transition:color .2s}
.nav-links a:hover,.nav-links a[aria-current="page"]{color:var(--ink)}
.nav-login{font-size:15px; font-weight:600; color:#33405A; text-decoration:none; letter-spacing:-.01em;
  display:inline-flex; align-items:center; gap:7px; transition:color .2s}
.nav-login:hover{color:var(--ink)}
.nav-login svg{opacity:.75}
.signup{
  display:flex; align-items:center; gap:9px; font-family:var(--font-body); font-weight:600; font-size:15px;
  color:var(--ink); text-decoration:none; padding:10px 16px; border-radius:11px; cursor:pointer;
  background:rgba(255,255,255,.55); border:1px solid rgba(0,0,0,.08);
  box-shadow:inset 0 2px 3px 0 rgba(255,255,255,.6); transition:transform .2s, background .2s;
}
.signup:hover{transform:translateY(-1px); background:rgba(255,255,255,.8)}
.signup .arw{width:20px;height:20px;border-radius:50%;background:var(--ink);display:grid;place-items:center}
@media(max-width:900px){ .nav-links{display:none} .nav-shell nav{gap:16px; padding:10px 10px 10px 18px} }

/* ---------- language ---------- */
/* One page, two languages. Default is German; the switch flips <html data-lang>.
   Both trees ship in the HTML so there is no flash and no second request. */
html[data-lang="en"] .l-de{display:none}
html[data-lang="de"] .l-en{display:none}

.langsw{display:flex; gap:2px; padding:3px; border-radius:100px;
  background:rgba(36,74,140,.055); border:1px solid rgba(36,74,140,.1)}
.langsw button{
  font-family:var(--font-body); font-size:12px; font-weight:800; letter-spacing:.04em;
  color:#33405A; background:transparent; border:0; padding:5px 11px; border-radius:100px;
  cursor:pointer; transition:color .2s, background .2s;
}
.langsw button:hover{color:var(--ink)}
.langsw button[aria-pressed="true"]{color:#fff; background:var(--ink)}

/* ---------- page shell ---------- */
.dv{max-width:960px; margin:0 auto; padding:0 40px}
@media(max-width:640px){ .dv{padding:0 20px} }

.dv-hero{padding:88px 0 20px}
.eyebrow{
  font-family:var(--font-body); font-size:10.5px; font-weight:800;
  letter-spacing:.12em; text-transform:uppercase; color:var(--blue); margin-bottom:14px;
}
.dv-hero h1{
  font-family:var(--font-head); font-weight:800; letter-spacing:-.035em;
  font-size:clamp(38px,5.4vw,60px); line-height:1.04; color:var(--ink); text-wrap:balance;
}
.dv-hero h1 em{font-family:'Instrument Serif',Georgia,serif; font-style:italic; font-weight:400; letter-spacing:-.01em}
.dv-hero p.sub{
  margin-top:20px; max-width:60ch; font-size:18px; line-height:1.62; color:var(--ink-2);
}

/* fact strip */
.facts{
  display:grid; grid-template-columns:repeat(auto-fit,minmax(168px,1fr)); gap:1px;
  margin:40px 0 8px; border-radius:18px; overflow:hidden;
  background:rgba(36,74,140,.1);
  box-shadow:0 30px 70px -46px rgba(20,50,110,.5);
}
.facts div{background:rgba(255,255,255,.72); backdrop-filter:blur(20px); padding:16px 18px}
.facts dt{font-size:10.5px; font-weight:800; letter-spacing:.1em; text-transform:uppercase; color:var(--muted-2); margin-bottom:5px}
.facts dd{font-family:var(--font-mono); font-size:13.5px; color:var(--ink-soft); word-break:break-all}

/* ---------- sections ---------- */
.dv-sec{padding:64px 0 0}
.dv-sec > h2{
  font-family:var(--font-head); font-weight:800; letter-spacing:-.025em;
  font-size:clamp(26px,3vw,33px); color:var(--ink); margin-bottom:10px;
}
.dv-sec > p.lead{font-size:16.5px; line-height:1.65; color:var(--ink-2); max-width:62ch; margin-bottom:26px}
.dv-sec h3{
  font-family:var(--font-head); font-weight:800; font-size:19px; letter-spacing:-.02em;
  color:var(--ink); margin:34px 0 8px;
}
.dv-sec p{font-size:15.5px; line-height:1.66; color:var(--ink-2); max-width:62ch}
.dv-sec p + p{margin-top:12px}
.dv-sec a{color:var(--blue-deep); text-decoration:none; border-bottom:1px solid rgba(11,99,224,.28)}
.dv-sec a:hover{border-bottom-color:var(--blue-deep)}

/* numbered steps — the order is real: key, then session, then connect */
.steps{counter-reset:st; display:flex; flex-direction:column; gap:34px; margin-top:6px}
.step{position:relative; padding-left:52px}
.step::before{
  counter-increment:st; content:counter(st);
  position:absolute; left:0; top:1px; width:32px; height:32px; border-radius:50%;
  display:grid; place-items:center;
  font-family:var(--font-head); font-weight:800; font-size:15px; color:#fff;
  background:linear-gradient(150deg,var(--brand-royal),var(--brand-cyan));
  box-shadow:0 16px 34px -14px rgba(45,108,246,.75);
}
.step h3{margin-top:0}
@media(max-width:640px){ .step{padding-left:0} .step::before{position:static; margin-bottom:12px} }

/* ---------- code ---------- */
.code{
  margin-top:16px; border-radius:15px; overflow:hidden;
  background:var(--navy-panel);
  border:1px solid rgba(120,190,255,.18);
  box-shadow:0 30px 70px -44px rgba(20,50,110,.55);
}
.code-bar{
  display:flex; align-items:center; gap:10px; padding:9px 12px 9px 15px;
  background:linear-gradient(180deg,var(--navy-raised),var(--navy-panel));
  border-bottom:1px solid rgba(255,255,255,.08);
}
.code-bar .lbl{
  font-family:var(--font-body); font-size:10.5px; font-weight:800;
  letter-spacing:.1em; text-transform:uppercase; color:var(--on-navy-mut); margin-right:auto;
}
.tabs{display:flex; gap:4px}
.tab{
  font-family:var(--font-body); font-size:12px; font-weight:700; color:var(--on-navy-mut);
  background:transparent; border:0; padding:5px 11px; border-radius:100px; cursor:pointer;
  transition:color .2s, background .2s;
}
.tab:hover{color:var(--on-navy)}
.tab[aria-selected="true"]{color:var(--on-navy); background:rgba(255,255,255,.1)}
.copy{
  font-family:var(--font-body); font-size:12px; font-weight:700; color:var(--on-navy-mut);
  background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.1);
  padding:5px 11px; border-radius:100px; cursor:pointer; transition:color .2s, background .2s;
}
.copy:hover{color:var(--on-navy); background:rgba(255,255,255,.14)}
.code pre{margin:0; padding:17px 18px; overflow-x:auto}
.code code{
  font-family:var(--font-mono); font-size:13.5px; line-height:1.62;
  color:var(--on-navy); white-space:pre; display:block;
}
.code .c{color:var(--on-navy-mut)}                 /* comment  */
.code .s{color:#9FD0FF}                            /* string   */
.code .k{color:var(--brand-cyan)}                  /* keyword  */
.code [hidden]{display:none}

/* inline code on light ground */
p code, li code, td code{
  font-family:var(--font-mono); font-size:.88em;
  background:rgba(36,74,140,.055); border:1px solid rgba(36,74,140,.1);
  padding:1px 6px; border-radius:6px; color:var(--ink-soft);
}

/* ---------- tables ---------- */
.tw{margin-top:18px; overflow-x:auto; border-radius:15px; border:1px solid rgba(36,74,140,.1); background:rgba(255,255,255,.72)}
table{width:100%; border-collapse:collapse; min-width:520px}
th{
  text-align:left; font-size:10.5px; font-weight:800; letter-spacing:.1em; text-transform:uppercase;
  color:var(--muted-2); padding:13px 16px; border-bottom:1px solid rgba(36,74,140,.1);
}
td{padding:13px 16px; font-size:14.5px; line-height:1.55; color:var(--ink-2); border-bottom:1px solid rgba(36,74,140,.07); vertical-align:top}
tr:last-child td{border-bottom:0}
td:first-child{color:var(--ink-soft); font-weight:600; white-space:nowrap}
td .req{display:block; font-size:11px; font-weight:800; letter-spacing:.06em; text-transform:uppercase; color:var(--blue-deep); margin-top:3px}
td .opt{display:block; font-size:11px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted-2); margin-top:3px}
td.st{font-family:var(--font-mono); font-weight:700; color:var(--ink-soft)}

/* ---------- honest note (canon C1: the interface never lies) ---------- */
.note{
  margin-top:22px; padding:16px 18px; border-radius:15px;
  background:rgba(255,255,255,.72); backdrop-filter:blur(20px);
  border:1px solid rgba(36,74,140,.1); border-left:3px solid var(--brand-teal);
}
.note strong{color:var(--ink-soft)}
.note p{font-size:14.5px; color:var(--ink-2); max-width:none}

/* ---------- resource cards ---------- */
.res{display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:14px; margin-top:8px}
.res a{
  display:block; padding:20px; border-radius:20px; text-decoration:none; border:1px solid rgba(36,74,140,.1);
  background:rgba(255,255,255,.72); backdrop-filter:blur(20px);
  box-shadow:inset 0 2px 3px rgba(255,255,255,.6), 0 30px 70px -50px rgba(20,50,110,.5);
  transition:transform .2s;
}
.res a:hover{transform:translateY(-2px)}
.res h4{font-family:var(--font-head); font-weight:800; font-size:16.5px; letter-spacing:-.02em; color:var(--ink); margin-bottom:6px}
.res p{font-size:14px; line-height:1.55; color:var(--ink-2); max-width:none}
.res .arrow{display:inline-block; margin-top:12px; font-size:13.5px; font-weight:700; color:var(--blue-deep)}

.dv-end{padding:0 0 96px}

/* focus — visible, token blue */
a:focus-visible,button:focus-visible{outline:2px solid var(--blue); outline-offset:3px; border-radius:6px}

/* motion: transform/opacity only, opt-in */
@media (prefers-reduced-motion:no-preference){
  .rise{animation:dvRise .7s cubic-bezier(.2,.75,.25,1) both}
  .rise.d1{animation-delay:.06s}.rise.d2{animation-delay:.13s}.rise.d3{animation-delay:.2s}
}
@keyframes dvRise{from{opacity:0; transform:translateY(14px)} to{opacity:1; transform:none}}
