/* ============================================================
   TFCZ · UI-Komponenten (Aussehen)

   EINE Quelle für Brand Guide, Komponenten-Seite und jede Seite, die eine
   Komponente einbaut. Setzt system/tokens.css und system/buttons.css voraus.
   Verhalten: system/components/ui.js. Beispiele: komponenten.html,
   maschinenlesbar: system/komponenten.json.

   GENERIERT von _build/komponenten.mjs, nicht von Hand ändern.
   ============================================================ */

/* ----- Grundbausteine (Felder, Checkbox, Radio, Switch, Chips, Reiter, Badges, Dialog, Tabelle, X) ----- */
.rtabs{display:flex; gap:6px}
.rtab{cursor:pointer; font-family:var(--font); font-weight:900; font-size:14px; color:var(--ink-mut); background:var(--navy-2); border:1px solid var(--card-brd); border-bottom:none; border-radius:10px 10px 0 0; padding:10px 18px; transition:var(--t-fast)}
.rtab:hover{color:#fff}
.rtab.on{background:var(--frost); color:var(--ink); box-shadow:inset 0 3px 0 var(--blue)}
@media(max-width:700px){.btable{display:block; width:100%; overflow-x:auto}}
@keyframes xsquish{0%,100%{transform:scale(1,1)}45%{transform:scale(1.22,.78)}}
.xclose{width:36px; height:36px; border-radius:50%; background:rgba(255,255,255,.08); border:1px solid var(--card-brd); color:#fff; cursor:pointer; display:grid; place-items:center; transition:var(--t-fast)}
.xclose svg{width:16px; height:16px}
.xclose:hover{background:var(--red); border-color:var(--red); animation:xsquish .42s}
.xclose:active{transform:scale(.9)}
.sw-toggle{position:relative; width:52px; height:30px; flex:none; cursor:pointer}
.sw-toggle input{position:absolute; opacity:0; width:100%; height:100%; margin:0; cursor:pointer}
.sw-toggle .tr{position:absolute; inset:0; border-radius:var(--r-pill); background:#33506a; border:1px solid var(--card-brd); transition:var(--t-fast)}
.sw-toggle .kn{position:absolute; top:3px; left:3px; width:24px; height:24px; border-radius:50%; background:#fff; transition:var(--t-base) var(--ease); box-shadow:0 2px 6px rgba(0,0,0,.4)}
.sw-toggle input:checked ~ .tr{background:var(--blue)}
.sw-toggle input:checked ~ .kn{transform:translateX(22px)}
.field label{display:block; font-size:12.5px; font-weight:900; color:var(--ink-mut); margin-bottom:6px}
.field input,.field select,.field textarea{width:100%; font-family:var(--font); font-size:14px; font-weight:700; color:#fff; background:rgba(9,21,33,.6); border:1px solid var(--card-brd); border-radius:var(--r-md); padding:11px 13px; outline:none; transition:border-color var(--t-fast)}
.field input::placeholder,.field textarea::placeholder{color:rgba(195,210,224,.5)}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--gold)}
.field select{appearance:none; -webkit-appearance:none; padding-right:42px; cursor:pointer;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23c3d2e0' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>"); background-repeat:no-repeat; background-position:right 14px center; background-size:15px}
.field select:hover{border-color:rgba(255,255,255,.3)}
.field select:focus{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23e9c475' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>")}
.field select option{background:#0d273d; color:#fff}
.field textarea{min-height:74px; resize:vertical}
.chip-f{font-size:12.5px; font-weight:900; color:var(--ink); background:var(--card-soft); border:1px solid var(--card-brd); border-radius:var(--r-pill); padding:8px 15px; cursor:pointer; transition:var(--t-fast)}
.chip-f:hover{color:#fff;box-shadow:inset 0 2px 0 var(--blue), inset 0 -2px 0 var(--gold);}
.chip-f.on{color:var(--gold-lt); border:1px solid var(--gold)}
.tabs{display:inline-flex; gap:4px; padding:4px; background:rgba(9,21,33,.7); border:1px solid var(--card-brd); border-radius:var(--r-pill)}
.tabs button{font-family:var(--font); font-weight:900; font-size:13px; padding:9px 18px; border:0; border-radius:var(--r-pill); cursor:pointer; color:var(--ink-mut); background:none; transition:var(--t-fast)}
.tabs button.on{background:var(--gold); color:var(--navy)}
.badge{display:inline-flex; align-items:center; gap:7px; font-size:12.5px; font-weight:900; padding:6px 13px; border-radius:var(--r-pill)}
.badge::before{content:""; width:9px; height:9px; border-radius:50%; background:var(--bc)}
.badge.fun{--bc:var(--cat-fun); color:var(--cat-fun); background:color-mix(in srgb,var(--cat-fun) 16%,transparent); border:1px solid color-mix(in srgb,var(--cat-fun) 45%,transparent)}
.badge.pro{--bc:#4f9bd4; color:#8fc4ec; background:color-mix(in srgb,var(--cat-pro) 42%,transparent); border:1px solid color-mix(in srgb,#4f9bd4 55%,transparent)}
.badge.elite{--bc:var(--gold); color:var(--gold-lt); background:color-mix(in srgb,var(--gold) 15%,transparent); border:1px solid color-mix(in srgb,var(--gold) 55%,transparent)}
.badge.event{--bc:var(--cat-event); color:#7fc79c; background:color-mix(in srgb,var(--cat-event) 32%,transparent); border:1px solid color-mix(in srgb,var(--cat-event) 60%,transparent)}
.modal{width:min(440px,94vw); background:linear-gradient(155deg, rgba(17,34,51,.96), rgba(9,21,33,.94)); border:1px solid var(--card-brd); border-top:3px solid var(--blue); border-bottom:3px solid var(--gold); border-radius:var(--r-xl); box-shadow:var(--e-3); padding:24px}
.modal-head{display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:10px}
.modal-head h4{margin:0; font-size:18px; font-weight:900; color:#fff}
.modal p{margin:0; color:var(--ink-mut); font-size:14px}
.btable{width:100%; border-collapse:collapse; font-size:13px; line-height:1.5}
.btable th{font-size:11px; text-transform:uppercase; letter-spacing:.08em; color:var(--gold-lt); text-align:left; padding:8px 10px; border-bottom:1px solid var(--card-brd); white-space:nowrap}
.btable td{padding:9px 10px; border-bottom:1px solid rgba(255,255,255,.06); color:var(--ink-mut); vertical-align:top}
.btable td:first-child{color:#fff; font-weight:900}
.ck{display:inline-flex; align-items:center; gap:10px; cursor:pointer; font-size:14px; font-weight:700; color:var(--ink); position:relative}
.ck input{position:absolute; opacity:0; width:0; height:0}
.ck .bx{width:22px; height:22px; flex:none; border-radius:6px; background:rgba(9,21,33,.6); border:1px solid var(--card-brd); display:grid; place-items:center; transition:var(--t-fast)}
.ck .bx svg{width:13px; height:13px; opacity:0; transform:scale(.4); transition:.25s cubic-bezier(.34,1.56,.64,1)}
.ck input:checked~.bx{background:var(--gold); border-color:var(--gold)}
.ck input:checked~.bx svg{opacity:1; transform:none}
.ck input:focus-visible~.bx{border-color:var(--gold)}
.ck:hover input:not(:checked):not(:disabled)~.bx{border-color:transparent; box-shadow:inset 0 2px 0 var(--blue), inset 0 -2px 0 var(--gold)}
.ck.rd .bx{border-radius:50%}
.ck.rd .bx .dot{width:10px; height:10px; border-radius:50%; background:var(--gold); opacity:0; transform:scale(.3); transition:.25s cubic-bezier(.34,1.56,.64,1)}
.ck.rd input:checked~.bx{background:rgba(9,21,33,.6); border:2px solid var(--gold)}
.ck.rd input:checked~.bx .dot{opacity:1; transform:none}
.ck.dis{opacity:.4; cursor:not-allowed}
.tck{display:inline-flex; align-items:center; gap:12px; cursor:pointer; font-size:14px; font-weight:700; color:var(--ink); -webkit-tap-highlight-color:transparent}
.tck input{position:absolute; opacity:0; width:0; height:0}
.tck .bx{--size:30px; position:relative; width:var(--size); height:var(--size); flex:none; display:grid; place-items:center; border-radius:50%;
  background-image:linear-gradient(43deg,#5ca7dc 0%,#4489c7 46%,#005a94 100%);
  box-shadow:0 4px 10px rgba(13,39,61,.35);
  transition:transform .2s ease, background-image .25s ease, box-shadow .25s ease; overflow:hidden}
.tck .bx::before{content:""; position:absolute; inset:0; margin:auto; width:66%; height:66%; background:#fff; border-radius:50%;
  box-shadow:inset 0 3px 5px rgba(13,39,61,.28); transition:width .2s ease, height .2s ease}
.tck:hover input:not(:checked):not(:disabled) ~ .bx::before{width:52%; height:52%}
.tck input:active ~ .bx{transform:scale(.9)}
.tck .bx .tick{position:relative; z-index:1; width:30%; height:56%; border:solid #fff; border-width:0 3px 3px 0; border-radius:1px;
  margin-top:-8%; transform:rotate(45deg) scale(0); opacity:0;
  transition:transform .3s cubic-bezier(.34,1.56,.64,1), opacity .2s ease}
.tck input:checked ~ .bx{background-image:linear-gradient(43deg,var(--green-dk) 0%,var(--green) 100%); box-shadow:0 8px 20px color-mix(in srgb,var(--green) 45%,transparent)}
.tck input:checked ~ .bx::before{width:0; height:0}
.tck input:checked ~ .bx .tick{opacity:1; transform:rotate(45deg) scale(1)}
.tck input:focus-visible ~ .bx{outline:2px solid var(--gold); outline-offset:2px}
.tck.dis{opacity:.45; cursor:not-allowed}
.spin{width:34px; height:34px; border-radius:50%; flex:none; border:3px solid rgba(255,255,255,.12); border-top-color:var(--blue); border-bottom-color:var(--gold); animation:clSpin 1s linear infinite}
@keyframes clSpin{to{transform:rotate(360deg)}}
.skel{border-radius:var(--r-md); background:linear-gradient(90deg, rgba(255,255,255,.06) 25%, rgba(255,255,255,.14) 50%, rgba(255,255,255,.06) 75%); background-size:200% 100%; animation:clSkel 1.4s ease infinite}
@keyframes clSkel{to{background-position:-200% 0}}
@media(prefers-reduced-motion:reduce){.spin,.skel{animation:none}}
.csel{position:relative; width:100%}
.csel select{position:absolute; width:1px; height:1px; opacity:0; pointer-events:none; margin:0; border:0; padding:0}
.csel.open .csel-ch{transform:rotate(180deg); color:var(--gold-lt)}
.csel.open .csel-menu{display:block}

/* ----- Komponenten (Präfix k-) ----- */
/* Komponenten-Seite: nur was der Brand Guide nicht schon hat. Präfix k-.
   Semantik wie im Guide: Auswahl = Gold · Aktion = Blau · Bestätigung = Grün · Schliessen/Gefahr = Rot ·
   Hover = Brand-Rahmen nur bei nicht gewählten Elementen. */
.ki{width:17px; height:17px; flex:none; display:block}
.k-w280{width:min(280px,100%)} .k-w400{width:min(400px,100%)}
.k-row{display:flex; align-items:center; gap:12px; flex-wrap:wrap}
.k-col{display:flex; flex-direction:column; gap:12px; align-items:flex-start}
.k-grow{flex:1; min-width:0}
.k-muted{color:var(--ink-mut); margin:0; font-size:13.5px}
.k-small{font-size:12px}
.k-p{margin:0; color:var(--ink); font-size:15px}
.k-pointer{cursor:pointer}
.k-lbl{margin:0; font-size:11px; font-weight:900; letter-spacing:.09em; text-transform:uppercase; color:var(--ink-mut)}
.k-kick{display:inline-flex; align-items:center; gap:9px; font-size:11.5px; font-weight:900; letter-spacing:.16em; text-transform:uppercase; color:var(--gold-lt)}
.k-kick::before{content:""; width:22px; height:2px; background:var(--gold)}
.k-chips{display:flex; flex-wrap:wrap; gap:8px}
.k-help{margin:6px 0 0; font-size:12.5px; color:var(--ink-mut)}

/* Typography */
.k-typo{display:flex; flex-direction:column; gap:10px; max-width:640px}
.k-typo .k-h1{margin:0; font-size:clamp(24px,3.4vw,32px); font-weight:900; color:#fff; letter-spacing:-.01em; line-height:1.15}
.k-typo p{margin:0; color:var(--ink-mut); font-size:15px; line-height:1.6}
.k-typo blockquote{margin:0; padding:4px 0 4px 16px; border-left:3px solid var(--gold); color:#fff; font-size:16px; font-weight:700; font-style:italic}
.k-typo ul{margin:0; padding-left:20px; color:var(--ink-mut); font-size:14.5px; line-height:1.7}
.k-typo li::marker{color:var(--gold)}

/* Button Group */
.k-bgroup{display:inline-flex}
.k-bgroup .btn{border-radius:0; margin-left:-1px}
.k-bgroup .btn:first-child{border-radius:var(--btn-radius) 0 0 var(--btn-radius); margin-left:0}
.k-bgroup .btn:last-child{border-radius:0 var(--btn-radius) var(--btn-radius) 0}
.k-bgroup .btn:hover{transform:none; position:relative; z-index:1}

/* Kbd */
.k-kbd{display:inline-block; min-width:26px; text-align:center; font-family:var(--font); font-size:12px; font-weight:900; color:#fff; background:rgba(9,21,33,.7); border:1px solid var(--card-brd); border-bottom-width:3px; border-radius:7px; padding:3px 8px}

/* Separator */
.k-sep-demo{display:flex; flex-direction:column; gap:12px; min-width:260px}
.k-sep-demo b{color:#fff}
.k-sep{border:0; height:1px; background:var(--card-brd); margin:4px 0; width:100%}
.k-sep-row{display:flex; align-items:center; gap:12px; font-size:13.5px; font-weight:700; color:var(--ink)}
.k-vsep{width:1px; height:16px; background:var(--card-brd)}

/* Aspect Ratio */
.k-ratio{width:min(420px,100%); aspect-ratio:16/9; border-radius:var(--r-lg); overflow:hidden; border:1px solid var(--card-brd)}
.k-ratio img{width:100%; height:100%; object-fit:cover; display:block}

/* Skeleton */
.k-skel-card{display:flex; gap:14px; align-items:center; width:min(360px,100%); padding:16px; border-radius:var(--r-lg); background:var(--card-soft); border:1px solid var(--card-brd)}
.k-sk-lines{flex:1; display:flex; flex-direction:column; gap:9px}
.k-sk{display:block; height:12px}
.k-sk-av{width:44px; height:44px; border-radius:50%}


/* Direction */
.k-dirbox{display:flex; align-items:center; gap:12px; width:min(360px,100%); padding:12px 14px; border-radius:var(--r-lg); background:var(--card-soft); border:1px solid var(--card-brd)}
.k-dirbox b{color:#fff}
.k-dirbox > div{flex:1}
.k-dirbox[dir="rtl"] .k-dir-ic{transform:scaleX(-1)}
.k-av-init{width:38px; height:38px; flex:none; border-radius:50%; display:grid; place-items:center; font-weight:900; font-size:13px; color:#fff; background:linear-gradient(155deg,var(--blue-mid),var(--blue-dk))}

/* Input Group */
.k-igroup{display:flex; align-items:center; gap:8px; padding:4px 4px 4px 12px; background:rgba(9,21,33,.6); border:1px solid var(--card-brd); border-radius:var(--r-md); color:var(--ink-mut)}
.k-igroup:focus-within{border-color:var(--gold)}
.k-igroup input{flex:1; min-width:0; background:none; border:0; outline:0; color:#fff; font-family:var(--font); font-size:14px; font-weight:700; padding:8px 0}
.k-igroup input::placeholder{color:rgba(195,210,224,.5)}

/* Input OTP */
.k-otp{display:flex; align-items:center; gap:8px}
.k-otp input{width:44px; height:52px; text-align:center; font-family:var(--font); font-size:22px; font-weight:900; color:#fff; background:rgba(9,21,33,.6); border:1px solid var(--card-brd); border-radius:var(--r-md); outline:0}
.k-otp input:focus{border-color:var(--gold)}
.k-otp-dash{width:10px; height:2px; background:var(--card-brd)}

/* Slider */
.k-sl-head{display:flex; justify-content:space-between; align-items:baseline; gap:10px; margin:0 0 10px; font-size:13.5px; color:var(--ink-mut); font-weight:700}
.k-sl-head b{color:#fff; font-size:15px}
.k-slider input{--p:55.5%; width:100%; appearance:none; -webkit-appearance:none; height:6px; border-radius:6px; background:linear-gradient(90deg,var(--blue) var(--p), rgba(255,255,255,.14) var(--p)); outline:0; cursor:pointer}
.k-slider input::-webkit-slider-thumb{-webkit-appearance:none; width:22px; height:22px; border-radius:50%; background:#fff; box-shadow:0 2px 8px rgba(0,0,0,.45); border:3px solid var(--blue); transition:transform var(--t-fast)}
.k-slider input::-moz-range-thumb{width:18px; height:18px; border-radius:50%; background:#fff; border:3px solid var(--blue)}
.k-slider input:active::-webkit-slider-thumb{transform:scale(1.12)}
.k-slider input:focus-visible::-webkit-slider-thumb{border-color:var(--gold)}

/* Popovers, Listen, Menüs */
.k-pop-wrap{position:relative; display:inline-block}
.k-pop{position:absolute; top:calc(100% + 8px); left:0; z-index:40; min-width:220px; display:none; background:linear-gradient(155deg, rgba(17,34,51,.98), rgba(9,21,33,.97)); border:1px solid var(--card-brd); border-top:3px solid var(--blue); border-bottom:3px solid var(--gold); border-radius:var(--r-lg); box-shadow:0 18px 40px rgba(0,0,0,.5); padding:6px}
.k-pop.on{display:block}
.k-pop-pad{padding:14px; display:none; flex-direction:column; gap:12px; width:260px}
.k-pop-pad.on{display:flex}
.k-selbtn{display:inline-flex; align-items:center; gap:10px; min-width:220px; justify-content:space-between; font-family:var(--font); font-size:14px; font-weight:700; color:#fff; background:rgba(9,21,33,.6); border:1px solid var(--card-brd); border-radius:var(--r-md); padding:11px 14px; cursor:pointer}
.k-selbtn:hover{border-color:rgba(255,255,255,.3)}
.k-selbtn[aria-expanded="true"]{border-color:var(--gold)}
.k-selbtn[aria-expanded="true"] > .ki:last-child{color:var(--gold-lt)}
.k-selbtn > .ki:first-child{color:var(--ink-mut)}
.k-list .k-opt, .k-menu button{display:flex; width:100%; align-items:center; gap:10px; text-align:left; font-family:var(--font); font-size:14px; font-weight:700; color:var(--ink); background:none; border:0; border-radius:8px; padding:9px 11px; cursor:pointer}
.k-list .k-opt:hover, .k-menu button:hover, .k-list .k-opt.hl{background:rgba(255,255,255,.07); color:#fff}
.k-opt .k-opt-ck{margin-left:auto; color:var(--gold-lt); opacity:0}
.k-opt.on{color:var(--gold-lt)}
.k-opt.on .k-opt-ck{opacity:1}
.k-menu .ki{color:var(--ink-mut)}
.k-menu .k-danger, .k-menu .k-danger .ki{color:#ff8a8a}
.k-menu .k-danger:hover{background:rgba(218,41,41,.18)}
.k-menu .k-sep{margin:5px 4px; width:auto}
.k-empty-line{margin:0; padding:10px 11px; color:var(--ink-mut); font-size:13.5px}
.k-combo .k-pop{width:100%}

/* Overlays: öffnen und schliessen ohne Animation (Portal-Regel) */
.k-ov{position:fixed; inset:0; z-index:200; display:none; align-items:center; justify-content:center; padding:16px; background:rgba(4,11,18,.7); backdrop-filter:blur(3px)}
.k-ov.on{display:flex}
.k-modal{display:flex; flex-direction:column; gap:14px}
.k-modal h3, .k-sheet h3, .k-drawer h3{margin:0; font-size:18px; font-weight:900; color:#fff}
.k-mh{display:flex; align-items:center; justify-content:space-between; gap:12px}
.k-mf{display:flex; justify-content:flex-end; gap:10px; flex-wrap:wrap}
.k-ov-side{justify-content:flex-end; padding:0}
.k-sheet{width:min(360px,92vw); height:100%; display:flex; flex-direction:column; gap:14px; padding:22px; background:linear-gradient(180deg, rgba(17,34,51,.98), rgba(9,21,33,.98)); border-left:3px solid var(--blue); box-shadow:-20px 0 50px rgba(0,0,0,.45)}
.k-ov-bottom{align-items:flex-end; padding:0}
.k-drawer{width:min(560px,100%); display:flex; flex-direction:column; gap:12px; padding:14px 22px calc(22px + env(safe-area-inset-bottom)); background:linear-gradient(180deg, rgba(17,34,51,.98), rgba(9,21,33,.98)); border-top:3px solid var(--blue); border-radius:var(--r-xl) var(--r-xl) 0 0}
.k-grip{width:44px; height:5px; border-radius:5px; background:rgba(255,255,255,.25); align-self:center}
.k-kv{display:flex; justify-content:space-between; gap:12px; padding:10px 0; border-bottom:1px solid var(--card-brd); font-size:14px; color:var(--ink-mut)}
.k-kv b{color:#fff}

/* Tooltip, Hover Card */
.k-tip-wrap, .k-hc-wrap{position:relative; display:inline-block}
.k-tip{position:absolute; bottom:calc(100% + 9px); left:50%; transform:translateX(-50%); white-space:nowrap; font-size:12.5px; font-weight:900; color:var(--navy); background:#fff; border-radius:8px; padding:6px 10px; pointer-events:none; opacity:0; transition:opacity var(--t-fast)}
.k-tip::after{content:""; position:absolute; top:100%; left:50%; margin-left:-5px; border:5px solid transparent; border-top-color:#fff}
.k-tip-wrap:hover .k-tip, .k-tip-wrap:focus-within .k-tip{opacity:1}
.k-mention{color:var(--gold-lt); font-weight:800; text-decoration:underline; text-decoration-color:color-mix(in srgb,var(--gold-lt) 45%,transparent); text-underline-offset:3px}
.k-hc{position:absolute; top:calc(100% + 10px); left:0; z-index:30; display:flex; gap:12px; align-items:center; width:280px; padding:14px; background:linear-gradient(155deg, rgba(17,34,51,.98), rgba(9,21,33,.97)); border:1px solid var(--card-brd); border-top:3px solid var(--blue); border-bottom:3px solid var(--gold); border-radius:var(--r-lg); box-shadow:0 18px 40px rgba(0,0,0,.5); opacity:0; visibility:hidden; transition:opacity var(--t-fast)}
.k-hc > span:last-child{display:flex; flex-direction:column; gap:2px; font-size:14px}
.k-hc b{color:#fff}
.k-hc-wrap:hover .k-hc, .k-hc-wrap:focus-within .k-hc{opacity:1; visibility:visible}

/* Avatar in Emblem-Form: echte Silhouette als Maske (emblem-white.png, 321 × 366), ohne Rahmen.
   Quelle der Regel: guide-emblem-avatar.html im Design Studio. */
.k-shield{display:inline-grid; place-items:center; flex:none; width:40px; aspect-ratio:321/366; background-size:cover; background-position:center;
  -webkit-mask:url(../assets/img/emblem-white.png) center/contain no-repeat; mask:url(../assets/img/emblem-white.png) center/contain no-repeat}
.k-shield-lg{width:72px}
.k-shield-init{padding-bottom:12%; font-weight:900; font-size:24px; color:#fff; background:radial-gradient(circle at 50% 40%,#005a94,#0d273d 80%)}

/* Toggle */
.k-toggle{display:inline-flex; align-items:center; gap:8px; font-family:var(--font); font-size:14px; font-weight:900; color:var(--ink); background:var(--card-soft); border:1px solid var(--card-brd); border-radius:var(--btn-radius,12px); padding:10px 16px; cursor:pointer; transition:var(--t-fast)}
.k-toggle:hover:not([aria-pressed="true"]){box-shadow:inset 0 2px 0 var(--blue), inset 0 -2px 0 var(--gold); border-color:transparent}
.k-toggle[aria-pressed="true"]{color:var(--gold-lt); border-color:var(--gold)}
.k-toggle[aria-pressed="true"] .ki{fill:var(--gold-lt)}

/* Tabs */
.k-tabline{border-bottom:3px solid var(--gold)}
.k-tabpanel{display:none; padding:16px 2px 2px; color:var(--ink-mut); font-size:14px}
.k-tabpanel.on{display:block}

/* Accordion */
.k-acc{display:flex; flex-direction:column; gap:8px}
.k-acc details{border:1px solid var(--card-brd); border-radius:var(--r-md); background:var(--card-soft)}
.k-acc summary{list-style:none; display:flex; justify-content:space-between; align-items:center; gap:10px; padding:13px 15px; cursor:pointer; font-weight:900; color:#fff; font-size:14.5px}
.k-acc summary::-webkit-details-marker{display:none}
.k-acc summary .ki{color:var(--ink-mut); transition:transform var(--t-fast)}
.k-acc details[open] summary .ki{transform:rotate(180deg); color:var(--gold-lt)}
.k-acc details:not([open]):hover{border-color:transparent; box-shadow:inset 0 2px 0 var(--blue), inset 0 -2px 0 var(--gold)}
.k-acc p{margin:0; padding:0 15px 14px; color:var(--ink-mut); font-size:14px}

/* Collapsible */
.k-coll{display:flex; flex-direction:column; gap:8px; align-items:flex-start}
.k-coll-more{display:flex; flex-direction:column; gap:8px; width:100%}
.k-coll-more[hidden]{display:none}
.k-coll-row{width:100%; padding:11px 14px; border:1px solid var(--card-brd); border-radius:var(--r-md); background:var(--card-soft); font-size:14px; color:var(--ink-mut)}
.k-coll-row b{color:#fff}

/* Breadcrumb */
.k-bc{display:flex; align-items:center; gap:8px; flex-wrap:wrap; font-size:14px; font-weight:700}
.k-bc a{display:inline-flex; align-items:center; gap:6px; color:var(--ink-mut); text-decoration:none}
.k-bc a:hover{color:#fff}
.k-bc .k-bc-sep{width:14px; height:14px; color:rgba(195,210,224,.45)}
.k-bc [aria-current]{color:#fff}

/* Pagination */
.k-pag{display:flex; gap:6px; align-items:center; flex-wrap:wrap}
.k-pag button{min-width:38px; height:38px; display:grid; place-items:center; font-family:var(--font); font-size:14px; font-weight:900; color:var(--ink); background:var(--card-soft); border:1px solid var(--card-brd); border-radius:10px; cursor:pointer; transition:var(--t-fast)}
.k-pag button:hover:not(.on){border-color:transparent; box-shadow:inset 0 2px 0 var(--blue), inset 0 -2px 0 var(--gold)}
.k-pag button.on{color:var(--gold-lt); border-color:var(--gold)}
.k-pag span{color:var(--ink-mut); padding:0 4px}

/* Navigation Menu, Menubar */
.k-nm, .k-mbar{display:flex; align-items:center; gap:4px; padding:5px; background:rgba(9,21,33,.6); border:1px solid var(--card-brd); border-radius:var(--r-md)}
.k-nm button, .k-nm-link, .k-mbar > .k-pop-wrap > button{display:inline-flex; align-items:center; gap:6px; font-family:var(--font); font-size:14px; font-weight:900; color:var(--ink-mut); background:none; border:0; border-radius:8px; padding:9px 13px; cursor:pointer; text-decoration:none}
.k-nm button:hover, .k-nm-link:hover, .k-mbar > .k-pop-wrap > button:hover, .k-nm button[aria-expanded="true"], .k-mbar button[aria-expanded="true"]{color:#fff; background:rgba(255,255,255,.07)}
.k-nm .ki{width:14px; height:14px}
.k-nm-panel{width:300px; padding:8px}
.k-nm-panel a{display:flex; flex-direction:column; gap:2px; padding:10px 12px; border-radius:8px; text-decoration:none}
.k-nm-panel a:hover{background:rgba(255,255,255,.07)}
.k-nm-panel b{color:#fff; font-size:14px} .k-nm-panel span{color:var(--ink-mut); font-size:12.5px}

/* Context Menu */
.k-ctx-area{display:flex; align-items:center; justify-content:center; gap:10px; width:min(400px,100%); height:120px; border:2px dashed var(--card-brd); border-radius:var(--r-lg); color:var(--ink-mut); font-weight:700; font-size:14px; user-select:none}
.k-ctx{position:fixed; top:0; left:0}

/* Command */
.k-cmd{border:1px solid var(--card-brd); border-top:3px solid var(--blue); border-bottom:3px solid var(--gold); border-radius:var(--r-lg); background:linear-gradient(155deg, rgba(17,34,51,.96), rgba(9,21,33,.94)); overflow:hidden}
.k-cmd-in{display:flex; align-items:center; gap:10px; padding:12px 14px; border-bottom:1px solid var(--card-brd); color:var(--ink-mut)}
.k-cmd-in input{flex:1; background:none; border:0; outline:0; color:#fff; font-family:var(--font); font-size:15px; font-weight:700}
.k-cmd-list{padding:8px; display:flex; flex-direction:column; gap:2px; max-height:260px; overflow:auto}
.k-cmd-list .k-lbl{padding:8px 10px 4px}
.k-cmd-list button{display:flex; align-items:center; gap:10px; font-family:var(--font); font-size:14px; font-weight:700; color:var(--ink); background:none; border:0; border-radius:8px; padding:9px 10px; cursor:pointer; text-align:left}
.k-cmd-list button .k-kbd{margin-left:auto}
.k-cmd-list button .ki{color:var(--ink-mut)}
.k-cmd-list button.on{background:rgba(255,255,255,.08); color:#fff}

/* Sidebar */
.k-sb{display:flex; width:min(520px,100%); height:230px; border:1px solid var(--card-brd); border-radius:var(--r-lg); overflow:hidden}
.k-sb-side{width:190px; flex:none; display:flex; flex-direction:column; gap:3px; padding:10px; background:rgba(9,21,33,.75); border-right:1px solid var(--card-brd); transition:width var(--t-base) var(--ease)}
.k-sb-side a{display:flex; align-items:center; gap:10px; padding:9px 10px; border-radius:8px; color:var(--ink-mut); text-decoration:none; font-size:14px; font-weight:700; white-space:nowrap; overflow:hidden}
.k-sb-side a:hover{color:#fff; background:rgba(255,255,255,.06)}
.k-sb-side a.on{color:var(--gold-lt); background:rgba(205,168,87,.12); box-shadow:inset 3px 0 0 var(--gold)}
.k-sb-tgl{align-self:flex-end; width:34px; height:34px; display:grid; place-items:center; color:var(--ink-mut); background:none; border:1px solid var(--card-brd); border-radius:8px; cursor:pointer; margin-bottom:4px}
.k-sb-tgl:hover{color:#fff}
.k-sb.mini .k-sb-side{width:58px}
.k-sb.mini .k-sb-side a span{display:none}
.k-sb.mini .k-sb-tgl{align-self:center}
.k-sb-main{flex:1; padding:16px; background:var(--card-soft)}
.k-sb-main b{color:#fff}

/* Card, Item, Empty, Alert */
.k-card{width:min(340px,100%); display:flex; flex-direction:column; gap:8px; align-items:flex-start; padding:20px; background:var(--card); border:1px solid var(--card-brd); border-top:3px solid var(--blue); border-bottom:3px solid var(--gold); border-radius:var(--r-lg); box-shadow:var(--inset)}
.k-card h4, .k-empty h4, .k-quest h4{margin:0; font-size:18px; font-weight:900; color:#fff}
.k-item{display:flex; align-items:center; gap:14px; padding:14px; border:1px solid var(--card-brd); border-radius:var(--r-lg); background:var(--card-soft)}
.k-item b{color:#fff}
.k-item-ic, .k-att-ic{width:42px; height:42px; flex:none; display:grid; place-items:center; border-radius:12px; color:var(--gold-lt); background:rgba(205,168,87,.12); border:1px solid rgba(205,168,87,.35)}
.k-empty{display:flex; flex-direction:column; align-items:center; text-align:center; gap:8px; padding:28px 20px; border:2px dashed var(--card-brd); border-radius:var(--r-lg)}
.k-empty .k-empty-ic{width:34px; height:34px; color:var(--ink-mut); margin-bottom:4px}
.k-empty .btn{margin-top:6px}
.k-alert{display:flex; gap:12px; align-items:flex-start; padding:14px 16px; border-radius:var(--r-md); background:color-mix(in srgb,var(--orange) 12%,transparent); border:1px solid color-mix(in srgb,var(--orange) 45%,transparent); border-left:4px solid var(--orange)}
.k-alert > .ki{color:var(--orange); margin-top:2px; width:19px; height:19px}
.k-alert b{color:#fff} .k-alert p{margin:3px 0 0; color:var(--ink-mut); font-size:13.5px}

/* Progress */
.k-prog-tr{height:10px; border-radius:10px; background:rgba(255,255,255,.1); border:1px solid var(--card-brd); overflow:hidden}
.k-prog-tr span{display:block; height:100%; background:linear-gradient(90deg,var(--blue),var(--gold)); transform-origin:left; transition:transform .6s var(--ease)}
.k-prog-tr span.ok{background:var(--green)}
.k-prog-tr.k-thin{height:5px; margin-top:6px; border:0}

/* Tabellen */
.k-table{width:min(520px,100%); border-collapse:collapse; font-size:14px}
.k-table td{padding:10px; border-bottom:1px solid var(--card-brd); color:var(--ink)}
.k-table .k-num{text-align:right; font-variant-numeric:tabular-nums}
.k-dt th button{display:inline-flex; align-items:center; gap:6px; font:inherit; color:inherit; background:none; border:0; padding:0; cursor:pointer; text-transform:inherit; letter-spacing:inherit}
.k-dt th button .k-sort-ic{width:13px; height:13px; opacity:.55}
.k-dt th button.on .k-sort-ic{opacity:1}
.k-dt th:not(:has(button.on)) button{color:var(--ink-mut)}
.k-dt tbody tr:has(input:checked) td{background:rgba(205,168,87,.08)}
.k-dt td:first-child, .k-dt th:first-child{width:36px}
.k-dt .ck .bx svg{width:13px; height:13px; color:var(--navy)}

/* Kalender */
.k-cal{width:280px; user-select:none}
.k-cal-h{display:flex; align-items:center; justify-content:space-between; margin-bottom:10px}
.k-cal-h b{color:#fff; font-size:15px}
.k-cal-h button{width:32px; height:32px; display:grid; place-items:center; color:var(--ink-mut); background:var(--card-soft); border:1px solid var(--card-brd); border-radius:8px; cursor:pointer}
.k-cal-h button:hover{color:#fff}
.k-cal-g{display:grid; grid-template-columns:repeat(7,1fr); gap:4px}
.k-cal-g .k-wd{font-size:11px; font-weight:900; color:var(--ink-mut); text-align:center; padding:4px 0}
.k-cal-g button{position:relative; aspect-ratio:1; display:grid; place-items:center; font-family:var(--font); font-size:13.5px; font-weight:700; color:var(--ink); background:none; border:1px solid transparent; border-radius:9px; cursor:pointer}
.k-cal-g button:hover:not(.k-sel){border-color:transparent; box-shadow:inset 0 2px 0 var(--blue), inset 0 -2px 0 var(--gold)}
.k-cal-g button.k-out{color:rgba(195,210,224,.35)}
.k-cal-g button.k-today{color:var(--gold-lt); font-weight:900}
.k-cal-g button.k-sel{border-color:var(--gold); color:var(--gold-lt); background:rgba(205,168,87,.1)}
.k-cal-g button.k-ev::after{content:""; position:absolute; bottom:5px; left:50%; margin-left:-2.5px; width:5px; height:5px; border-radius:50%; background:var(--blue)}
.k-pop-cal{padding:14px}


/* Carousel */
.k-car{position:relative; border-radius:var(--r-lg); overflow:hidden; border:1px solid var(--card-brd); aspect-ratio:4/3}
.k-car-track{display:flex; height:100%; transition:transform .45s var(--ease)}
.k-car-track img{width:100%; height:100%; flex:none; object-fit:cover}
.k-car-btn{position:absolute; top:50%; margin-top:-20px; width:40px; height:40px; display:grid; place-items:center; border-radius:50%; color:#fff; background:rgba(9,21,33,.7); border:1px solid var(--card-brd); cursor:pointer}
.k-car-btn:hover{background:var(--blue)}
.k-car-btn.prev{left:10px} .k-car-btn.next{right:10px}
.k-car-dots{position:absolute; bottom:10px; left:0; right:0; display:flex; justify-content:center; gap:7px}
.k-car-dots button{width:9px; height:9px; padding:0; border-radius:50%; border:0; background:rgba(255,255,255,.45); cursor:pointer}
.k-car-dots button.on{background:var(--gold); width:22px; border-radius:6px}

/* Scroll Area */
.k-scroll{height:200px; overflow-y:auto; border:1px solid var(--card-brd); border-radius:var(--r-md); background:var(--card-soft); scrollbar-width:thin; scrollbar-color:rgba(92,167,220,.6) transparent}
.k-scroll::-webkit-scrollbar{width:6px} .k-scroll::-webkit-scrollbar-thumb{background:rgba(92,167,220,.6); border-radius:6px}
.k-scroll-row{display:flex; justify-content:space-between; gap:10px; padding:10px 14px; border-bottom:1px solid var(--card-brd); font-size:14px; color:var(--ink)}

/* Resizable */
.k-res{display:flex; height:150px; border:1px solid var(--card-brd); border-radius:var(--r-lg); overflow:hidden}
.k-res-a, .k-res-b{display:grid; place-items:center; min-width:60px; background:var(--card-soft); color:#fff}
.k-res-a{flex:0 0 50%} .k-res-b{flex:1}
.k-res-h{width:12px; flex:none; display:grid; place-items:center; cursor:col-resize; background:rgba(9,21,33,.8); outline:0}
.k-res-h span{width:3px; height:34px; border-radius:3px; background:rgba(255,255,255,.3)}
.k-res-h:hover span, .k-res-h:focus-visible span{background:var(--gold)}

/* Attachment */
.k-att{display:flex; align-items:center; gap:12px; padding:12px; border:1px solid var(--card-brd); border-radius:var(--r-lg); background:var(--card-soft)}
.k-att b{color:#fff; font-size:14px; overflow-wrap:anywhere}
.k-att-ic{color:var(--blue); background:rgba(92,167,220,.12); border-color:rgba(92,167,220,.35)}
.btn.k-x-red:hover{background:var(--red); border-color:var(--red); box-shadow:none; animation:xsquish .42s}

/* Chat */
.k-msg{display:flex; gap:12px; align-items:flex-start}
.k-msg p{margin:0; color:var(--ink); font-size:14.5px}
.k-msg-h{display:flex; gap:8px; align-items:baseline; margin-bottom:2px !important}
.k-msg-h b{color:#fff}
.k-bubbles{display:flex; flex-direction:column; gap:10px}
.k-bub{max-width:78%; padding:10px 14px; border-radius:16px; font-size:14.5px; line-height:1.45; position:relative}
.k-bub.them{align-self:flex-start; background:var(--card-soft); border:1px solid var(--card-brd); color:var(--ink); border-bottom-left-radius:5px}
.k-bub.me{align-self:flex-end; background:linear-gradient(155deg,var(--blue-mid),var(--blue-dk)); color:#fff; border-bottom-right-radius:5px}
.k-react{position:absolute; right:10px; bottom:-14px; display:inline-flex; align-items:center; gap:4px; font-size:12px; font-weight:900; color:#fff; background:var(--navy-2); border:1px solid var(--card-brd); border-radius:20px; padding:2px 8px}
.k-react .ki{width:13px; height:13px; color:var(--gold-lt)}
.k-bubbles .k-bub.me{margin-bottom:12px}
.k-marker{display:flex; align-items:center; gap:12px; color:var(--ink-mut); font-size:12px; font-weight:900; letter-spacing:.08em; text-transform:uppercase}
.k-marker::before, .k-marker::after{content:""; flex:1; height:1px; background:var(--card-brd)}
.k-sysnote{display:flex; justify-content:center; align-items:center; gap:8px; margin:12px 0 0; font-size:13px; color:var(--ink-mut)}
.k-sysnote .ki{width:15px; height:15px; color:var(--green)}
.k-ms{position:relative}
.k-ms-list{height:230px; overflow-y:auto; display:flex; flex-direction:column; gap:8px; padding:12px; border:1px solid var(--card-brd); border-radius:var(--r-lg); background:rgba(9,21,33,.4); scrollbar-width:thin; scrollbar-color:rgba(92,167,220,.6) transparent}
.k-ms-jump{position:absolute; bottom:12px; left:50%; transform:translateX(-50%); display:inline-flex; align-items:center; gap:6px; font-family:var(--font); font-size:13px; font-weight:900; color:#fff; background:var(--blue-dk); border:1px solid var(--card-brd); border-radius:20px; padding:7px 13px; cursor:pointer; box-shadow:0 8px 22px rgba(0,0,0,.4)}
.k-ms-jump[hidden]{display:none}

/* Questionnaire */
.k-quest{display:flex; flex-direction:column; gap:14px; padding:20px; border:1px solid var(--card-brd); border-radius:var(--r-lg); background:var(--card-soft)}
.k-q-prog{height:5px; border-radius:5px; background:rgba(255,255,255,.1); overflow:hidden}
.k-q-prog span{display:block; height:100%; background:linear-gradient(90deg,var(--blue),var(--gold)); transform-origin:left; transform:scaleX(.33); transition:transform .35s var(--ease)}
.k-q-step{display:none; flex-direction:column; gap:12px}
.k-q-step.on{display:flex}
.k-q-n{margin:0; font-size:12px; font-weight:900; color:var(--ink-mut); letter-spacing:.06em; text-transform:uppercase}
.k-q-nav{display:flex; gap:8px; align-items:center}
.k-q-done{display:flex; flex-direction:column; align-items:center; gap:8px; padding:10px 0; text-align:center}
.k-q-done[hidden]{display:none}
.k-q-ok{width:40px; height:40px; color:var(--green)}

/* Toast */
.k-toasts{position:fixed; right:16px; bottom:16px; z-index:300; display:flex; flex-direction:column; gap:10px; align-items:flex-end}
.k-toast{display:flex; align-items:center; gap:10px; max-width:min(360px,calc(100vw - 32px)); padding:12px 16px; font-size:14px; font-weight:800; color:#fff; background:linear-gradient(155deg, rgba(17,34,51,.98), rgba(9,21,33,.97)); border:1px solid var(--card-brd); border-left:4px solid var(--green); border-radius:var(--r-md); box-shadow:0 14px 34px rgba(0,0,0,.5)}
.k-toast .ki{color:var(--green)}

@media (max-width:600px){
  .k-otp input{width:38px; height:46px; font-size:19px}
  .k-sb-side{width:150px}
}
@media (prefers-reduced-motion:reduce){
    .k-car-track, .k-prog-tr span, .k-q-prog span{transition:none}
}

/* hidden gewinnt immer, auch gegen .btn{display:inline-flex} */
[hidden]{display:none !important}
/* Knopf mit Icon vorne (Date Picker): Inhalt links bündig */
.k-selbtn:has(> .ki:first-child){justify-content:flex-start}
/* Sektion mit offenem Popover liegt über den folgenden Sektionen */
.k-dt-wrap{width:min(520px,100%)} .k-dt-wrap .k-table{width:100%}
.k-hc{width:min(280px,calc(100vw - 32px))}

/* ===== Animierte Buttons ===== */
.sr-only{position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap}
/* Rolling Text */
.k-roll-in{display:grid; overflow:hidden; line-height:1.3}
.k-roll-in > span{grid-area:1/1; transition:transform .45s cubic-bezier(.65,0,.35,1)}
.k-roll-in > span + span{transform:translateY(115%)}
.k-roll:hover .k-roll-in > span:first-child, .k-roll:focus-visible .k-roll-in > span:first-child{transform:translateY(-115%)}
.k-roll:hover .k-roll-in > span + span, .k-roll:focus-visible .k-roll-in > span + span{transform:none}
/* Staggered Rolling Text: je Zeichen eine Kopie als Textschatten eine Zeile tiefer */
.k-roll-st .k-ch{display:inline-block; overflow:hidden; height:1.3em; line-height:1.3em; vertical-align:top}
.k-roll-st .k-ch > i{display:inline-block; font-style:normal; text-shadow:0 1.3em currentColor; transition:transform .5s cubic-bezier(.65,0,.35,1) calc(var(--i) * 22ms)}
.k-roll-st:hover .k-ch > i, .k-roll-st:focus-visible .k-ch > i{transform:translateY(-1.3em)}
/* Add to Basket */
.k-atb{display:flex; align-items:center; gap:14px}
.k-atb .k-item{padding:12px}
.k-atb-bag{position:relative; width:48px; height:48px; flex:none; display:grid; place-items:center; border-radius:14px; color:var(--ink); background:var(--card-soft); border:1px solid var(--card-brd)}
.k-atb-bag .ki{width:22px; height:22px}
.k-atb-n{position:absolute; top:-7px; right:-7px; min-width:22px; height:22px; padding:0 6px; display:grid; place-items:center; border-radius:11px; font-size:12px; font-weight:900; color:var(--navy); background:var(--gold)}
.k-atb-btn.done{background:linear-gradient(155deg, var(--green-dk), #2e5e45); pointer-events:none}
.k-ball{position:fixed; z-index:400; width:16px; height:16px; margin:-8px 0 0 -8px; border-radius:50%; pointer-events:none; background:radial-gradient(circle at 35% 30%, #fff, #d9e2ea 60%, #9fb0bf); box-shadow:0 3px 8px rgba(0,0,0,.45)}
/* Hold to Confirm */
.k-hold{position:relative; overflow:hidden; isolation:isolate; user-select:none; -webkit-user-select:none; touch-action:none}
.k-hold-fill{position:absolute; inset:0; z-index:-1; background:var(--red); transform-origin:left; transform:scaleX(0)}
.k-hold.armed{border-color:var(--red)}
.k-hold.done{background:var(--red); border-color:var(--red)}
@media (prefers-reduced-motion:reduce){
  .k-roll-in > span, .k-roll-st .k-ch > i{transition:none}
}

.k-ctx-wrap{width:min(400px,100%)} .k-ctx-wrap .k-ctx-area{width:100%}

/* ===== Charts (system/components/charts.js) ===== */
.kc{--kc1:var(--blue); --kc2:var(--gold); --kc3:var(--green); --kc4:var(--blue-mid); --kc5:var(--gold-lt); --kc6:var(--blue-dk);
  width:min(640px,100%); margin:0; padding:16px 18px 14px; background:var(--card); border:1px solid var(--card-brd); border-radius:var(--r-lg); box-shadow:var(--inset)}
.kc > script{display:none}
.kc-head{display:flex; align-items:center; gap:10px; margin-bottom:8px}
.kc-title{font-size:15px; font-weight:900; color:#fff}
.kc-note{margin-left:auto; font-size:11.5px; color:var(--ink-mut)}
.kc-now{font-size:15px; font-weight:900; color:var(--kc1); font-variant-numeric:tabular-nums}
.kc-replay{width:30px; height:30px; flex:none; display:grid; place-items:center; color:var(--ink-mut); background:rgba(255,255,255,.06); border:1px solid var(--card-brd); border-radius:8px; cursor:pointer}
.kc-replay:hover{color:#fff; border-color:transparent; box-shadow:inset 0 2px 0 var(--blue), inset 0 -2px 0 var(--gold)}
.kc-replay svg{width:15px; height:15px}
.kc-plot{position:relative}
.kc-svg{display:block; width:100%; height:auto; overflow:visible}
.kc-grid line, .kc-grid polygon{stroke:rgba(255,255,255,.09); stroke-dasharray:4 4; fill:none}
.kc-grid line.zero{stroke:rgba(255,255,255,.3); stroke-dasharray:none}
.kc-ax{font-family:var(--font); font-size:11px; font-weight:700; fill:var(--ink-mut)}
.kc-lbl{font-family:var(--font); font-size:13px; font-weight:800; fill:var(--ink)}
.kc-val{font-family:var(--font); font-size:14px; font-weight:900; fill:#fff}
.kc-center{font-family:var(--font); font-size:30px; font-weight:900; fill:#fff}
.kc-center.sm{font-size:20px}
.kc-tile{font-family:var(--font); font-size:11px; font-weight:900; fill:#fff; pointer-events:none}
.kc-line{fill:none; stroke-width:2.5; stroke-linecap:round; stroke-linejoin:round}
.kc-bar, .kc-seg, .kc-dot, .kc-link, .kc-node, .kc [data-tip]{cursor:default; transition:opacity var(--t-fast)}
.kc-svg:has([data-tip]:hover) .kc-bar:not(:hover), .kc-svg:has(.kc-seg:hover) .kc-seg:not(:hover), .kc-svg:has(.kc-link:hover) .kc-link:not(:hover){opacity:.45}
.kc-seg{stroke:var(--navy); stroke-width:1}
.kc-seg.outer{opacity:.72}
.kc-dot{fill:var(--kc1); fill-opacity:.8; stroke:#fff; stroke-width:1.5}
.kc-dot:hover{fill:var(--kc2)}
.kc-link{fill-opacity:.35}
.kc-link:hover{fill-opacity:.6}
.kc-node{fill:#fff}
.kc-track{fill:none; stroke:rgba(255,255,255,.08); stroke-width:18}
.kc-trackf{fill:rgba(255,255,255,.08)}
.kc-ringp{fill:none; stroke-width:18; stroke-linecap:round}
.kc-needle{stroke:#fff; stroke-width:3; stroke-linecap:round}
.kc-hub{fill:#fff}
.kc-radar{fill-opacity:.22; stroke-width:2}
.kc-cross line{stroke:rgba(255,255,255,.35); stroke-dasharray:4 4}
.kc-cross circle{stroke:var(--navy); stroke-width:2}
.kc-live-dot{fill:var(--kc1); stroke:#fff; stroke-width:2}
.kc-tip{position:absolute; z-index:5; pointer-events:none; min-width:130px; padding:9px 11px; display:flex; flex-direction:column; gap:3px; font-size:12.5px; color:var(--ink);
  background:linear-gradient(155deg, rgba(17,34,51,.98), rgba(9,21,33,.97)); border:1px solid var(--card-brd); border-top:2px solid var(--blue); border-bottom:2px solid var(--gold); border-radius:10px; box-shadow:0 12px 30px rgba(0,0,0,.45)}
.kc-tip[hidden]{display:none}
.kc-tip b{color:#fff; font-size:13px}
.kc-tip span{display:flex; align-items:center; gap:7px}
.kc-tip span i{width:8px; height:8px; border-radius:50%; flex:none}
.kc-tip em{margin-left:auto; padding-left:10px; font-style:normal; font-weight:900; color:#fff; font-variant-numeric:tabular-nums}
.kc-legend{display:flex; flex-wrap:wrap; gap:6px 16px; margin-top:10px; font-size:12px; font-weight:700; color:var(--ink-mut)}
.kc-legend span{display:inline-flex; align-items:center; gap:7px}
.kc-legend i{width:10px; height:10px; border-radius:3px}
.kc-scale i{width:90px !important; height:8px !important; background:linear-gradient(90deg, color-mix(in srgb,var(--kc1) 15%,transparent), var(--kc1))}
@media (prefers-reduced-motion:reduce){ .kc-bar, .kc-seg, .kc [data-tip]{transition:none} }

/* ===== Layout-Animationen ===== */
/* Now playing (Live-Mini-Player) */
.k-np{position:relative; width:min(360px,100%); height:480px; display:flex; flex-direction:column; justify-content:flex-end}
.k-np-mini{display:flex; align-items:center; gap:12px; width:100%; padding:10px 12px; text-align:left; font:inherit; color:var(--ink); background:linear-gradient(155deg, rgba(17,34,51,.96), rgba(9,21,33,.94)); border:1px solid var(--card-brd); border-radius:14px; cursor:pointer; box-shadow:0 12px 30px rgba(0,0,0,.4)}
.k-np-mini:hover{border-color:transparent; box-shadow:inset 0 2px 0 var(--blue), inset 0 -2px 0 var(--gold), 0 12px 30px rgba(0,0,0,.4)}
.k-np-mini .k-np-cover{width:44px; height:44px; border-radius:9px}
.k-np-mini .k-np-t{font-size:14px} .k-np-mini .k-np-s{font-size:12px}
.k-np-mini > .ki{margin-left:auto; color:var(--red)}
.k-np-full{position:absolute; inset:0; display:flex; flex-direction:column; gap:10px; padding:16px; background:linear-gradient(170deg, #12324d, #0a1b2b); border:1px solid var(--card-brd); border-top:3px solid var(--blue); border-bottom:3px solid var(--gold); border-radius:22px; box-shadow:0 24px 60px rgba(0,0,0,.5)}
.k-np-full[hidden]{display:none}
.k-np-full .k-np-cover{width:100%; aspect-ratio:16/10; border-radius:14px}
.k-np-full .k-np-t{font-size:19px} .k-np-full .k-np-s{font-size:13px}
.k-np-cover{background-size:cover; background-position:center; flex:none}
.k-np-t{display:block; font-weight:900; color:#fff; width:max-content; max-width:100%}
.k-np-s{display:block; color:var(--ink-mut); width:max-content; max-width:100%}
.k-np-top{display:flex; align-items:center; justify-content:space-between}
.k-np-live{display:inline-flex; align-items:center; gap:6px; font-size:11px; font-weight:900; letter-spacing:.12em; text-transform:uppercase; color:#fff; background:var(--red); border-radius:20px; padding:3px 9px}
.k-np-live::before{content:""; width:6px; height:6px; border-radius:50%; background:#fff}
.k-np-close{width:32px; height:32px; display:grid; place-items:center; color:var(--ink); background:rgba(255,255,255,.08); border:1px solid var(--card-brd); border-radius:50%; cursor:pointer}
.k-np-close:hover{color:#fff; background:rgba(255,255,255,.14)}
.k-np-score{display:flex; justify-content:space-between; align-items:center; font-size:13px; color:var(--ink-mut)}
.k-np-score b{font-size:22px; color:#fff; font-variant-numeric:tabular-nums}
/* Karte öffnet sich (Layout-Animation) */
.k-xc{display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr)); gap:12px; width:100%}
.k-xc-card{position:relative; display:flex; flex-direction:column; justify-content:flex-end; gap:3px; min-height:220px; padding:14px; text-align:left; font:inherit; color:#fff; border:1px solid var(--card-brd); border-radius:var(--r-lg); overflow:hidden; cursor:pointer; background:#0a1b2b}
.k-xc-card .k-xc-img{position:absolute; inset:0; z-index:0}
.k-xc-card::after{content:""; position:absolute; inset:0; background:linear-gradient(transparent 35%, rgba(6,16,26,.92)); z-index:0}
.k-xc-card > span:not(.k-xc-img){position:relative; z-index:1}
.k-xc-card:hover{border-color:transparent; box-shadow:inset 0 3px 0 var(--blue), inset 0 -3px 0 var(--gold)}
.k-xc-img{background-size:cover; background-position:center}
.k-xc-k{font-size:11px; font-weight:900; letter-spacing:.14em; text-transform:uppercase; color:var(--gold-lt)}
.k-xc-t{font-size:18px; font-weight:900; line-height:1.2}
.k-xc-ov{position:fixed; inset:0; z-index:200; display:flex; align-items:center; justify-content:center; padding:16px; background:rgba(4,11,18,.7)}
.k-xc-ov[hidden]{display:none}
.k-xc-panel{position:relative; width:min(560px,100%); max-height:calc(100vh - 32px); overflow:auto; background:linear-gradient(155deg, rgba(17,34,51,.99), rgba(9,21,33,.99)); border:1px solid var(--card-brd); border-bottom:3px solid var(--gold); border-radius:var(--r-xl); box-shadow:0 30px 70px rgba(0,0,0,.55)}
.k-xc-panel .k-xc-img{display:block; height:240px; border-radius:var(--r-xl) var(--r-xl) 0 0}
.k-xc-head{display:flex; flex-direction:column; gap:4px; padding:18px 22px 0}
.k-xc-panel .k-xc-t{font-size:24px}
.k-xc-body{padding:10px 22px 22px; color:var(--ink-mut); font-size:14.5px; line-height:1.6}
.k-xc-body p{margin:0 0 12px}
.k-xc-close{position:absolute; top:12px; right:12px}
/* Foto öffnet sich (View Transition) */
.k-vt{position:relative; display:grid; grid-template-columns:repeat(4,1fr); gap:8px; width:min(520px,100%)}
.k-vt-thumb{padding:0; border:0; border-radius:10px; overflow:hidden; cursor:zoom-in; aspect-ratio:1/1; background:none}
.k-vt-thumb img{width:100%; height:100%; object-fit:cover; display:block}
.k-vt-thumb:hover{box-shadow:inset 0 3px 0 var(--blue), inset 0 -3px 0 var(--gold)}
.k-vt-big{position:fixed; inset:0; z-index:200; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px; padding:24px; background:rgba(4,11,18,.85)}
.k-vt-big[hidden]{display:none}
.k-vt-big img{max-width:min(900px,100%); max-height:78vh; border-radius:14px; box-shadow:0 30px 70px rgba(0,0,0,.6)}
.k-vt-cap{margin:0; color:var(--ink); font-weight:700; font-size:14px}
.k-vt-close{position:absolute; top:16px; right:16px}
::view-transition-group(k-vt-photo){animation-duration:.5s; animation-timing-function:cubic-bezier(.2,.9,.25,1)}
::view-transition-old(root), ::view-transition-new(root){animation-duration:.25s}

/* ===== Effekte (system/components/effects.js, Präfix fx-) ===== */
.fx-canvas{position:absolute; inset:0; width:100%; height:100%; display:block; pointer-events:none}
.fx-panel{position:relative; overflow:hidden; width:100%; background:var(--card); border:1px solid var(--card-brd); border-radius:var(--r-lg)}
/* KI */
.fx-ai{width:min(460px,100%); padding:10px; background:linear-gradient(155deg, rgba(17,34,51,.96), rgba(9,21,33,.94)); border:1px solid var(--card-brd); border-radius:16px}
.fx-ai:focus-within{border-color:var(--gold)}
.fx-ai textarea{width:100%; min-height:48px; resize:none; background:none; border:0; outline:0; color:#fff; font:inherit; font-size:14.5px; font-weight:700; padding:6px 6px 10px}
.fx-ai textarea::placeholder{color:rgba(195,210,224,.5)}
.fx-ai-bar{display:flex; align-items:center; gap:6px}
.fx-ai-chip{display:inline-flex; align-items:center; gap:6px; font:inherit; font-size:12.5px; font-weight:900; color:var(--ink); background:rgba(255,255,255,.06); border:1px solid var(--card-brd); border-radius:20px; padding:6px 11px; cursor:pointer}
.fx-ai-chip:hover{color:#fff}
.fx-ai-chip[aria-pressed="true"]{color:var(--gold-lt); border-color:var(--gold)}
.fx-ai-chip .ki{width:14px; height:14px}
.fx-ai-send{margin-left:auto; width:36px; height:36px; display:grid; place-items:center; border:0; border-radius:50%; color:#fff; background:linear-gradient(155deg,var(--blue-mid),var(--blue-dk)); cursor:pointer; transition:opacity var(--t-fast)}
.fx-ai-send:disabled{opacity:.35; cursor:default}
.fx-ai-load{display:flex; gap:14px; align-items:flex-start; width:min(420px,100%); padding:16px; background:var(--card-soft); border:1px solid var(--card-brd); border-radius:var(--r-lg)}
.fx-ai-log{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:6px; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:12.5px; color:var(--ink-mut); min-height:112px}
.fx-ai-log li{display:flex; gap:8px; align-items:center; animation:fxUp .35s var(--ease)}
.fx-ai-log li i{flex:none}
.fx-ai-log li.done{color:var(--ink)}
.fx-ai-log li .fx-ok{color:var(--green); display:grid}
.fx-ai-log li .fx-ok .ki{width:14px; height:14px}
@keyframes fxUp{from{opacity:0; transform:translateY(6px)}}
.fx-ai-think{display:inline-flex; align-items:center; gap:10px; font-size:15px; font-weight:800}
.fx-shimmer{display:inline-block; background:linear-gradient(90deg, var(--ink-mut) 0%, var(--ink-mut) 40%, #fff 50%, var(--ink-mut) 60%, var(--ink-mut) 100%); background-size:250% 100%; -webkit-background-clip:text; background-clip:text; color:transparent; animation:fxShim 2.2s linear infinite}
@keyframes fxShim{from{background-position:100% 0} to{background-position:-150% 0}}
.fx-voice{display:flex; flex-direction:column; align-items:center; gap:10px}
.fx-voice-btn{width:64px; height:64px; display:grid; place-items:center; border-radius:50%; border:1px solid var(--card-brd); color:#fff; background:rgba(255,255,255,.07); cursor:pointer; transition:background var(--t-fast)}
.fx-voice-btn .ki{width:24px; height:24px}
.fx-voice.rec .fx-voice-btn{background:var(--red); border-color:var(--red); box-shadow:0 0 0 0 rgba(218,41,41,.5); animation:fxPulse 1.6s infinite}
@keyframes fxPulse{70%{box-shadow:0 0 0 16px rgba(218,41,41,0)} 100%{box-shadow:0 0 0 0 rgba(218,41,41,0)}}
.fx-voice-bars{display:flex; align-items:center; gap:3px; height:28px}
.fx-voice-bars i{width:4px; height:28px; border-radius:3px; background:var(--blue); transform:scaleY(.15); transition:transform .12s}
.fx-voice-time{font-variant-numeric:tabular-nums; font-weight:900; color:#fff}
.fx-voice-lbl{font-size:13px; color:var(--ink-mut)}
/* Hintergründe */
.fx-bg{height:240px; display:grid; place-items:center; text-align:center}
.fx-bg > .fx-bg-txt{position:relative; z-index:1}
.fx-bg-txt b{display:block; font-size:26px; font-weight:900; color:#fff}
.fx-bg-txt span{color:var(--ink-mut); font-size:14px}
.fx-paths svg{position:absolute; inset:0; width:100%; height:100%}
.fx-paths path{fill:none; stroke:var(--blue)}
.fx-paths path.gold{stroke:var(--gold)}
.fx-shapes{background:radial-gradient(ellipse at 30% 20%, rgba(92,167,220,.18), transparent 60%), var(--card)}
.fx-shape{position:absolute; border-radius:999px; border:1px solid rgba(255,255,255,.14); backdrop-filter:blur(2px); opacity:0; transform:translateY(-120px) rotate(var(--r)); transition:opacity 1s, transform 1.4s cubic-bezier(.2,.9,.25,1)}
.fx-shape.in{opacity:1; transform:translateY(0) rotate(var(--r)); animation:fxFloat 9s ease-in-out 1.6s infinite}
@keyframes fxFloat{50%{translate:0 12px}}
.fx-shape-txt > *{opacity:0; transform:translateY(12px); transition:opacity .6s, transform .6s}
.fx-shape-txt > .in{opacity:1; transform:none}
/* Buttons */
.fx-attract{position:relative; overflow:visible}
.fx-attract-dots{position:absolute; left:50%; top:50%; width:0; height:0; pointer-events:none}
.fx-attract-dots i{position:absolute; width:5px; height:5px; margin:-2.5px; border-radius:50%; background:var(--gold-lt); opacity:.7}
.fx-particle{position:fixed; z-index:400; width:7px; height:7px; border-radius:50%; background:var(--blue); pointer-events:none}
.fx-particle.gold{background:var(--gold)}
.fx-cmd{position:relative; overflow:hidden}
.fx-cmd::after{content:""; position:absolute; top:0; bottom:0; width:40%; left:-60%; background:linear-gradient(100deg, transparent, rgba(255,255,255,.18), transparent); transition:left .7s var(--ease)}
.fx-cmd:hover::after{left:120%}
.fx-share{display:inline-flex; align-items:center; gap:8px}
.fx-share-row{display:inline-flex; gap:6px}
.fx-share-row button{width:40px; height:40px; display:grid; place-items:center; border-radius:50%; color:#fff; background:rgba(255,255,255,.08); border:1px solid var(--card-brd); cursor:pointer; opacity:0; transform:translateX(-10px) scale(.6); pointer-events:none; transition:opacity .25s, transform .35s cubic-bezier(.3,1.4,.5,1), background .2s}
.fx-share:hover .fx-share-row button, .fx-share:focus-within .fx-share-row button{opacity:1; transform:none; pointer-events:auto}
.fx-share-row button:nth-child(2){transition-delay:.05s} .fx-share-row button:nth-child(3){transition-delay:.1s}
.fx-share-row button:hover{background:var(--blue)}
/* Eingaben */
.fx-av{display:flex; flex-direction:column; gap:14px; align-items:center; width:min(360px,100%)}
.fx-av-big{width:88px; aspect-ratio:321/366; display:grid; place-items:center; padding-bottom:12%; font-weight:900; font-size:28px; color:#fff; -webkit-mask:url(../assets/img/emblem-white.png) center/contain no-repeat; mask:url(../assets/img/emblem-white.png) center/contain no-repeat}
.fx-av-opts{display:flex; gap:10px}
.fx-av-opt{width:42px; aspect-ratio:321/366; display:grid; place-items:center; padding-bottom:10%; font:inherit; font-weight:900; font-size:13px; color:#fff; background:var(--c); border:0; cursor:pointer; -webkit-mask:url(../assets/img/emblem-white.png) center/contain no-repeat; mask:url(../assets/img/emblem-white.png) center/contain no-repeat; opacity:.55; transition:opacity .2s, transform .2s}
.fx-av-opt:hover{opacity:.85}
.fx-av-opt[aria-checked="true"]{opacity:1; transform:translateY(-3px) scale(1.08)}
.fx-av .field{width:100%}
.fx-up{width:min(440px,100%); display:flex; flex-direction:column; gap:10px}
.fx-drop{display:flex; flex-direction:column; align-items:center; gap:6px; padding:26px 16px; text-align:center; border:2px dashed var(--card-brd); border-radius:var(--r-lg); color:var(--ink-mut); cursor:pointer; transition:border-color .2s, background .2s}
.fx-drop .ki{width:26px; height:26px; color:var(--blue)}
.fx-drop b{color:#fff}
.fx-drop:hover, .fx-drop.over{border-color:var(--blue); background:rgba(92,167,220,.07)}
.fx-files{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:8px}
.fx-files li{padding:10px 12px; border:1px solid var(--card-brd); border-radius:var(--r-md); background:var(--card-soft); animation:fxUp .3s var(--ease)}
.fx-files li b{display:block; color:#fff; font-size:13.5px; overflow-wrap:anywhere}
.fx-files li.err{border-color:color-mix(in srgb,var(--red) 55%,transparent)}
.fx-files li.err .k-small{color:#ff8a8a}
.fx-files li.err .k-prog-tr{display:none}
.fx-team{display:flex; align-items:center; gap:14px; padding:12px 14px; background:var(--card-soft); border:1px solid var(--card-brd); border-radius:var(--r-lg)}
.fx-team-stack{display:flex; min-width:40px}
.fx-team-av{width:36px; height:36px; margin-left:-10px; display:grid; place-items:center; border-radius:50%; font-size:12px; font-weight:900; color:#fff; background:linear-gradient(155deg,var(--blue-mid),var(--blue-dk)); border:2px solid var(--navy)}
.fx-team-av:first-child{margin-left:0}
.fx-team-av:nth-child(2n){background:linear-gradient(155deg,var(--gold),#a88635); color:var(--navy)}
.fx-team-n{min-width:92px; font-weight:900; color:#fff}
.fx-team .btn-icon{width:34px; height:34px}
.fx-team .btn-icon:disabled{opacity:.35}
/* Karten */
.fx-bento{display:grid; grid-template-columns:repeat(3,1fr); grid-auto-rows:120px; gap:10px; width:100%}
.fx-bento > div{padding:14px; background:var(--card); border:1px solid var(--card-brd); border-radius:var(--r-lg); display:flex; flex-direction:column; gap:4px; overflow:hidden; opacity:0; transform:translateY(12px); transition:opacity .5s, transform .6s var(--ease)}
.fx-bento.in > div{opacity:1; transform:none}
.fx-bento > div:nth-child(2){transition-delay:.08s} .fx-bento > div:nth-child(3){transition-delay:.16s} .fx-bento > div:nth-child(4){transition-delay:.24s}
.fx-bento .big{grid-column:span 2; grid-row:span 2}
.fx-bento .num{font-size:34px; font-weight:900; color:#fff; font-variant-numeric:tabular-nums}
.fx-bento .lbl2{font-size:12.5px; color:var(--ink-mut)}
.fx-bento .bars{display:flex; align-items:flex-end; gap:6px; flex:1}
.fx-bento .bars i{flex:1; height:100%; border-radius:4px 4px 0 0; background:var(--blue); transform-origin:bottom; transform:scaleY(0); transition:transform .8s var(--ease)}
.fx-bento.in .bars i{transform:scaleY(var(--h))}
.fx-bento .bars i:nth-child(6){background:var(--gold)}
.fx-bento .tl{list-style:none; margin:4px 0 0; padding:0; display:flex; flex-direction:column; gap:6px; font-size:12.5px; color:var(--ink)}
.fx-bento .tl li::before{content:""; display:inline-block; width:7px; height:7px; border-radius:50%; background:var(--gold); margin-right:8px}
.fx-flip{width:min(300px,100%); height:320px; perspective:1000px; cursor:pointer; border:0; padding:0; background:none; font:inherit; text-align:left}
.fx-flip-in{position:relative; width:100%; height:100%; transform-style:preserve-3d; transition:transform .7s cubic-bezier(.3,1.2,.4,1)}
.fx-flip:hover .fx-flip-in, .fx-flip.flipped .fx-flip-in, .fx-flip:focus-visible .fx-flip-in{transform:rotateY(180deg)}
.fx-flip-f, .fx-flip-b{position:absolute; inset:0; backface-visibility:hidden; border-radius:var(--r-lg); overflow:hidden; border:1px solid var(--card-brd); display:flex; flex-direction:column; justify-content:flex-end; gap:6px; padding:18px}
.fx-flip-f{background-size:cover; background-position:center; color:#fff}
.fx-flip-f::before{content:""; position:absolute; inset:0; background:linear-gradient(transparent 30%, rgba(6,16,26,.92))}
.fx-flip-f > *{position:relative}
.fx-flip-b{transform:rotateY(180deg); justify-content:flex-start; background:var(--card); border-top:3px solid var(--blue); border-bottom:3px solid var(--gold)}
.fx-flip-b ul{margin:6px 0 auto; padding-left:18px; color:var(--ink); font-size:14px; line-height:1.8}
.fx-flip-b li::marker{color:var(--gold)}
.fx-stack{position:relative; width:min(300px,100%); height:230px; border:0; padding:0; background:none; cursor:pointer; font:inherit; text-align:left; transition:height .5s var(--ease)}
.fx-stack.open{height:560px}
.fx-stack-c{position:absolute; left:0; right:0; top:0; height:170px; padding:16px; border-radius:var(--r-lg); border:1px solid var(--card-brd); background:linear-gradient(155deg,#15304a,#0c1d2e); box-shadow:0 10px 26px rgba(0,0,0,.35); display:flex; flex-direction:column; gap:4px; transition:transform .55s cubic-bezier(.3,1.2,.4,1), background .4s}
.fx-stack-c:nth-child(1){z-index:3} .fx-stack-c:nth-child(2){z-index:2; transform:translateY(22px) scale(.95); background:linear-gradient(155deg,#10263b,#0a1826)} .fx-stack-c:nth-child(3){z-index:1; transform:translateY(44px) scale(.9); background:linear-gradient(155deg,#0c1e30,#081421)}
.fx-stack:not(.open) .fx-stack-c:not(:first-child) > *{visibility:hidden}
.fx-stack.open .fx-stack-c:nth-child(2){transform:translateY(188px); background:linear-gradient(155deg,#15304a,#0c1d2e)} .fx-stack.open .fx-stack-c:nth-child(3){transform:translateY(376px); background:linear-gradient(155deg,#15304a,#0c1d2e)}
.fx-stack-c b{color:#fff; font-size:17px} .fx-stack-c .k-kick{margin-bottom:4px}
.fx-stack-c .price{margin-top:auto; font-size:22px; font-weight:900; color:#fff}
.fx-cc{width:100%; display:flex; flex-direction:column; gap:10px}
.fx-cc-track{display:flex; gap:12px; overflow-x:auto; scroll-snap-type:x mandatory; scrollbar-width:none; padding-bottom:4px}
.fx-cc-track::-webkit-scrollbar{display:none}
.fx-cc-card{flex:0 0 220px; scroll-snap-align:start; border-radius:var(--r-lg); overflow:hidden; border:1px solid var(--card-brd); background:var(--card)}
.fx-cc-card .ph{height:120px; background-size:cover; background-position:center; position:relative}
.fx-cc-card .ph .badge{position:absolute; top:8px; left:8px}
.fx-cc-card .bd{padding:12px; display:flex; flex-direction:column; gap:4px}
.fx-cc-card b{color:#fff}
.fx-cc-card .rate{display:flex; align-items:center; gap:4px; font-size:12.5px; color:var(--gold-lt); font-weight:900}
.fx-cc-card .rate .ki{width:14px; height:14px; fill:var(--gold-lt)}
.fx-cc-nav{display:flex; gap:8px; justify-content:flex-end}
.fx-cc-nav button:disabled{opacity:.35}
/* Ring-Karussell (data-fx="ring"): Karten auf einem 3D-Ring. Der Ring dreht sich über --rot,
   jede Karte steht mit rotateY(i · 360°/n) translateZ(Radius) fest darauf. Blick: data-blick="gerade|oben". */
.fx-ring{--cw:200px; --ch:270px; --r:300px; --rot:0deg; --tilt:0deg; --n:7;
  position:relative; width:100%; overflow-x:clip; outline:none; touch-action:pan-y; user-select:none; -webkit-user-select:none}
.fx-ring[data-blick="oben"]{--tilt:-9deg}
.fx-ring-stage{position:relative; height:calc(var(--ch) + 56px); perspective:1200px; perspective-origin:50% 40%; cursor:grab}
.fx-ring[data-blick="oben"] .fx-ring-stage{perspective-origin:50% 8%}
.fx-ring.drag .fx-ring-stage{cursor:grabbing}
.fx-ring-ring{position:absolute; left:50%; top:20px; width:var(--cw); height:var(--ch); margin-left:calc(var(--cw) / -2);
  transform-style:preserve-3d; transform:translateZ(calc(var(--r) * -1)) rotateX(var(--tilt)) rotateY(var(--rot)); transition:transform .9s var(--ease)}
.fx-ring.drag .fx-ring-ring{transition:none}
.fx-ring-card{position:absolute; inset:0; display:flex; flex-direction:column; overflow:hidden; text-decoration:none; color:var(--ink);
  border-radius:var(--r-lg); background:var(--frost); border:1px solid var(--card-brd); box-shadow:var(--inset);
  transform:rotateY(calc(var(--i) * 360deg / var(--n))) translateZ(var(--r)); opacity:var(--vis,1); transition:opacity .5s var(--ease), border-color .3s}
.fx-ring-card.on{border-color:var(--gold); box-shadow:var(--inset), 0 0 0 1px var(--gold)}
.fx-ring-card.far{pointer-events:none}
.fx-ring-card .ph{position:relative; height:52%; flex:none; overflow:hidden}
.fx-ring-card .ph img{width:100%; height:100%; object-fit:cover; pointer-events:none}
.fx-ring-card .ph .badge{position:absolute; top:10px; left:10px}
.fx-ring-card .bd{display:flex; flex-direction:column; gap:4px; padding:12px 14px}
.fx-ring-card b{color:#fff; font-size:16px; font-weight:900; line-height:1.2}
.fx-ring-card .bd span{font-size:13px; color:var(--ink-mut)}
.fx-ring-nav{position:absolute; top:calc(20px + var(--ch) / 2 - 18px); z-index:5}
.fx-ring-nav.l{left:0} .fx-ring-nav.r{right:0}
.fx-ring-view{display:flex; gap:6px; justify-content:center; margin-bottom:6px}
.fx-ring-picks{display:flex; flex-wrap:wrap; gap:6px; justify-content:center}
.fx-ring-pick{font:inherit; font-size:12.5px; font-weight:800; color:var(--ink-mut); background:rgba(8,18,29,.55); border:1px solid var(--card-brd); padding:6px 12px; border-radius:var(--r-pill)}
.fx-ring-pick:hover{box-shadow:inset 0 2px 0 var(--blue), inset 0 -2px 0 var(--gold); color:#fff}
.fx-ring-pick.on{border-color:var(--gold); color:var(--gold-lt); background:rgba(205,168,87,.12)}
.fx-ring-pick.on:hover{box-shadow:none}
.fx-ring:focus-visible .fx-ring-card.on{outline:2px solid var(--gold-lt); outline-offset:3px}
@media(max-width:560px){ .fx-ring{--cw:168px; --ch:236px} .fx-ring-nav{display:none} }
@media(prefers-reduced-motion:reduce){ .fx-ring-ring, .fx-ring-card{transition:none} }
/* Invertierender Text (.fx-inv): weisse Schrift rechnet sich per mix-blend-mode:difference aus dem
   Hintergrund. isolation:isolate begrenzt die Rechnung auf die eigene Fläche. Nur über Fotos oder
   klar hellen bzw. dunklen Flächen, nie auf Marken-Farben, Verläufen oder Mitteltönen. */
.fx-inv{position:relative; isolation:isolate; overflow:hidden; display:grid; place-items:center; text-align:center;
  border-radius:var(--r-lg); background-size:cover; background-position:center}
.fx-inv-t{margin:0; padding:0 16px; color:#fff; mix-blend-mode:difference; font-weight:900; text-transform:uppercase; line-height:.95; letter-spacing:-.01em}
.fx-inv-hero{width:100%; min-height:260px}
.fx-inv-hero .fx-inv-t{font-size:clamp(40px,7vw,84px)}
.fx-inv-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:10px; width:100%; margin-top:14px}
.fx-inv-grid figure{margin:0; display:flex; flex-direction:column; gap:8px}
.fx-inv-tile{height:130px}
.fx-inv-tile .fx-inv-t{font-size:clamp(22px,2.6vw,30px)}
@media(max-width:700px){ .fx-inv-grid{grid-template-columns:1fr 1fr} }
/* Einblenden beim Scrollen (.fx-rise): reines CSS über animation-timeline:view(). Das Element steigt
   auf, während es ins Bild kommt, und steht fest, sobald es ein knappes Drittel weit drin ist.
   Browser ohne Unterstützung und prefers-reduced-motion zeigen es sofort und ohne Bewegung. */
@supports (animation-timeline: view()){
  .fx-rise{animation:fxRise linear both; animation-timeline:view(); animation-range:entry 0% cover 28%}
  .fx-rise.d1{animation-range:entry 6% cover 32%} .fx-rise.d2{animation-range:entry 12% cover 36%}
  @keyframes fxRise{from{opacity:0; transform:translateY(40px)}}
}
@media(prefers-reduced-motion:reduce){ .fx-rise{animation:none} }
.fx-rise-box{width:100%; height:340px; max-height:340px; flex:none; overflow-y:auto; overflow-x:hidden; display:flex; flex-direction:column; gap:12px; padding:16px;
  border-radius:var(--r-lg); background:rgba(4,12,20,.35); border:1px solid var(--card-brd); scrollbar-width:thin}
.fx-rise-box .gap{flex:none; height:220px; display:grid; place-items:center; font-size:13px; color:var(--ink-mut)}
.fx-rise-row{display:grid; grid-template-columns:repeat(3,1fr); gap:12px; flex:none}
.fx-rise-card{padding:16px; border-radius:var(--r-md); background:var(--frost); border:1px solid var(--card-brd)}
.fx-rise-card b{display:block; color:#fff; font-size:16px} .fx-rise-card span{font-size:13px; color:var(--ink-mut)}
@media(max-width:560px){ .fx-rise-row{grid-template-columns:1fr} }
/* Gestaffelt erscheinen (data-fx="stagger"): die Kinder erscheinen nacheinander, sobald die Liste ins Bild kommt.
   Die Reihenfolge rechnet sibling-index(); Browser ohne die Funktion bekommen --i über nth-child (bis 16).
   Versteckt wird erst, wenn effects.js die Liste scharf schaltet (.armed): ohne JavaScript bleibt alles sichtbar. */
.fx-stagger > *{--i:16}
.fx-stagger > :nth-child(1){--i:0} .fx-stagger > :nth-child(2){--i:1} .fx-stagger > :nth-child(3){--i:2} .fx-stagger > :nth-child(4){--i:3} .fx-stagger > :nth-child(5){--i:4} .fx-stagger > :nth-child(6){--i:5} .fx-stagger > :nth-child(7){--i:6} .fx-stagger > :nth-child(8){--i:7} .fx-stagger > :nth-child(9){--i:8} .fx-stagger > :nth-child(10){--i:9} .fx-stagger > :nth-child(11){--i:10} .fx-stagger > :nth-child(12){--i:11} .fx-stagger > :nth-child(13){--i:12} .fx-stagger > :nth-child(14){--i:13} .fx-stagger > :nth-child(15){--i:14} .fx-stagger > :nth-child(16){--i:15} 
@supports (width: calc(1px * sibling-index())){ .fx-stagger > :nth-child(n){--i:calc(sibling-index() - 1)} }
.fx-stagger.armed > *{opacity:0; transform:translateY(14px); transition:opacity .45s var(--ease), transform .45s var(--ease); transition-delay:calc(var(--i) * var(--fx-step, 60ms))}
.fx-stagger.armed.in > *{opacity:1; transform:none}
.fx-stagger.reset > *{transition:none !important}
@media(prefers-reduced-motion:reduce){ .fx-stagger.armed > *{opacity:1; transform:none; transition:none} }
.fx-stagger-demo{position:relative; width:100%; padding-top:44px}
.fx-stagger-list{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:8px}
.fx-stagger-list li{display:grid; grid-template-columns:56px 1fr auto; gap:14px; align-items:center; padding:12px 14px; border-radius:var(--r-md); background:var(--frost); border:1px solid var(--card-brd)}
.fx-stagger-list .d{text-align:center; line-height:1.05} .fx-stagger-list .d b{display:block; font-size:22px; font-weight:900; color:#fff} .fx-stagger-list .d small{font-size:10.5px; font-weight:900; letter-spacing:.1em; text-transform:uppercase; color:var(--ink-mut)}
.fx-stagger-list .t b{display:block; color:#fff; font-size:15px} .fx-stagger-list .t span{font-size:13px; color:var(--ink-mut)}
.fx-tr{width:min(360px,100%); padding:18px; display:flex; flex-direction:column; gap:14px; background:var(--card); border:1px solid var(--card-brd); border-top:3px solid var(--blue); border-bottom:3px solid var(--gold); border-radius:var(--r-lg)}
.fx-tr-amt{font-size:30px; font-weight:900; color:#fff; font-variant-numeric:tabular-nums}
.fx-tr-steps{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:10px}
.fx-tr-step{display:flex; align-items:center; gap:10px; color:var(--ink-mut); font-size:14px; font-weight:700}
.fx-tr-step i{width:22px; height:22px; flex:none; border-radius:50%; border:2px solid var(--card-brd); display:grid; place-items:center}
.fx-tr-step.run{color:#fff} .fx-tr-step.run i{border-color:rgba(255,255,255,.12); border-top-color:var(--blue); border-bottom-color:var(--gold); animation:clSpin 1s linear infinite}
.fx-tr-step.ok{color:#fff} .fx-tr-step.ok i{border-color:var(--green); background:var(--green)}
.fx-tr-step.ok i::after{content:""; width:5px; height:9px; margin-top:-2px; border:solid #fff; border-width:0 2px 2px 0; transform:rotate(45deg)}
.fx-tr-done{display:none; align-items:center; gap:8px; color:var(--green); font-weight:900}
.fx-tr.done .fx-tr-done{display:flex}
.fx-tr-done svg{width:26px; height:26px}
.fx-tr.done .fx-tr-done path{stroke-dasharray:30; stroke-dashoffset:30; animation:fxDraw .5s .1s forwards}
@keyframes fxDraw{to{stroke-dashoffset:0}}
.fx-glass-wrap{position:relative; width:100%; height:260px; border-radius:var(--r-lg); overflow:hidden; background-size:cover; background-position:center; display:grid; place-items:center}
.fx-glass{width:min(300px,86%); padding:18px; border-radius:22px; color:#fff; background:rgba(255,255,255,.08); border:1px solid rgba(255,255,255,.28); box-shadow:inset 0 1px 0 rgba(255,255,255,.35), 0 20px 50px rgba(0,0,0,.35); backdrop-filter:blur(6px) saturate(1.4) url(#fx-liquid); -webkit-backdrop-filter:blur(6px) saturate(1.4)}
.fx-glass b{font-size:19px} .fx-glass p{margin:4px 0 12px; font-size:13.5px; color:rgba(255,255,255,.85)}
.fx-dots{height:240px; display:flex; flex-direction:column; justify-content:flex-end; padding:18px; gap:4px; cursor:crosshair}
.fx-dots > *:not(canvas){position:relative; z-index:1}
.fx-dots b{font-size:20px; color:#fff}
.fx-spots{display:grid; grid-template-columns:repeat(auto-fill,minmax(180px,1fr)); gap:12px; width:100%}
.fx-spots:hover .fx-spot:not(:hover){opacity:.55}
.fx-spot{--mx:50%; --my:50%; position:relative; padding:18px; min-height:150px; border-radius:var(--r-lg); border:1px solid var(--card-brd); background:radial-gradient(260px circle at var(--mx) var(--my), rgba(92,167,220,.14), transparent 60%), var(--card); transition:opacity .25s, transform .2s ease-out; display:flex; flex-direction:column; gap:6px}
.fx-spot .k-item-ic{margin-bottom:6px}
.fx-spot b{color:#fff}
.fx-post{width:min(420px,100%); padding:16px; border-radius:var(--r-lg); border:1px solid var(--card-brd); background:var(--card); display:flex; flex-direction:column; gap:10px; position:relative}
.fx-post:hover{border-color:transparent; box-shadow:inset 0 2px 0 var(--blue), inset 0 -2px 0 var(--gold)}
.fx-post-h{display:flex; gap:10px; align-items:center}
.fx-post-h b{color:#fff; display:flex; align-items:center; gap:5px}
.fx-post-h b .ki{width:15px; height:15px; color:var(--blue)}
.fx-post p{margin:0; color:var(--ink); font-size:14.5px; line-height:1.55}
.fx-post-ph{height:170px; border-radius:12px; background-size:cover; background-position:center}
.fx-post-f{display:flex; gap:18px; color:var(--ink-mut); font-size:13px}
.fx-post-f button{display:inline-flex; align-items:center; gap:6px; font:inherit; color:inherit; background:none; border:0; cursor:pointer; padding:0}
.fx-post-like[aria-pressed="true"]{color:var(--red)}
.fx-post-like[aria-pressed="true"] .ki{fill:var(--red)}
.fx-post-reply{margin-left:18px; padding-left:14px; border-left:2px solid var(--card-brd); display:flex; gap:10px}
/* Navigation */
.fx-profile .k-pop{min-width:250px; right:0; left:auto}
.fx-profile-btn{display:flex; align-items:center; gap:8px; padding:4px 10px 4px 4px; border-radius:30px; border:1px solid var(--card-brd); background:rgba(255,255,255,.05); color:#fff; font:inherit; font-weight:800; cursor:pointer}
.fx-profile-btn:hover{border-color:transparent; box-shadow:inset 0 2px 0 var(--blue), inset 0 -2px 0 var(--gold)}
.fx-profile-head{display:flex; gap:10px; align-items:center; padding:8px 10px 10px}
.fx-profile-head b{display:block; color:#fff}
.fx-tools{display:inline-flex; gap:4px; padding:5px; background:rgba(9,21,33,.7); border:1px solid var(--card-brd); border-radius:14px}
.fx-tools button{display:inline-flex; align-items:center; gap:0; height:38px; padding:0 10px; border:0; border-radius:10px; font:inherit; font-size:13px; font-weight:900; color:var(--ink-mut); background:none; cursor:pointer; transition:background .25s, color .25s}
.fx-tools button span{max-width:0; overflow:hidden; white-space:nowrap; opacity:0; transition:max-width .45s cubic-bezier(.3,1.2,.4,1), opacity .3s, margin .3s}
.fx-tools button:hover{color:#fff}
.fx-tools button[aria-pressed="true"]{color:var(--gold-lt); background:rgba(205,168,87,.12)}
.fx-tools button[aria-pressed="true"] span{max-width:120px; opacity:1; margin-left:8px}
/* Texte */
.fx-txt{font-size:clamp(26px,4vw,40px); font-weight:900; color:#fff; line-height:1.15; letter-spacing:-.01em}
.fx-dyn{display:inline-flex; gap:.3em; overflow:hidden}
.fx-dyn-w{display:inline-block; color:var(--gold-lt)}
.fx-glitch{position:relative; display:inline-block}
.fx-glitch::before, .fx-glitch::after{content:attr(data-text); position:absolute; inset:0}
.fx-glitch::before{color:var(--blue); animation:fxG1 2.4s infinite steps(1)}
.fx-glitch::after{color:var(--gold); animation:fxG2 2.4s infinite steps(1)}
@keyframes fxG1{0%,86%,100%{clip-path:inset(0 0 100% 0); transform:none} 88%{clip-path:inset(10% 0 55% 0); transform:translate(-4px,0)} 92%{clip-path:inset(60% 0 10% 0); transform:translate(3px,0)} 96%{clip-path:inset(35% 0 40% 0); transform:translate(-2px,0)}}
@keyframes fxG2{0%,86%,100%{clip-path:inset(0 0 100% 0); transform:none} 89%{clip-path:inset(50% 0 20% 0); transform:translate(4px,0)} 93%{clip-path:inset(15% 0 70% 0); transform:translate(-3px,0)} 97%{clip-path:inset(75% 0 5% 0); transform:translate(2px,0)}}
.fx-matrix{font-family:ui-monospace,SFMono-Regular,Menlo,monospace; cursor:pointer}
.fx-sw{display:flex; align-items:center; gap:18px}
.fx-sw-box{height:200px; overflow-y:auto; scrollbar-width:none; padding:80px 0; margin:0; list-style:none; mask-image:linear-gradient(transparent, #000 30%, #000 70%, transparent)}
.fx-sw-box::-webkit-scrollbar{display:none}
.fx-sw-box li{font-size:26px; font-weight:900; color:rgba(255,255,255,.18); transition:color .3s; padding:2px 0}
.fx-sw-box li.on{color:var(--gold-lt)}
.fx-shim-txt{background:linear-gradient(100deg, #fff 0%, #fff 40%, var(--gold-lt) 50%, #fff 60%, #fff 100%); background-size:250% 100%; -webkit-background-clip:text; background-clip:text; color:transparent; animation:fxShim 3s linear infinite}
.fx-slice{position:relative; display:inline-block; color:transparent; cursor:default}
.fx-slice::before, .fx-slice::after{content:attr(data-text); position:absolute; inset:0; color:#fff; transition:transform .4s cubic-bezier(.3,1.3,.4,1)}
.fx-slice::before{clip-path:inset(0 0 50% 0); transform:translateX(-10px)}
.fx-slice::after{clip-path:inset(50% 0 0 0); transform:translateX(10px); color:var(--gold-lt)}
.fx-slice:hover::before, .fx-slice:hover::after{transform:none}
.fx-swoosh{display:inline-block; text-shadow:3px 3px 0 var(--blue), 6px 6px 0 var(--gold), 9px 9px 0 var(--blue-dk); transition:text-shadow .35s cubic-bezier(.3,1.3,.4,1), transform .35s; cursor:default}
.fx-swoosh:hover{text-shadow:0 0 0 var(--blue), 0 0 0 var(--gold), 0 0 0 var(--blue-dk); transform:translate(3px,3px)}
.fx-tw-c{display:inline-block; width:3px; height:.9em; margin-left:3px; background:var(--gold); vertical-align:-.08em; animation:fxBlink 1s steps(1) infinite}
@keyframes fxBlink{50%{opacity:0}}
@media (prefers-reduced-motion:reduce){
  .fx-shimmer, .fx-shim-txt, .fx-glitch::before, .fx-glitch::after, .fx-tw-c, .fx-shape.in, .fx-voice.rec .fx-voice-btn{animation:none}
  .fx-flip-in, .fx-stack-c, .fx-tools button span, .fx-share-row button, .fx-bento > div, .fx-bento .bars i, .fx-shape{transition:none}
}
@media (max-width:600px){ .fx-bento{grid-template-columns:1fr 1fr} .fx-bento .big{grid-column:span 2; grid-row:span 1} }

/* Spinner-Grössen (Grundform .spin aus dem Brand Guide) */
.spin.fx-spin-sm{width:18px; height:18px; border-width:2px}
.spin.fx-spin-xs{width:14px; height:14px; border-width:2px}
.fx-post-f > *{display:inline-flex; align-items:center; gap:6px; white-space:nowrap}

/* ===== Scroll & Bewegung ===== */
.fx-replay{position:absolute; top:10px; right:10px; z-index:2}
.fx-stl{position:relative; width:min(460px,100%); padding-left:34px}
.fx-stl-track{position:absolute; left:11px; top:6px; bottom:6px; width:3px; border-radius:3px; background:rgba(255,255,255,.1); overflow:hidden}
.fx-stl-fill{position:absolute; inset:0; background:linear-gradient(var(--blue),var(--gold)); transform-origin:top; transform:scaleY(0)}
.fx-stl ol{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:26px}
.fx-stl li{position:relative; color:var(--ink-mut); transition:color .3s}
.fx-stl li::before{content:""; position:absolute; left:-29px; top:4px; width:13px; height:13px; border-radius:50%; background:var(--navy); border:2px solid rgba(255,255,255,.2); transition:background .3s, border-color .3s, transform .3s}
.fx-stl li b{display:block; font-size:17px; color:rgba(255,255,255,.45); transition:color .3s}
.fx-stl li.on b{color:#fff}
.fx-stl li.on::before{background:var(--gold); border-color:var(--gold); transform:scale(1.15)}
.fx-stl .t{font-size:12px; font-weight:900; letter-spacing:.1em; color:var(--gold-lt)}
.fx-pin{position:relative; width:min(460px,100%)}
.fx-pin-box{height:340px; overflow-y:auto; border:1px solid var(--card-brd); border-radius:var(--r-lg); background:var(--card); scrollbar-width:thin; scrollbar-color:rgba(92,167,220,.6) transparent}
.fx-pin-track{height:1400px; position:relative}
.fx-pin-stage{position:sticky; top:0; height:338px; display:flex; flex-direction:column; justify-content:center; gap:10px; padding:24px}
.fx-pin-step{position:absolute; left:24px; right:24px; opacity:0; transform:translateY(16px); transition:opacity .4s, transform .5s var(--ease)}
.fx-pin-step.on{opacity:1; transform:none}
.fx-pin-step .n{font-size:54px; font-weight:900; color:var(--gold-lt); line-height:1}
.fx-pin-step b{display:block; font-size:22px; color:#fff; margin:6px 0 4px}
.fx-pin-dots{position:absolute; right:18px; top:50%; transform:translateY(-50%); display:flex; flex-direction:column; gap:8px}
.fx-pin-dots i{width:8px; height:8px; border-radius:50%; background:rgba(255,255,255,.2); transition:background .3s, transform .3s}
.fx-pin-dots i.on{background:var(--gold); transform:scale(1.3)}
.fx-pin-bar{position:absolute; left:0; right:0; bottom:0; height:3px; background:rgba(255,255,255,.08)}
.fx-pin-bar i{display:block; height:100%; background:var(--blue); transform-origin:left; transform:scaleX(0)}
.fx-pin-hint{margin:8px 0 0; font-size:12.5px; color:var(--ink-mut)}
.fx-map{position:relative; width:min(520px,100%); border:1px solid var(--card-brd); border-radius:var(--r-lg); overflow:hidden; background:#0b1c2c}
.fx-map svg{display:block; width:100%; height:auto}
.fx-map .street{fill:none; stroke:rgba(255,255,255,.08); stroke-width:14; stroke-linecap:round}
.fx-map .rail{fill:none; stroke:rgba(255,255,255,.14); stroke-width:3; stroke-dasharray:10 6}
.fx-map .fx-route{fill:none; stroke:var(--gold); stroke-width:4; stroke-linecap:round; stroke-linejoin:round}
.fx-map text{font-family:var(--font); font-size:13px; font-weight:800; fill:var(--ink)}
.fx-map .stn{fill:var(--blue)}
.fx-route-pin{transform-box:fill-box; transform-origin:50% 100%; transform:scale(0); transition:transform .45s cubic-bezier(.3,1.5,.5,1)}
.fx-route-pin.in{transform:none}
.fx-map .pin-body{fill:var(--gold)}
.fx-table{position:relative; width:min(520px,100%); aspect-ratio:2/1.15; border-radius:var(--r-lg); overflow:hidden; border:1px solid var(--card-brd); background:linear-gradient(#1f6b45,#17583a)}
.fx-table::before{content:""; position:absolute; inset:14px; border:2px solid rgba(255,255,255,.35); border-radius:6px}
.fx-table::after{content:""; position:absolute; left:50%; top:14px; bottom:14px; width:2px; background:rgba(255,255,255,.35)}
.fx-rod{position:absolute; top:0; bottom:0; width:6px; margin-left:-3px; background:linear-gradient(90deg,#9aa6b1,#dfe6ec,#9aa6b1)}
.fx-man{position:absolute; left:-6px; width:18px; height:22px; border-radius:6px; background:var(--blue)}
.fx-man.g{background:var(--gold)}
.fx-ball{position:absolute; left:0; top:0; width:14px; height:14px; border-radius:50%; background:radial-gradient(circle at 35% 30%,#fff,#cfd8df 60%,#8e9aa5); box-shadow:0 2px 5px rgba(0,0,0,.45); offset-rotate:0deg; z-index:2}
.fx-goal-mouth{position:absolute; right:0; top:38%; width:10px; height:24%; background:rgba(255,255,255,.2); border-radius:3px 0 0 3px}
.fx-goal{position:absolute; left:50%; top:22px; margin-left:-30px; width:60px; text-align:center; font-size:22px; font-weight:900; color:#fff; text-shadow:0 2px 8px rgba(0,0,0,.5); opacity:0; transform:scale(.6); transition:opacity .3s, transform .4s cubic-bezier(.3,1.5,.5,1)}
.fx-goal.on{opacity:1; transform:none}
.fx-sort{width:min(420px,100%)}
.fx-sort ol{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:8px}
.fx-sort li{display:flex; align-items:center; gap:12px; padding:10px 12px; border:1px solid var(--card-brd); border-radius:var(--r-md); background:linear-gradient(155deg,#15304a,#0c1d2e); position:relative}
.fx-sort li.drag{z-index:5; box-shadow:0 14px 30px rgba(0,0,0,.45); border-color:var(--gold)}
.fx-sort-n{width:24px; height:24px; flex:none; display:grid; place-items:center; border-radius:50%; font-size:12px; font-weight:900; color:var(--navy); background:var(--gold-lt)}
.fx-sort li b{color:#fff; flex:1}
.fx-sort-h{width:32px; height:32px; display:grid; place-items:center; border:0; border-radius:8px; background:none; color:var(--ink-mut); cursor:grab; touch-action:none}
.fx-sort-h:hover, .fx-sort-h:focus-visible{color:#fff; background:rgba(255,255,255,.08)}
.fx-sort li.drag .fx-sort-h{cursor:grabbing}
.fx-wr{position:relative; width:100%; padding-right:44px}
.fx-wr-t{margin:0; font-size:clamp(26px,4.4vw,44px); font-weight:900; color:#fff; line-height:1.12; letter-spacing:-.01em}
.fx-wr-w{display:inline-block; overflow:hidden; vertical-align:top; padding-bottom:.08em}
.fx-wr-w > span{display:inline-block; transform:translateY(105%)}
.fx-wr.in .fx-wr-w > span{transform:none; transition:transform .7s cubic-bezier(.2,.9,.25,1) calc(var(--i) * 70ms)}
.fx-wr-t .gold{color:var(--gold-lt)}
@media (prefers-reduced-motion:reduce){ .fx-wr-w > span{transform:none} .fx-pin-step, .fx-route-pin, .fx-goal{transition:none} }

/* ===== Bedienelemente markiert man nicht (Sektion «Grössen & Touch») =====
   Ohne diese Regel markiert ein Doppelklick die Beschriftung eines Knopfes, und auf dem
   iPad öffnet langes Drücken die Lupe mit «Kopieren» — mitten im Bedienen. Text, Zahlen
   und Codes bleiben markierbar: die Regel gilt nur für Dinge, die man antippt. */
button, [role="button"], summary,
.chip-f, .rtab, .tabs button, .seg button, .ck, .tck, .sw-toggle, .k-toggle, .k-selbtn,
.k-list .k-opt, .k-pointer, .xclose, .k-cal{
  -webkit-user-select:none; user-select:none; -webkit-touch-callout:none;
}
button, [role="button"], .chip-f, .rtab, .ck, .tck, .sw-toggle{ touch-action:manipulation }

