/* ═══════════════════════════════════════════
   alpu.eu — Startseite
   Schriften lokal gehostet, keine Verbindung zu Google.
   Lizenz beider: SIL Open Font License 1.1, siehe fonts/OFL-*.txt
   Layout ist fluid: clamp() für Größen/Abstände, auto-fit-Raster für
   die Spalten, Media Queries nur für Menü, Karten und Zeitleiste.
═══════════════════════════════════════════ */

/* Schriften lokal gehostet — keine Verbindung zu Google.
   Sora ist eine Variable Font: eine Datei deckt 400–700 ab.
   Lizenz beider: SIL Open Font License 1.1, siehe fonts/OFL-*.txt */
@font-face{font-family:'Sora';font-style:normal;font-weight:400 700;font-display:swap;
  src:url('fonts/sora-var.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;
  src:url('fonts/ibm-plex-mono-400.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
/* Ein 500er-Schnitt von IBM Plex Mono war deklariert, wurde aber von keinem
   Element angefordert (alle .mono-Elemente liegen bei 400) — Datei und Regel
   deshalb entfernt. Falls später ein kräftigerer Mono-Schnitt gebraucht wird,
   muss er wieder mitgeliefert und irgendwo per font-weight:500 gesetzt werden. */

:root{
  --bg:#0b1a1c; --surface:#0f2427; --surface-2:#0d2023;
  --ink:#e8f0ee; --ink-70:rgba(232,240,238,.68); --ink-60:rgba(232,240,238,.58);
  --ink-50:rgba(232,240,238,.5); --line:rgba(232,240,238,.09);
  --accent:#c3e84f; --warn:#e5b878;
  --pad:clamp(18px,5vw,72px);
  /* Notch/abgerundete Displays: seitlicher Rand nie kleiner als der sichere Bereich */
  --pad-l:max(var(--pad),env(safe-area-inset-left));
  --pad-r:max(var(--pad),env(safe-area-inset-right));
  --maxw:1240px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:'Sora',system-ui,-apple-system,sans-serif;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;-webkit-tap-highlight-color:rgba(195,232,79,.18)}
img{display:block;max-width:100%}
a{color:var(--accent)}
a:hover{color:#d6f278}
.mono{font-family:'IBM Plex Mono',ui-monospace,monospace}
.wrap{width:100%;max-width:var(--maxw);margin:0 auto}

header{position:sticky;top:0;z-index:20;padding:10px var(--pad-r) 10px var(--pad-l);
  background:rgba(11,26,28,.86);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  border-bottom:1px solid rgba(232,240,238,.08)}
.head-inner{display:flex;align-items:center;justify-content:space-between;gap:16px}
.brand{display:inline-flex;align-items:center;min-height:44px;font-weight:700;font-size:16px;
  letter-spacing:-.02em;color:var(--ink);text-decoration:none}
nav{display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:4px clamp(14px,2vw,26px);font-size:14px}
nav a:not(.btn){display:inline-flex;align-items:center;min-height:44px;color:var(--ink-70);text-decoration:none}
nav a:not(.btn):hover{color:var(--ink)}
.btn{padding:14px 24px;min-height:48px;display:inline-flex;align-items:center;justify-content:center;
  background:var(--accent);color:#0b1a1c;font-weight:600;font-size:14.5px;
  text-decoration:none;border-radius:99px;max-width:100%;overflow-wrap:anywhere;text-align:center}
.btn:hover{background:#d6f278;color:#0b1a1c}
.btn-nav{padding:11px 19px;min-height:44px;font-size:14px}
.btn-ghost{padding:14px 24px;min-height:48px;display:inline-flex;align-items:center;justify-content:center;
  border:1px solid rgba(232,240,238,.2);color:var(--ink);font-weight:500;font-size:14.5px;
  text-decoration:none;border-radius:99px;background:none}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent)}

/* Menü-Knopf: nur mit JS und nur auf schmalen Displays sichtbar */
.burger{display:none;width:44px;height:44px;flex:none;padding:0;gap:5px;
  flex-direction:column;align-items:center;justify-content:center;
  background:none;border:1px solid rgba(232,240,238,.16);border-radius:12px;cursor:pointer}
.burger span{display:block;width:20px;height:2px;background:var(--ink);border-radius:2px;
  transition:transform .22s cubic-bezier(.2,.6,.2,1),opacity .18s linear}
.burger[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.burger[aria-expanded="true"] span:nth-child(2){opacity:0}
.burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

section{padding:clamp(48px,6vw,68px) var(--pad-r) clamp(48px,6vw,68px) var(--pad-l)}
#top{padding-top:clamp(44px,9vw,96px);background:radial-gradient(120% 90% at 12% 0%,#12332f 0%,#0b1a1c 62%)}
.eyebrow{display:inline-flex;align-items:center;gap:9px;margin:0 0 24px;font-size:11.5px;line-height:1.5;
  letter-spacing:.1em;color:var(--accent)}
.eyebrow::before{content:"";flex:none;width:6px;height:6px;background:var(--accent);border-radius:99px}
h1{margin:0 0 22px;max-width:22ch;font-weight:600;font-size:clamp(31px,7vw,58px);line-height:1.08;
  letter-spacing:-.035em;text-wrap:balance}
.lead{margin:0 0 32px;max-width:56ch;font-size:clamp(15.5px,1.6vw,17px);line-height:1.7;color:var(--ink-70);text-wrap:pretty}
.actions{display:flex;flex-wrap:wrap;gap:12px}

.label{margin:0;font-size:12.5px;letter-spacing:.12em;color:rgba(232,240,238,.56);font-weight:400}
.sec-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:6px 12px;margin:0 0 26px}
.sec-note{font-size:13.5px;color:rgba(232,240,238,.56)}

.apps{display:flex;flex-direction:column;gap:22px;border-top:1px solid rgba(232,240,238,.08);padding-top:22px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:20px;overflow:hidden}
/* min() sorgt dafür, dass die Spalte nie breiter wird als die Karte —
   damit bricht das Raster auf jedem Display sauber auf eine Spalte um. */
.card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr))}
.card-body{padding:clamp(22px,3.5vw,38px);display:flex;flex-direction:column;justify-content:center}
.card-shot{padding:clamp(16px,2.5vw,28px);display:flex;align-items:center;background:var(--surface-2)}
.card-shot img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;border-radius:12px;border:1px solid rgba(232,240,238,.1)}
.card-title{display:flex;flex-wrap:wrap;align-items:center;gap:9px 11px;margin:0 0 14px}
.card-title h3{margin:0;font-weight:600;font-size:clamp(21px,2.6vw,27px);line-height:1.2;letter-spacing:-.025em}
.badge{padding:3px 11px;border:1px solid rgba(195,232,79,.3);color:var(--accent);border-radius:99px;font-size:11px;line-height:1.6}
.badge-new{border-color:rgba(224,176,98,.35);color:var(--warn)}
.card p{margin:0 0 20px;font-size:15px;line-height:1.75;color:rgba(232,240,238,.66);text-wrap:pretty}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 24px}
.chip{padding:6px 12px;background:rgba(232,240,238,.06);border-radius:99px;font-size:12.5px;color:rgba(232,240,238,.75)}
.link-btn{align-self:flex-start;padding:12px 22px;min-height:46px;display:inline-flex;align-items:center;
  background:rgba(232,240,238,.08);border:1px solid rgba(232,240,238,.16);
  color:var(--ink);font-weight:500;font-size:13.5px;border-radius:99px;text-decoration:none;overflow-wrap:anywhere}
.link-btn:hover{border-color:var(--accent);color:var(--accent)}

#ueber{background:var(--surface);border-top:1px solid rgba(232,240,238,.08);border-bottom:1px solid rgba(232,240,238,.08)}
.two-col{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:clamp(30px,5vw,64px)}
h2.big{margin:0 0 18px;font-weight:600;font-size:clamp(23px,3vw,29px);line-height:1.25;letter-spacing:-.025em}
#ueber p{margin:0 0 18px;font-size:15px;line-height:1.8;color:rgba(232,240,238,.66);text-wrap:pretty}
#ueber p:last-child{margin:0}
.timeline{display:flex;flex-direction:column;gap:22px}
.tl{display:grid;grid-template-columns:18px 104px 1fr;gap:16px;align-items:start}
.dot{margin-top:7px;width:9px;height:9px;background:rgba(232,240,238,.3);border-radius:99px}
.dot.now{background:var(--accent)}
.tl .when{font-size:13px;line-height:1.65;color:rgba(232,240,238,.56)}
.tl h4{margin:0 0 4px;font-weight:500;font-size:15.5px;line-height:1.45}
.tl p{margin:0;font-size:14px;line-height:1.7;color:var(--ink-60)}

#setup>.wrap{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:clamp(30px,5vw,60px)}
.rows{display:flex;flex-direction:column;gap:14px;font-size:14.5px;line-height:1.6;margin-top:22px}
.row{display:flex;flex-wrap:wrap;gap:4px 16px}
.row .k{flex:0 0 92px;font-size:13px;line-height:1.75;color:var(--ink-50)}
.row .k.date{flex-basis:52px;font-size:12.5px;color:var(--accent)}
.row .k.wip{flex-basis:52px;font-size:12.5px;color:var(--ink-50)}
.row .v{flex:1 1 200px;min-width:0}
.rule{margin:4px 0;height:1px;background:rgba(232,240,238,.1)}

#kontakt{background:radial-gradient(110% 130% at 85% 100%,#1a3f36 0%,#0b1a1c 65%);
  border-top:1px solid rgba(232,240,238,.08);text-align:center}
#kontakt h2{margin:0 0 14px;font-weight:600;font-size:clamp(24px,3.4vw,32px);line-height:1.2;
  letter-spacing:-.03em;text-wrap:balance}
#kontakt p{margin:0 auto 28px;max-width:48ch;font-size:15.5px;line-height:1.75;color:rgba(232,240,238,.66);text-wrap:pretty}
#kontakt .btn{font-size:clamp(13.5px,3.4vw,14.5px)}

footer{padding:20px var(--pad-r) calc(20px + env(safe-area-inset-bottom)) var(--pad-l);
  border-top:1px solid rgba(232,240,238,.08)}
footer .wrap{display:flex;flex-wrap:wrap;gap:10px 14px;justify-content:space-between;
  font-size:12.5px;line-height:1.6;color:rgba(232,240,238,.56)}
.foot-links{display:flex;flex-wrap:wrap;gap:8px 18px}
/* Tippziel mindestens 44px hoch — die Schrift bleibt unverändert, nur die
   klickbare Fläche wächst. Betrifft vor allem Impressum und Datenschutz,
   die leicht erreichbar sein müssen. */
footer a{color:inherit;text-decoration:none;display:inline-flex;align-items:center;min-height:44px}
footer a:hover{color:var(--accent)}

.js [data-reveal]{opacity:0;transform:translateY(18px);transition:opacity .7s cubic-bezier(.2,.6,.2,1),transform .7s cubic-bezier(.2,.6,.2,1)}
.js [data-reveal].in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){
  .js [data-reveal]{opacity:1;transform:none;transition:none}
  html{scroll-behavior:auto}
  .burger span{transition:none}
}

/* --- Tablet und schmaler: Karten stapeln --- */
@media (max-width:860px){
  .card-shot{order:2}
}
/* --- Zeitleiste: Datum über die Überschrift, sobald die Spalte schmal wird --- */
@media (max-width:900px){
  .tl{grid-template-columns:18px 1fr;gap:2px 16px}
  .tl .when{grid-column:2;margin-bottom:3px;font-size:12.5px}
  .tl>div{grid-column:2}
}
/* --- Handy: Navigation als ausklappbares Menü --- */
@media (max-width:759px){
  .js .burger{display:inline-flex}
  /* Bezug ist der sticky <header>, nicht .head-inner — daher exakt an dessen Unterkante */
  .js nav{position:absolute;top:100%;left:0;right:0;
    display:none;flex-direction:column;align-items:stretch;gap:2px;
    padding:14px var(--pad-r) 18px var(--pad-l);font-size:16px;
    background:rgba(11,26,28,.97);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
    border-top:1px solid rgba(232,240,238,.08);border-bottom:1px solid rgba(232,240,238,.08)}
  .js nav.open{display:flex}
  .js nav a:not(.btn){display:flex}
  .js nav .btn-nav{margin-top:10px;padding:14px 22px;min-height:48px;font-size:15px}
}
/* --- Sehr schmal (≈320 px): Beschriftungsspalte darf umbrechen --- */
@media (max-width:360px){
  .row .k{flex-basis:100%}
  .row .v{flex-basis:100%}
}
