/* base.css — wird von ALLEN Layouts zuerst geladen (öffentlich, Login, Portal).
   Nur Schriften + minimaler Reset + Hilfsklassen. Alles Gestalterische gehört in
   public.css (body.pub), login.css (body.auth) oder intern.css (body.int).
   Schriften: Inter Tight (variabel) + IBM Plex Mono 400, OFL 1.1, siehe fonts/LICENSE.txt.
   Plex Mono gibt es nur in 400; font-weight 500 fällt darauf zurück (keine Kunstfette). */

@font-face {
  font-family: "Inter Tight";
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(fonts/inter-tight-latin-wght-normal.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-latin-400-normal.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;
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body { margin: 0; font-synthesis-weight: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
img, svg { max-width: 100%; }
.skip { position: absolute; left: -9999px; top: 8px; z-index: 100; }
.skip:focus { left: 12px; }
.sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
/* ---------- Bewegung: Tokens (gelten für alle drei Bereiche) ----------
   Regeln: jede Animation steht in (prefers-reduced-motion: no-preference),
   Hover-Bewegung zusätzlich in (hover: hover); animiert werden nur transform
   und opacity (Ausnahme: clip-path der Pipeline-Balken in public.css);
   der letzte Keyframe ist immer der Ruhezustand. */
:root {
  --ease-out: cubic-bezier(.22, .61, .36, 1);   /* Hover, Einblenden, Ping */
  --ease-in-out: cubic-bezier(.65, 0, .35, 1);  /* Wege hin und zurück: Unterstrich, Schwärzung */
  --dur-press: 80ms;    /* Knopfdruck */
  --dur-fast: 140ms;    /* Farbe, Rahmen, Hintergrund */
  --dur-base: 220ms;    /* Pfeil, Unterstrich, Lift, Seitenwechsel */
  --dur-slow: 420ms;    /* Meldungen, Schwärzung */
  --dur-reveal: 640ms;  /* Seitenaufbau */
  --dur-ambient: 3s;    /* Ping */
  --stagger: 60ms;
}

/* Gemeinsame Keyframes (Ruhezustand = Endzustand des Elements) */
@keyframes uc-ping { 0% { transform: scale(.6); opacity: .8; } 70%, 100% { transform: scale(1.9); opacity: 0; } }
@keyframes uc-rise { from { opacity: 0; transform: translateY(-4px); } }
@keyframes uc-rise-up { from { opacity: 0; transform: translateY(12px); } }
@keyframes uc-fade { from { opacity: 0; } }
@keyframes uc-wipe { from { transform: scaleX(0); } }
@keyframes uc-ink { from { transform: scaleX(0); } }

/* Weiche Seitenwechsel ohne JavaScript (Cross-Document View Transitions) */
@media (prefers-reduced-motion: no-preference) {
  @view-transition { navigation: auto; }
  ::view-transition-group(root) { animation-duration: var(--dur-base); animation-timing-function: var(--ease-out); }
}

/* Einzige Abschaltregel für reduzierte Bewegung (inkl. Verzögerungen, damit
   gestaffelte Einblendungen mit fill-mode both nie unsichtbar hängen). */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-delay: 0s !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    transition-delay: 0s !important;
    scroll-behavior: auto !important;
  }
}
