:root{--bg:#0b0b0c;--bg2:#101011;--surface:#151515;--surface2:#1c1c1d;--border:#ffffff0f;--border-hi:#ffffff1f;--text:#eae9e7;--muted:#928f8a;--faint:#615f5b;--imk:#e3051a;--imk-lite:#ff3b4d;--imk-dim:#e3051a2e;--teal:#ff3b4d;--teal-dim:#e3051a29;--green:#22c55e;--green-dim:#22c55e21;--amber:#f59e0b;--amber-dim:#f59e0b24;--red:#ef4444;--red-dim:#ef444426;--gray:#6b7280;--gray-dim:#6b728021;--transition-hover:.15s ease-out;--transition-card-state:.2s ease-in-out;--transition-reveal:.35s ease-out;--stagger-delay:60ms;--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;--sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;font-size:14px;line-height:1.45}body{background:radial-gradient(1100px 500px at 85% -12%, #7a201812, transparent 60%), var(--bg)}.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}a{color:var(--teal);text-decoration:none}.wrap{max-width:1320px;margin:0 auto;padding:20px 22px 60px}header{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:16px;margin-bottom:22px;padding:6px 2px 20px;display:flex}.brand{align-items:baseline;gap:10px;display:flex}.brand .logo{letter-spacing:-.02em;font-size:19px;font-weight:600}.brand .logo b{color:var(--imk-lite);font-weight:700}.brand .sub{color:var(--muted);font-size:12.5px}.brand .sub b{color:var(--text);font-weight:500}.brand .rlogo{opacity:.95;height:21px;margin-left:10px}.brand .divider{background:var(--border-hi);width:1px;height:24px;margin:0 4px}.spacer{flex:1}.hbtns{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.upd{color:var(--faint);align-items:center;gap:7px;margin-right:4px;font-size:12px;display:flex}.live-dot{background:var(--green);border-radius:50%;width:7px;height:7px;animation:2.4s infinite pulse;box-shadow:0 0 #22c55e80}.live-dot.stale{background:var(--amber);animation:none}.live-dot.err{background:var(--red);animation:none}@keyframes pulse{0%{box-shadow:0 0 #22c55e73}70%{box-shadow:0 0 0 7px #22c55e00}to{box-shadow:0 0 #22c55e00}}button.btn{color:var(--text);background:var(--surface2);border:1px solid var(--border-hi);cursor:pointer;transition:background var(--transition-hover),border-color var(--transition-hover),transform var(--transition-press,.1s);border-radius:7px;padding:7px 12px;font-family:inherit;font-size:12.5px}button.btn:hover{background:#1d1d29;border-color:#fff3}button.btn:active{transform:translateY(1px)}button.btn.primary{background:var(--imk-dim);color:#ff8a95;border-color:#e3051a8c}button.btn.primary:hover{background:#e3051a47;border-color:#e3051acc}.toggle{color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:7px;font-size:12px;display:inline-flex}.toggle input{accent-color:var(--teal)}.kpis{grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:22px;display:grid}.kpi{background:var(--surface);border:1px solid var(--border);transition:border-color var(--transition-hover),transform var(--transition-hover),background var(--transition-card-state);border-radius:10px;padding:15px 16px 15px 20px;position:relative;overflow:hidden}.kpi:hover{transform:translateY(-2px)}.kpi .k-label{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;align-items:center;gap:7px;font-size:11.5px;font-weight:600;display:flex}.kpi .k-label:before{content:"";background:var(--faint);border-radius:50%;flex-shrink:0;width:8px;height:8px}.kpi .k-val{letter-spacing:-.02em;margin-top:8px;font-size:32px;font-weight:700;line-height:1}.kpi .k-sub{color:var(--faint);margin-top:5px;font-size:11.5px}.kpi .edge{width:4px;position:absolute;top:0;bottom:0;left:0}.kpi.crit{background:linear-gradient(#ef44441c,#ef44440a);border-color:#ef444473}.kpi.crit .edge{background:var(--red)}.kpi.crit .k-val{color:#ff8a8a}.kpi.crit .k-label{color:#ffb4b4}.kpi.crit .k-label:before{background:var(--red);box-shadow:0 0 8px #ef444499}.kpi.crit:hover{border-color:#ef4444b3}.kpi.warn{background:linear-gradient(#f59e0b1a,#f59e0b08);border-color:#f59e0b6b}.kpi.warn .edge{background:var(--amber)}.kpi.warn .k-val{color:#ffcf7a}.kpi.warn .k-label{color:#ffd89a}.kpi.warn .k-label:before{background:var(--amber)}.kpi.warn:hover{border-color:#f59e0ba6}.kpi.ok{border-color:#22c55e59}.kpi.ok .edge{background:var(--green)}.kpi.ok .k-val{color:#8befb0}.kpi.ok .k-label:before{background:var(--green)}.kpi.info .edge{background:#4a4a4d}.kpi.info .k-label:before{background:var(--faint)}.kpi.info:hover{border-color:var(--border-hi)}.grid{grid-template-columns:1fr 1fr;align-items:start;gap:16px;display:grid}section.card{background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden;box-shadow:0 2px 10px #0000004d}.card-h{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:13px 16px;display:flex}.card-h h2{letter-spacing:.01em;margin:0;font-size:13px;font-weight:600}.card-h .count{color:var(--faint);font-size:12px}.card-h .hint{color:var(--faint);margin-left:auto;font-size:11px}#route-list{padding:6px}.route-item{transition:background var(--transition-hover),border-color var(--transition-hover);border:1px solid #0000;border-radius:8px;align-items:flex-start;gap:12px;padding:11px 12px;display:flex}.route-item:hover{background:var(--surface2);border-color:var(--border)}.route-item .badge{border-radius:50%;flex-shrink:0;width:9px;height:9px;margin-top:5px}.badge.red{background:var(--red);box-shadow:0 0 8px #ef444480}.badge.amber{background:var(--amber)}.route-item .r-main{flex:1;min-width:0}.route-item .r-name{font-size:13.5px;font-weight:600}.route-item .r-name .sid{color:var(--faint);margin-left:6px;font-size:11px;font-weight:400}.route-item .r-city{color:var(--muted);font-size:11.5px}.route-item .r-needs{flex-wrap:wrap;gap:6px;margin-top:5px;display:flex}.chip{font-variant-numeric:tabular-nums;white-space:nowrap;border:1px solid #0000;border-radius:20px;padding:2px 8px;font-size:11px}.chip.red{background:var(--red-dim);color:#ff9d9d;border-color:#ef44444d}.chip.amber{background:var(--amber-dim);color:#ffcf7a;border-color:#f59e0b4d}.route-item .r-total{text-align:right;color:var(--muted);flex-shrink:0;font-size:11px}.route-item .r-total b{color:var(--text);font-size:17px;font-weight:600;display:block}.empty-ok{text-align:center;color:var(--muted);padding:34px 20px}.empty-ok .big{color:var(--green);margin-bottom:4px;font-size:15px;font-weight:600}#map{background:#0c0c12;width:100%;height:420px}.leaflet-container{font-family:var(--sans);background:#0c0c12}.leaflet-popup-content-wrapper{background:var(--surface2);color:var(--text);border:1px solid var(--border-hi);border-radius:8px}.leaflet-popup-tip{background:var(--surface2)}.leaflet-popup-content{margin:10px 12px;font-size:12.5px}.leaflet-popup-content .pp-name{font-size:13.5px;font-weight:600}.leaflet-popup-content .pp-row{justify-content:space-between;gap:14px;margin-top:3px;display:flex}.leaflet-popup-content .pp-row span:first-child{color:var(--muted)}.leaflet-bar a{background:var(--surface2);color:var(--text);border-color:var(--border)}.mk{border:2px solid #00000080;border-radius:50%;box-shadow:0 1px 5px #00000080}.tbl-wrap{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:12.5px}thead th{background:var(--surface);text-align:right;color:var(--muted);border-bottom:1px solid var(--border-hi);white-space:nowrap;text-transform:uppercase;letter-spacing:.03em;cursor:pointer;-webkit-user-select:none;user-select:none;padding:9px 10px;font-size:11px;font-weight:500;position:sticky;top:0}thead th.l{text-align:left}thead th:hover{color:var(--text)}tbody td{text-align:right;border-bottom:1px solid var(--border);font-variant-numeric:tabular-nums;white-space:nowrap;padding:8px 10px}tbody td.l{text-align:left}tbody tr{transition:background var(--transition-hover)}tbody tr:hover{background:var(--surface2)}.st-name{font-weight:500}.st-name .sid{color:var(--faint);margin-left:6px;font-size:10.5px;font-weight:400}.dot{vertical-align:middle;border-radius:50%;width:8px;height:8px;display:inline-block}.dot.red{background:var(--red)}.dot.amber{background:var(--amber)}.dot.green{background:var(--green)}.dot.gray{background:var(--gray)}td.cell-alarm{background:var(--red-dim);color:#ff9d9d;border-radius:4px;font-weight:600}td.cell-warn{background:var(--amber-dim);color:#ffcf7a;font-weight:600}td.total b{font-weight:600}.offline-row{opacity:.5}.skeleton{background:linear-gradient(90deg,var(--surface2) 25%,#1c1c28 50%,var(--surface2) 75%);background-size:200% 100%;border-radius:6px;animation:1.3s infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.sk-line{width:100%;height:14px;margin:9px 0}#error-banner{background:var(--red-dim);color:#ffb4b4;border:1px solid #ef444466;border-radius:9px;align-items:center;gap:12px;margin-bottom:16px;padding:11px 15px;display:none}#error-banner.show{display:flex}.reveal{opacity:0;animation:reveal var(--transition-reveal) forwards;transform:translateY(10px)}@keyframes reveal{to{opacity:1;transform:none}}.legend{color:var(--muted);border-top:1px solid var(--border);flex-wrap:wrap;gap:14px;padding:10px 16px;font-size:11.5px;display:flex}.legend span{align-items:center;gap:5px;display:inline-flex}footer{border-top:1px solid var(--border);margin-top:30px;padding-top:20px}.foot-partners{flex-wrap:wrap;justify-content:center;align-items:center;gap:22px;margin-bottom:14px;display:flex}.foot-partners .pgroup{color:var(--faint);align-items:center;gap:9px;font-size:11px;display:flex}.foot-partners img{transition:opacity var(--transition-hover)}.foot-partners .pgroup:first-of-type img{opacity:.85;height:17px}.foot-partners a:hover img{opacity:1}.foot-partners .woa{opacity:.85;border-radius:6px;height:26px}.foot-meta{color:var(--faint);text-align:center;font-size:11px;line-height:1.7}.foot-meta b{color:var(--muted);font-weight:500}@media (max-width:960px){.grid{grid-template-columns:1fr}.kpis{grid-template-columns:repeat(2,1fr)}}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}.reveal{opacity:1;transform:none}}.clickable{cursor:pointer}tbody tr.clickable:hover{background:var(--surface2)}.modal-overlay{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:1000;background:#000000a8;justify-content:center;align-items:center;padding:24px;animation:.18s ease-out reveal;display:flex;position:fixed;inset:0}.modal{background:var(--bg2);border:1px solid var(--border-hi);border-radius:14px;width:min(760px,100%);max-height:88vh;animation:.2s ease-out modalpop;overflow:auto;box-shadow:0 20px 60px #0009}@keyframes modalpop{0%{opacity:0;transform:translateY(12px)scale(.98)}to{opacity:1;transform:none}}.modal-h{align-items:flex-start;gap:12px;padding:18px 20px 6px;display:flex}.m-title{flex:1;align-items:flex-start;gap:11px;min-width:0;display:flex}.m-title .dot{flex-shrink:0;width:11px;height:11px;margin-top:5px}.m-name{letter-spacing:-.01em;font-size:18px;font-weight:700}.m-name .sid{color:var(--faint);margin-left:8px;font-size:12px;font-weight:400}.m-name .m-off{color:var(--gray);border:1px solid var(--border-hi);border-radius:20px;margin-left:8px;padding:1px 7px;font-size:11px}.m-city{color:var(--muted);margin-top:2px;font-size:12.5px}.m-close{background:var(--surface2);border:1px solid var(--border-hi);color:var(--muted);cursor:pointer;width:32px;height:32px;transition:background var(--transition-hover),color var(--transition-hover);border-radius:8px;flex-shrink:0;font-size:20px;line-height:1}.m-close:hover{color:var(--text);background:#26262a}.m-sub{color:var(--faint);border-bottom:1px solid var(--border);padding:0 20px 14px;font-size:11.5px}.bottle-grid{grid-template-columns:repeat(2,1fr);gap:12px;padding:16px 20px 22px;display:grid}.bottle-card{background:var(--surface);border:1px solid var(--border);transition:border-color var(--transition-hover),transform var(--transition-hover);border-radius:11px;gap:12px;padding:12px;display:flex}.bottle-card:hover{border-color:var(--border-hi);transform:translateY(-2px)}.bottle-card.sev-red{background:linear-gradient(#ef444414,#0000);border-color:#ef444480}.bottle-card.sev-amber{background:linear-gradient(#f59e0b12,#0000);border-color:#f59e0b73}.bc-img{background:radial-gradient(circle at 50% 40%,#ffffff0f,#0000 70%);border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:58px;height:74px;display:flex}.bc-img img{object-fit:contain;filter:drop-shadow(0 3px 6px #00000080);max-width:100%;max-height:100%}.bc-noimg{opacity:.5;font-size:30px}.bc-body{flex:1;min-width:0}.bc-name{color:var(--muted);font-size:13px}.bc-name b{color:var(--text);font-weight:600}.bc-menge{align-items:baseline;gap:6px;margin-top:4px;display:flex}.bc-num{font-size:26px;font-weight:700;line-height:1}.bottle-card.sev-red .bc-num{color:#ff8a8a}.bottle-card.sev-amber .bc-num{color:#ffcf7a}.bc-unit{color:var(--faint);font-size:11.5px}.bc-flag{text-transform:uppercase;letter-spacing:.04em;border-radius:20px;margin-left:auto;padding:2px 8px;font-size:10px;font-weight:600}.bc-flag.red{background:var(--red-dim);color:#ff9d9d}.bc-flag.amber{background:var(--amber-dim);color:#ffcf7a}.bc-flag.ok{background:var(--green-dim);color:#8befb0}.bc-preis{color:var(--faint);flex-wrap:wrap;gap:4px 14px;margin-top:7px;font-size:11.5px;display:flex}.bc-preis b{color:var(--muted);font-weight:600}.bc-thresh{color:var(--faint);opacity:.8;margin-top:6px;font-size:10.5px}@media (max-width:560px){.bottle-grid{grid-template-columns:1fr}}.login-wrap{flex-direction:column;justify-content:center;align-items:center;gap:16px;min-height:100vh;padding:24px;display:flex}.login-card{background:var(--surface);border:1px solid var(--border-hi);border-radius:14px;flex-direction:column;gap:14px;width:min(360px,100%);padding:30px 28px;display:flex;box-shadow:0 20px 60px #00000080}.login-brand{letter-spacing:-.02em;text-align:center;font-size:26px;font-weight:700}.login-brand b{color:var(--imk-lite);font-weight:700}.login-sub{color:var(--muted);text-align:center;margin-top:-8px;margin-bottom:6px;font-size:12.5px}.login-field{flex-direction:column;gap:5px;display:flex}.login-field span{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-size:11.5px;font-weight:600}.login-field input{background:var(--bg2);border:1px solid var(--border-hi);color:var(--text);transition:border-color var(--transition-hover);border-radius:8px;padding:10px 12px;font-family:inherit;font-size:14px}.login-field input:focus{border-color:var(--imk-lite);outline:none}.login-err{background:var(--red-dim);color:#ffb4b4;border:1px solid #ef444466;border-radius:8px;padding:9px 12px;font-size:12.5px}.login-btn{justify-content:center;width:100%;margin-top:4px;padding:11px;font-size:13.5px}.login-foot{color:var(--faint);font-size:11px}.set-grid{grid-template-columns:1fr 1fr;align-items:start;gap:16px;display:grid}.set-card{overflow:visible}.set-body{padding:16px}.rec-row{gap:8px;margin-bottom:9px;display:flex}.rec-row input{background:var(--bg2);border:1px solid var(--border-hi);color:var(--text);transition:border-color var(--transition-hover);border-radius:8px;flex:1;padding:9px 11px;font-family:inherit;font-size:13.5px}.rec-row input:focus{border-color:var(--imk-lite);outline:none}.rec-del{width:38px;color:var(--muted);flex-shrink:0;padding:0;font-size:17px}.rec-del:hover{color:#ff9d9d;border-color:#ef444466}.set-add{margin-top:4px;font-size:12.5px}.set-field{margin-bottom:15px}.set-label{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:7px;font-size:11.5px;font-weight:600;display:block}.set-field select{background:var(--bg2);border:1px solid var(--border-hi);width:100%;color:var(--text);border-radius:8px;padding:9px 11px;font-family:inherit;font-size:13.5px}.seg{background:var(--bg2);border:1px solid var(--border-hi);border-radius:8px;gap:3px;padding:3px;display:inline-flex}.seg-btn{color:var(--muted);cursor:pointer;transition:background var(--transition-hover),color var(--transition-hover);background:0 0;border:none;border-radius:6px;padding:7px 16px;font-family:inherit;font-size:13px}.seg-btn.on{background:var(--imk-dim);color:#ff8a95;font-weight:600}.set-check{color:var(--text);cursor:pointer;align-items:center;gap:9px;margin-top:13px;font-size:13px;display:flex}.set-check input{accent-color:var(--imk-lite);width:16px;height:16px}.set-actions{flex-wrap:wrap;align-items:center;gap:12px;margin-top:18px;display:flex}.set-saved{color:var(--green);font-size:12.5px}.set-test{color:var(--muted);font-size:12.5px}.hbtns a.btn{align-items:center;text-decoration:none;display:inline-flex}@media (max-width:820px){.set-grid{grid-template-columns:1fr}}
