/* Pro4Rail – Oberfläche. Farben und Schriften nur hier ändern (Variablen oben). */
@font-face{font-family:"Barlow";font-weight:400;font-style:normal;font-display:swap;src:url(fonts/barlow-latin-400-normal.woff2) format("woff2")}
@font-face{font-family:"Barlow";font-weight:500;font-style:normal;font-display:swap;src:url(fonts/barlow-latin-500-normal.woff2) format("woff2")}
@font-face{font-family:"Barlow";font-weight:600;font-style:normal;font-display:swap;src:url(fonts/barlow-latin-600-normal.woff2) format("woff2")}
@font-face{font-family:"Barlow";font-weight:700;font-style:normal;font-display:swap;src:url(fonts/barlow-latin-700-normal.woff2) format("woff2")}
@font-face{font-family:"DotGothic16";font-weight:400;font-style:normal;font-display:swap;src:url(fonts/dotgothic16-latin-400-normal.woff2) format("woff2")}
@font-face{font-family:"Barlow Condensed";font-weight:500;font-style:normal;font-display:swap;src:url(fonts/barlow-condensed-latin-500-normal.woff2) format("woff2")}
@font-face{font-family:"Barlow Condensed";font-weight:600;font-style:normal;font-display:swap;src:url(fonts/barlow-condensed-latin-600-normal.woff2) format("woff2")}
@font-face{font-family:"Barlow Condensed";font-weight:700;font-style:normal;font-display:swap;src:url(fonts/barlow-condensed-latin-700-normal.woff2) format("woff2")}

:root{
  color-scheme:light;
  --bg:#e8ecef;--panel:#f6f8f9;--panel2:#dde3e8;--ink:#141d28;--ink2:#47566a;--line:#c3ccd5;
  --brand:#07727a;--on-brand:#ffffff;--signal:#f0a800;--ok:#1c7c45;--bad:#b3261e;
  --tie:#b4bec8;--rail:#6c7a8a;
  --navh:0px;--r:6px;
  --sans:"Barlow","Segoe UI",system-ui,sans-serif;
  --cond:"Barlow Condensed","Barlow","Arial Narrow",sans-serif;
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#151c26;--panel:#1d2631;--panel2:#263241;--ink:#e7ecf2;--ink2:#9eacbd;--line:#324053;
  --brand:#4fd0d8;--on-brand:#0a1a22;--signal:#f2b21a;--ok:#4fc482;--bad:#ff7a6e;
  --tie:#3b4a5d;--rail:#6d8097;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:400 16px/1.5 var(--sans);font-variant-numeric:tabular-nums;min-height:100vh;display:flex;flex-direction:column}
a{color:var(--brand);text-decoration:none}
a:hover{text-decoration:underline}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:3px}
h1{font:600 30px/1.1 var(--cond);margin:0}
h2{font:600 19px/1.2 var(--sans);margin:0 0 12px}
h3{font:600 16px/1.3 var(--sans);margin:0}
p{margin:0 0 10px}

/* ---------- Kopfzeile ---------- */
.bar{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:32px;height:60px;padding:0 24px;padding-top:env(safe-area-inset-top);box-sizing:content-box;background:var(--panel);border-bottom:1px solid var(--line)}
.logo{display:block;height:44px;flex:none}
.logo img{height:100%;width:auto;display:block}
.logo .for-dark{display:none}
:root[data-theme="dark"] .logo .for-light{display:none}
:root[data-theme="dark"] .logo .for-dark{display:block}
#nav{display:flex;gap:2px;height:100%;align-items:stretch}
#nav a{display:flex;align-items:center;gap:8px;padding:0 14px;color:var(--ink2);font-weight:500;border-bottom:3px solid transparent;margin-bottom:-1px;text-decoration:none}
#nav a:hover{color:var(--ink)}
#nav a.on{color:var(--ink);border-bottom-color:var(--brand);font-weight:600}
#nav svg{width:20px;height:20px;flex:none;display:none}
.themebtn{margin-left:auto;width:40px;height:40px;display:grid;place-items:center;background:none;border:1px solid var(--line);border-radius:4px;color:var(--ink);cursor:pointer}
.themebtn:hover{background:var(--panel2)}
.themebtn svg{width:20px;height:20px}
.themebtn .moon{display:none}
:root[data-theme="dark"] .themebtn .sun{display:none}
:root[data-theme="dark"] .themebtn .moon{display:block}

/* App-Ansicht (Handy und installierte PWA): Logo mittig, Navigation unten */
@media (max-width:720px),(display-mode:standalone){
  :root{--navh:62px}
  .bar{display:grid;grid-template-columns:1fr auto 1fr;gap:0;height:56px;padding:0 14px;padding-top:env(safe-area-inset-top);box-sizing:content-box}
  .bar .logo{grid-column:2;justify-self:center;height:38px}
  .themebtn{grid-column:3;justify-self:end;margin-left:0}
  #nav{position:fixed;left:0;right:0;bottom:0;z-index:10;height:calc(var(--navh) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:var(--panel);border-top:1px solid var(--line);gap:0}
  #nav a{flex:1;flex-direction:column;justify-content:center;gap:2px;padding:0;font-size:12px;border-bottom:0;border-top:3px solid transparent;margin:-1px 0 0}
  #nav a.on{border-top-color:var(--brand)}
  #nav svg{display:block}
}

#banner:not(:empty){background:var(--panel2);border-bottom:1px solid var(--line);color:var(--ink2);padding:8px 24px;font-size:14px}

/* ---------- Seite ---------- */
main{width:100%;max-width:980px;margin:0 auto;padding:28px 24px 24px;flex:1}
@media (max-width:720px){main{padding:20px 16px 16px}}
.pagehead{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:22px;flex-wrap:wrap}
.pagehead .lead{display:flex;align-items:center;gap:14px;min-width:0}
.section{margin-bottom:32px}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:16px}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.row.sp{justify-content:space-between}
.grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
.field>label,.lbl{display:block;font-size:14px;color:var(--ink2);margin-bottom:4px}
.muted{color:var(--ink2);font-size:14px}
.hint{color:var(--ink2);font-size:14px;margin:8px 0 0}

input,select,button,textarea{font:inherit;color:var(--ink)}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=time],select{width:100%;height:42px;background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:0 11px}
select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink2) 50%),linear-gradient(135deg,var(--ink2) 50%,transparent 50%);background-position:calc(100% - 17px) 18px,calc(100% - 12px) 18px;background-size:5px 5px;background-repeat:no-repeat;padding-right:32px}
input[type=file]{width:100%;padding:8px 0}
input[type=range]{width:100%;accent-color:var(--brand)}
.btn,button{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:42px;padding:0 18px;background:var(--brand);color:var(--on-brand);border:1px solid var(--brand);border-radius:4px;font-weight:600;cursor:pointer;text-decoration:none}
.btn:hover,button:hover{filter:brightness(1.08);text-decoration:none}
.btn.ghost,button.ghost{background:transparent;color:var(--ink);border-color:var(--line)}
.btn.ghost:hover,button.ghost:hover{background:var(--panel2);filter:none}
button.danger{background:transparent;color:var(--bad);border-color:var(--bad)}
button.danger:hover{background:var(--bad);color:var(--bg);filter:none}
button.small{height:34px;padding:0 12px;font-size:14px}
button.link{height:auto;padding:0;background:none;border:0;color:var(--brand);font-weight:500}
button:disabled{opacity:.5;cursor:default}

.chip{display:inline-block;font-size:13px;border:1px solid var(--line);border-radius:12px;padding:1px 10px;color:var(--ink2)}
.status{display:inline-flex;align-items:center;gap:7px;color:var(--ink2);font-size:14px}
.status i{width:9px;height:9px;border-radius:50%;background:var(--line);border:1px solid var(--rail)}
.status.on i{background:var(--ok);border-color:var(--ok)}

/* Schalter */
.switch{display:inline-flex;align-items:center;gap:10px;cursor:pointer;font-size:16px;color:var(--ink)}
.switch input{position:absolute;opacity:0;width:1px;height:1px}
.switch .tr{width:42px;height:24px;border-radius:99px;background:var(--panel2);border:1px solid var(--rail);position:relative;flex:none;transition:background .15s}
.switch .tr::after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:var(--ink2);transition:transform .15s,background .15s}
.switch input:checked+.tr{background:var(--brand);border-color:var(--brand)}
.switch input:checked+.tr::after{transform:translateX(18px);background:var(--on-brand)}
.switch input:focus-visible+.tr{outline:2px solid var(--brand);outline-offset:2px}

/* Gleisschild: Gerätenummer wie auf dem Bahnsteig */
.gleis{flex:none;width:46px;height:46px;display:grid;place-items:center;background:var(--brand);color:var(--on-brand);border-radius:4px;font:700 28px/1 var(--cond)}

/* ---------- Geräteliste ---------- */
.devlist{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);overflow:hidden}
.dev{display:grid;grid-template-columns:46px 1fr auto;gap:16px;align-items:center;padding:14px 16px 14px 14px;color:var(--ink);border-left:4px solid var(--line);border-bottom:1px solid var(--line);text-decoration:none}
.dev:last-child{border-bottom:0}
.dev:hover{background:var(--panel2);text-decoration:none}
.dev.on{border-left-color:var(--ok)}
.dev-name{font-weight:600;font-size:18px;line-height:1.2}
.dev-meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.empty{padding:28px 20px}
.empty h2{margin-bottom:6px}

/* ---------- Gerät: Reiter ---------- */
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:22px;overflow-x:auto}
.tabs button{height:44px;background:none;color:var(--ink2);border:0;border-bottom:3px solid transparent;border-radius:0;padding:0 16px;margin-bottom:-1px;font-weight:500;white-space:nowrap}
.tabs button:hover{color:var(--ink);filter:none}
.tabs button.on{color:var(--ink);border-bottom-color:var(--brand);font-weight:600}

.disp{margin-bottom:16px}
.disp-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.disp-head h3{display:flex;align-items:center;gap:10px}
.res{background:var(--panel);border:1px solid var(--line);border-radius:4px;margin-top:4px;max-height:220px;overflow:auto}
.res button{display:flex;justify-content:flex-start;width:100%;height:auto;min-height:40px;padding:8px 12px;text-align:left;background:none;color:var(--ink);border:0;border-bottom:1px solid var(--line);border-radius:0;font-weight:400}
.res button:hover{background:var(--panel2);filter:none}

/* Vorschau Anzeigen */
.board{background:#0b2a63;border-radius:4px;padding:10px 12px;font-family:var(--cond);color:#fff;margin-top:14px;max-width:460px}
.board .bh{font:500 14px/1 var(--sans);color:#a9c1f0;margin-bottom:6px;display:flex;justify-content:space-between}
.board .br{display:grid;grid-template-columns:70px 1fr auto;gap:10px;padding:6px 0;border-top:1px solid rgba(255,255,255,.18);align-items:baseline;font-size:22px;font-weight:600}
.board .late{color:#ff8a7d;font-size:16px;margin-left:6px}
.board .okk{color:#8ee9b2;font-size:16px;margin-left:6px}

/* ---------- Ansagen-Regeln ---------- */
.rule{margin-bottom:14px}
.rule-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:12px}
.rule-head input.name{font:600 18px/1.2 var(--sans);height:38px;padding:0 8px;margin:-4px 0 0 -9px;border-color:transparent;background:transparent;max-width:360px}
.rule-head input.name:hover,.rule-head input.name:focus{border-color:var(--line);background:var(--bg)}
.rule-sum{color:var(--ink2);font-size:15px;margin:2px 0 0}
.rule.off .rule-body{opacity:.55}
.days{display:flex;gap:6px;flex-wrap:wrap}
.days button{width:42px;height:42px;padding:0;background:var(--bg);color:var(--ink2);border:1px solid var(--line);font-weight:600}
.days button.on{background:var(--brand);color:var(--on-brand);border-color:var(--brand)}
.days button:hover{filter:none;border-color:var(--rail)}
.sound{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:end;margin-top:14px}
.rule-foot{display:flex;gap:10px;margin-top:14px;flex-wrap:wrap}
.newrule{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
.newrule button{height:auto;flex-direction:column;align-items:flex-start;gap:2px;padding:12px 14px;text-align:left;background:var(--panel);color:var(--ink);border:1px solid var(--line)}
.newrule button:hover{border-color:var(--brand);filter:none}
.newrule button span{color:var(--ink2);font-weight:400;font-size:14px}

/* ---------- Anschlussplan ---------- */
.pinset{margin-bottom:22px}
.pinset h3{margin-bottom:2px}
.pinset .muted{margin-bottom:10px}
.pins{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);padding:6px 14px;max-width:640px}
.pin{display:grid;grid-template-columns:76px minmax(40px,1fr) minmax(130px,1.2fr);gap:12px;align-items:center;min-height:46px}
.pin+.pin{border-top:1px solid var(--line)}
.gpio{justify-self:start;min-width:64px;height:30px;display:grid;place-items:center;padding:0 10px;background:var(--brand);color:var(--on-brand);border-radius:3px;font:700 18px/1 var(--cond)}
.gpio.pwr{background:transparent;color:var(--ink);border:1.5px solid var(--rail)}
.track{height:12px;background-image:linear-gradient(var(--rail),var(--rail)),linear-gradient(var(--rail),var(--rail)),repeating-linear-gradient(90deg,var(--tie) 0 3px,transparent 3px 9px);background-size:100% 2px,100% 2px,100% 100%;background-position:0 1px,0 calc(100% - 1px),0 0;background-repeat:no-repeat}
.pin.head{min-height:34px;font-size:13px;border-top:0;border-bottom:1px solid var(--line)}
.pin.head+.pin{border-top:0}
.mod b{font-weight:600}
.mod small{display:block;color:var(--ink2);font-size:13px;line-height:1.3}
.callout{border-left:4px solid var(--signal);background:var(--panel);padding:10px 14px;margin-bottom:22px;font-size:15px;border-radius:0 var(--r) var(--r) 0}
.callout p:last-child{margin:0}
@media (max-width:520px){.pin{grid-template-columns:64px 28px 1fr;gap:8px}.tabs button{padding:0 11px}}

/* ---------- Speichern-Leiste ---------- */
.savebar{position:sticky;bottom:calc(var(--navh) + env(safe-area-inset-bottom) + 12px);display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:28px;padding:10px 12px 10px 16px;background:var(--panel);border:1px solid var(--line);border-radius:var(--r);flex-wrap:wrap;z-index:5}
.savebar .dirty{display:none;align-items:center;gap:8px;font-size:15px}
.savebar .dirty::before{content:"";width:10px;height:10px;background:var(--signal);border-radius:2px}
.savebar.changed .dirty{display:inline-flex}
.savebar .clean{color:var(--ink2);font-size:15px}
.savebar.changed .clean{display:none}

/* ---------- Medien ---------- */
.meter{height:8px;background:var(--panel2);border-radius:99px;overflow:hidden;margin-top:12px}
.meter i{display:block;height:100%;background:var(--brand)}
.media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:12px}
.media-item{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:10px;font-size:14px;word-break:break-word;display:flex;flex-direction:column;gap:6px}
.media-item img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:3px;display:block;background:var(--panel2)}
.media-item audio{width:100%}
.media-item .nm{font-weight:600}

/* ---------- Kopplung ---------- */
.steps{list-style:none;counter-reset:s;margin:0;padding:0}
.steps li{counter-increment:s;display:grid;grid-template-columns:34px 1fr;gap:12px;padding:10px 0;align-items:start}
.steps li+li{border-top:1px solid var(--line)}
.steps li::before{content:counter(s);width:30px;height:30px;display:grid;place-items:center;background:var(--brand);color:var(--on-brand);border-radius:3px;font:700 18px/1 var(--cond)}
.code{font:700 clamp(34px,10vw,52px)/1 var(--cond);letter-spacing:.14em;color:var(--ink);padding:16px 20px;background:var(--bg);border:1px solid var(--line);border-radius:var(--r);display:inline-block}

/* ---------- Fußzeile und Hinweise ---------- */
.foot{padding:18px 24px;padding-bottom:calc(18px + var(--navh) + env(safe-area-inset-bottom));border-top:1px solid var(--line);color:var(--ink2);font-size:14px;display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
#toast{position:fixed;left:50%;bottom:calc(var(--navh) + env(safe-area-inset-bottom) + 24px);transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:10px 18px;border-radius:4px;opacity:0;pointer-events:none;transition:opacity .2s;z-index:30;font-weight:600;max-width:90vw}
#toast.show{opacity:1}
esp-web-install-button button{height:46px;padding:0 22px}
/* ---------- Funktionsliste (Direkt, Funktionen) ---------- */
.fnlist{padding:0;overflow:hidden}
.fn{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 16px;min-height:60px;border-top:1px solid var(--line)}
.fn:first-child{border-top:0}
.fn-main{min-width:0;display:flex;flex-direction:column}
.fn-main b{font-weight:600}
.fn-main small{color:var(--ink2);font-size:14px;line-height:1.35}
.fn.slide{display:block}
.fn.slide .field{margin:0}
.fn button{flex:none}
.fn .switch .tx{min-width:2.2em}

/* ---------- Anzeigen als Klappfelder ---------- */
details.disp{padding:0}
details.disp>summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;min-height:56px;cursor:pointer}
details.disp>summary::-webkit-details-marker{display:none}
.disp-t{display:flex;flex-direction:column;min-width:0}
.disp-t b{font-weight:600}
.disp-t small{color:var(--ink2);font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chev{width:10px;height:10px;border-right:2px solid var(--ink2);border-bottom:2px solid var(--ink2);transform:rotate(45deg);flex:none;transition:transform .15s;margin:-4px 4px 0 0}
details.disp[open]>summary{border-bottom:1px solid var(--line)}
details.disp[open] .chev{transform:rotate(-135deg);margin-top:4px}
details.disp>.grid,details.disp>div:not(.row){margin-left:16px;margin-right:16px}
details.disp>.grid{margin-top:16px}
.disp-foot{margin:16px;justify-content:flex-end}
.prev{margin:18px 0 0}

/* ---------- Rocrail ---------- */
.rr-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:18px}
.rr-top .grow{flex:1}
.rr-state{display:inline-flex;align-items:center;gap:8px;font-size:15px;color:var(--ink2)}
.rr-state i{width:10px;height:10px;border-radius:2px;background:var(--tie)}
.rr-state.on i{background:var(--ok)}
.rr-state.warn i{background:var(--signal)}
.rr-state.bad i{background:var(--bad)}
.rr-stop{height:48px;padding:0 22px;background:var(--bad);color:#fff;border-color:var(--bad);font-weight:700;letter-spacing:.02em}
.rr-sub{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto}
.rr-sub button{height:44px;background:none;color:var(--ink2);border:0;border-bottom:3px solid transparent;border-radius:0;padding:0 14px;margin-bottom:-1px;white-space:nowrap;font-weight:500}
.rr-sub button.on{color:var(--ink);border-bottom-color:var(--brand);font-weight:600}
.rr-card{margin-bottom:12px}
.rr-card .head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.rr-card .head b{font-weight:600}
.rr-card .head small{display:block;color:var(--ink2);font-size:14px}
.rr-spd{display:flex;align-items:center;gap:12px;margin-top:12px}
.rr-spd input{flex:1}
.rr-spd output{min-width:3.4em;text-align:right;font-weight:600}
.rr-btns{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.rr-btns button{height:44px;flex:1 1 auto;min-width:64px;background:var(--panel2);color:var(--ink);border:1px solid var(--line)}
.rr-btns button.ghost{background:transparent}
.rr-btns button.on{background:var(--brand);color:var(--on-brand);border-color:var(--brand)}
.rr-fn{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}
.rr-fn button{height:40px;min-width:48px;padding:0 10px;background:var(--panel2);color:var(--ink);border:1px solid var(--line);font-size:14px}
.rr-fn button.on{background:var(--brand);color:var(--on-brand);border-color:var(--brand)}
.rr-items{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.rr-item{color:var(--ink);display:flex;flex-direction:column;gap:6px;align-items:flex-start;text-align:left;height:auto;min-height:72px;padding:10px 12px;background:var(--panel);border:1px solid var(--line)}
.rr-item small{color:var(--ink2);font-size:13px}
.rr-item.on{border-color:var(--brand)}
.rr-item.on small{color:var(--brand)}

/* ---------- Handy: größere Ziele, ruhigere Leiste ---------- */
@media (max-width:720px){
  .tabs{margin-left:-16px;margin-right:-16px;padding:0 8px;scroll-snap-type:x proximity;scrollbar-width:none;-webkit-overflow-scrolling:touch;mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent)}
  .tabs::-webkit-scrollbar,.rr-sub::-webkit-scrollbar{display:none}
  .tabs button{scroll-snap-align:center}
  .pagehead h1{font-size:28px}
  input[type=text],input[type=email],input[type=password],input[type=number],input[type=time],select{height:48px;font-size:16px}
  button{min-height:44px}
  button.small{height:40px}
  input[type=range]{height:32px}
  .switch .tr{width:50px;height:28px}
  .switch .tr::after{width:22px;height:22px}
  .switch input:checked+.tr::after{transform:translateX(22px)}
  .savebar{margin-left:-4px;margin-right:-4px}
  .fn{padding:12px 14px}
}
@media (max-width:420px){
  .fn:has(>button){flex-wrap:wrap}
  .fn:has(>button) button{width:100%}
  .disp-foot button{flex:1}
}

/* ---------- Startseite Direkt ---------- */
.alllights{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:24px;border-left:4px solid var(--brand)}
.dgroup{margin-bottom:26px}
.dg-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;flex-wrap:wrap}
.dg-head h2{margin:0;font-size:22px}
.dg-head h2 a{color:var(--ink)}
.fn.sub{background:var(--bg);padding-left:28px}
.callout.warn{border-left-color:var(--signal)}

/* ---------- Dialoge ---------- */
dialog.dlg{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);color:var(--ink);padding:0;width:min(420px,calc(100vw - 32px));box-shadow:0 18px 50px rgba(8,16,24,.35)}
dialog.dlg::backdrop{background:rgba(8,16,24,.55)}
dialog.dlg form{padding:20px 20px 16px}
dialog.dlg h2{margin:0 0 8px;font-size:22px}
dialog.dlg p{margin:0 0 20px;color:var(--ink2)}
.dlg-btns{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap}
@media (max-width:520px){dialog.dlg{margin:auto auto calc(16px + env(safe-area-inset-bottom))}.dlg-btns button{flex:1;min-height:48px}}
button.danger.solid{background:var(--bad);color:#fff;border-color:var(--bad)}
button.danger.solid:hover{background:var(--bad);color:#fff;filter:brightness(1.08)}

/* Der Web-Installer braucht USB am Computer und wird auf Handys und Tablets ausgeblendet. */
.desktop-hint{display:none;margin:2px 0 0}
@media (max-width:720px),(hover:none) and (pointer:coarse){
  .desktop-only{display:none!important}
  .desktop-hint{display:block}
}

/* ---------- TFT-Vorschau (Maße in Display-Pixeln, wird per Skalierung eingepasst) ---------- */
.tftwrap{position:relative;max-width:100%;border-radius:4px;box-shadow:0 0 0 4px #14181f,0 6px 18px rgba(0,0,0,.28);overflow:hidden;margin:4px 0 8px}
.tft{position:absolute;left:0;top:0;transform-origin:0 0;font-family:"Barlow",system-ui,sans-serif;line-height:1.1;overflow:hidden;font-variant-numeric:tabular-nums}
.tft b{font-weight:700}
.tft i{font-style:normal;font-weight:600}
.tft-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0 10px;border-bottom:2px solid #fff}
.tft-head .tft-st{flex:1;min-width:0;text-align:center;opacity:.85;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.tft-row{display:flex;align-items:stretch;padding:0 8px;border-bottom:1px solid rgba(255,255,255,.25)}
.tft-row .c{display:flex;flex-direction:column;justify-content:center;min-width:0;padding-right:6px}
.tft-row .c.grow{flex:1}
.tft-row .c.r{align-items:flex-end;padding-right:0}
.tft-row .dest{font-family:"Barlow Condensed","Barlow",sans-serif;font-weight:700;white-space:nowrap;overflow:hidden}
.tft-none,.tft-clock,.tft-date{text-align:center}
.tft-none{padding-top:40px;opacity:.8}
.tft-clock{font-family:"Barlow Condensed","Barlow",sans-serif;font-weight:700;padding-top:44px;line-height:1}
.tft-date{opacity:.8;margin-top:6px}
dialog.dlg.wide{width:min(720px,calc(100vw - 24px))}
.pv{margin:6px 0 14px}

@media (prefers-reduced-motion:reduce){*{transition:none!important}}

/* Anmeldung */
.authbox{max-width:440px;margin:6vh auto 0}
.authlead{margin:-4px 0 14px}
.errtxt{color:var(--bad);font-weight:500}
.okbox{color:var(--ok);font-weight:500}
.hint:empty{display:none}
.pwwrap{position:relative;display:block}.pwwrap input{padding-right:84px}
.pwtoggle{position:absolute;right:4px;top:50%;transform:translateY(-50%);background:transparent;border:0;color:var(--ink2);font-size:13px;padding:6px 8px;min-height:0;cursor:pointer}
.authlinks{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:16px 0 0;font-size:14px;color:var(--ink2)}
.linkbtn{background:none;border:0;padding:0;min-height:0;color:var(--brand);font:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.authdone p{margin:0 0 10px}.authicon{color:var(--brand);margin-bottom:8px}
.linkbtn,.pwtoggle{height:auto}
.oled{position:absolute;left:0;top:0;transform-origin:0 0;background:#030407;box-sizing:border-box;padding:16px}

/* Laufschrift, Bildwechsel */
.mq{overflow:hidden;white-space:nowrap}.mq>span,.mq-track>span{display:inline-block}
.mq-track{display:inline-block;white-space:nowrap;will-change:transform}.mq-gap{display:inline-block;height:1px}
.slides{position:absolute;inset:0}.slides img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;opacity:0}.slides img.on{opacity:1}
/* Zugzielanzeiger */
.zza{font-family:"DotGothic16","Barlow",monospace;color:#f7f4dc;font-variant-numeric:normal;line-height:1}
.zboard{position:absolute;left:0;width:100%}
.zrow{position:absolute;background:#0e4fd0;overflow:hidden}
.zs{position:absolute;top:0;bottom:0;width:2px;margin-left:-1px;background:rgba(5,12,50,.55)}
.za{position:absolute;overflow:hidden}.za.v{display:flex;flex-direction:column;justify-content:center}
.za.r{align-items:flex-end;text-align:right}.za b{font-weight:400;line-height:1;white-space:nowrap}
.za .mq{width:100%}.zstrip{background:#f1eecf;color:#0c2f8f}.zstrip.za{padding:0 4px;box-sizing:border-box;justify-content:center}
.ztime{display:block}.ztrain{display:block;margin-top:.25em}
.imgpick{display:grid;gap:6px;margin:0;padding:0;list-style:none}
.imgpick label{display:flex;align-items:center;gap:10px;padding:6px 8px;border:1px solid var(--line);border-radius:6px;background:var(--bg);cursor:pointer}
.imgpick img{width:44px;height:32px;object-fit:cover;border-radius:3px;background:var(--panel2);flex:none}
.imgpick .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.imgpick .ord{min-width:24px;height:24px;border-radius:12px;background:var(--brand);color:var(--on-brand);font:600 13px/24px var(--sans);text-align:center}
.imgpick input{width:20px;height:20px;accent-color:var(--brand);flex:none}
