/* ==========================================================================
   Beispiel-Screens (App-Fenster) · alle Regeln unter .app
   ========================================================================== */
.app{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);font-size:15px;line-height:1.5}
.app .bar{display:flex;align-items:center;gap:12px;padding:10px 16px;border-bottom:1px solid var(--line);background:var(--tint);flex-wrap:wrap}
.app .bar .jr{height:16px;width:auto;display:block}
.app .bar .t{font:500 14px var(--f-display)}
.app .bar .meta{margin-left:auto;font-size:12.5px;color:var(--muted)}
.app .body{padding:18px;display:grid;gap:18px}
.app h3{font-size:15px;margin-bottom:2px}
.app .sub{font-size:12.5px;color:var(--muted);margin:0 0 8px}
.app .kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px}
.app .kpi{border:1px solid var(--line);border-radius:10px;padding:12px 14px;display:grid;gap:2px;min-width:0}
.app .kpi .l{font-size:12.5px;color:var(--muted)}
.app .kpi .v{white-space:nowrap;font:500 25px var(--f-display);font-variant-numeric:tabular-nums}
.app .kpi .v small{font-size:14px;color:var(--muted);font-weight:400}
.app .kpi .c{font-size:12.5px;color:var(--muted)}
.app .delta{display:inline-block;font:500 12px var(--f-mono);padding:1px 7px;border-radius:999px;white-space:nowrap}
.app .up{color:var(--good);background:var(--good-bg)} .app .down{color:var(--bad);background:var(--bad-bg)} .app .mid{color:var(--warn);background:var(--warn-bg)}
.app .cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px}
.app .cols.one{grid-template-columns:minmax(0,1fr)}
.app .cols.wide-l{grid-template-columns:minmax(0,1.3fr) minmax(0,1fr)}
@media (max-width:820px){.app .cols,.app .cols.wide-l{grid-template-columns:minmax(0,1fr)}}
.app .panel{border:1px solid var(--line);border-radius:10px;padding:14px;min-width:0}
.app .ph{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap}
.app .legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--muted);margin-bottom:6px}
.app .legend i{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:-1px;margin-right:5px}
.app .legend i.ln{height:3px;width:16px;vertical-align:middle}
.app .legend i.dash{height:0;width:16px;vertical-align:middle;border-top:2px dashed currentColor;background:none}
.app svg.chart{width:100%;height:auto;display:block}
.app svg.chart text{font-family:var(--f-mono);font-size:10.5px;fill:var(--muted)}
.app .scroll{overflow-x:auto}
.app table{border-collapse:collapse;width:100%;font-size:13.5px}
.app th{font-weight:500;color:var(--muted);text-align:right;font-size:12px;padding:6px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
.app th.grp{text-align:center;border-bottom:1px solid var(--line-soft);color:var(--brand-strong);font-family:var(--f-display)}
.app th:first-child,.app td:first-child{text-align:left}
.app td{padding:6px 8px;border-bottom:1px solid var(--line-soft);text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.app td.n{font-family:var(--f-mono);font-size:12.5px}
.app td.l,.app th.l{text-align:left}
.app tr.sum td{font-weight:600;border-top:2px solid var(--line)}
.app tr.lvl0 td{font-weight:600}
.app .tog{appearance:none;border:1px solid var(--line);background:#fff;color:var(--brand-strong);width:22px;height:22px;border-radius:5px;font:600 13px/1 var(--f-mono);cursor:pointer;margin-right:8px;vertical-align:middle}
.app .tog:hover{border-color:var(--brand)}
.app .tog-sp{display:inline-block;width:30px}
.app tr.hit td{background:var(--tint)}
.app .lvl-tag{font-size:10.5px;color:var(--muted);margin-left:6px;font-family:var(--f-display);letter-spacing:.06em;text-transform:uppercase}
.app .seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.app .seg button{appearance:none;border:0;background:#fff;color:var(--muted);font:500 12.5px var(--f-display);padding:5px 12px;cursor:pointer}
.app .seg button[aria-pressed="true"]{background:var(--brand);color:#fff}
.app .pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;padding:2px 9px;border-radius:999px;white-space:nowrap}
.app .pill::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.app .ok{color:var(--good);background:var(--good-bg)} .app .wa{color:var(--warn);background:var(--warn-bg)} .app .er{color:var(--bad);background:var(--bad-bg)} .app .ne{color:var(--muted);background:var(--ne-bg)}
.app .rank{display:grid;gap:6px;font-size:13px}
.app .rank>div{display:grid;grid-template-columns:18px minmax(0,1fr) 70px;gap:8px;align-items:center}
.app .rank .bx{display:block;height:8px;border-radius:4px;background:var(--brand)}
.app .rank .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.app .rank .rv{text-align:right;font:12px var(--f-mono)}
.app .rank .ri{color:var(--muted);font:12px var(--f-mono)}
/* Packstück */
.app .scan{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.app .scan label{font-size:12.5px;color:var(--muted);width:100%}
.app .scan input{flex:1;min-width:0;font:500 18px var(--f-mono);padding:10px 12px;border:2px solid var(--brand);border-radius:8px;color:var(--ink)}
.app .abtn{appearance:none;border:0;border-radius:8px;padding:10px 16px;font:600 14px var(--f-display);background:var(--brand);color:#fff;cursor:pointer}
.app .abtn:hover{background:var(--brand-strong)}
.app .facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px 18px;margin:14px 0 0}
.app .facts div{display:grid;gap:1px}
.app .facts dt{font-size:12px;color:var(--muted)} .app .facts dd{margin:0;font-weight:500}
.app .label{margin-top:16px;border:1px dashed var(--plan);border-radius:8px;padding:12px;display:grid;grid-template-columns:auto minmax(0,1fr);gap:14px;align-items:center}
.app .label svg{width:180px;max-width:100%;height:auto}
.app .label .lt{font-size:12.5px;line-height:1.4}
.app .label .lt b{font:500 13.5px var(--f-mono)}
@media (max-width:520px){.app .label{grid-template-columns:minmax(0,1fr)}}
.app .timeline{list-style:none;margin:0;padding:0;display:grid}
.app .timeline li{display:grid;grid-template-columns:22px minmax(0,1fr);gap:10px;padding-bottom:16px;position:relative}
.app .timeline li::after{content:"";position:absolute;left:10px;top:22px;bottom:0;width:2px;background:var(--line)}
.app .timeline li:last-child::after{display:none}
.app .dot{width:22px;height:22px;border-radius:50%;border:2px solid var(--brand);background:#fff;display:grid;place-items:center;font-size:11px;color:var(--brand-strong);font-weight:600}
.app .dot.done{background:var(--brand);color:#fff}
.app .timeline .w{font-weight:500}
.app .timeline .d{font-size:12.5px;color:var(--muted)}
.app .toast{font-size:12.5px;color:var(--good);margin-top:8px;min-height:1.2em}
/* Zeiterfassung */
.app .chips{display:flex;gap:6px;flex-wrap:wrap}
.app .chip{appearance:none;border:1px solid var(--line);background:#fff;color:var(--ink);font:500 12.5px var(--f-display);padding:4px 11px;border-radius:999px;cursor:pointer}
.app .chip[aria-pressed="true"]{background:var(--brand);border-color:var(--brand);color:#fff}
.app .cal{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;font-size:12px;text-align:center}
.app .cal span{padding:5px 0;border-radius:6px;font-family:var(--f-mono)}
.app .cal .h{color:var(--muted);font-family:var(--f-display)}
.app .cal .o{color:var(--line)}
.app .cal .g{background:var(--good-bg);color:var(--good);font-weight:500}
.app .cal .y{background:var(--warn-bg);color:var(--warn);font-weight:500}
.app .cal .today{outline:2px solid var(--brand);outline-offset:-2px}
.app .aform{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.app .aform label{display:grid;gap:3px;font-size:12px;color:var(--muted)}
.app .aform input,.app .aform select{font:14px var(--f-body);padding:7px 9px;border:1px solid var(--line);border-radius:7px;color:var(--ink);min-width:0;background:#fff}
.app .aform .full{grid-column:1/-1}
.app tr.new td{background:var(--good-bg)}
/* QS live */
.app .live{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--good);font-weight:500}
.app .live::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--good)}
@media (prefers-reduced-motion:no-preference){.app .live::before{animation:pulse 1.6s ease-in-out infinite}}
@keyframes pulse{50%{opacity:.25}}
.app .lines{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
@media (max-width:820px){.app .lines{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:480px){.app .lines{grid-template-columns:minmax(0,1fr)}}
.app .line{appearance:none;text-align:left;font:inherit;color:inherit;border:1px solid var(--line);border-left:5px solid var(--good);border-radius:10px;padding:12px;background:#fff;cursor:pointer;display:grid;gap:6px}
.app .line.wa{border-left-color:var(--warn)} .app .line.er{border-left-color:var(--bad)}
.app .line[aria-pressed="true"]{border-color:var(--brand);border-left-width:5px;box-shadow:0 0 0 2px var(--tint)}
.app .line .h{display:flex;justify-content:space-between;gap:8px;align-items:center}
.app .line .h b{font:500 15px var(--f-display)}
.app .line .a{font-size:12.5px;color:var(--muted)}
.app .tests-mini{display:flex;flex-wrap:wrap;gap:4px}
.app .tm{font-size:11px;padding:1px 7px;border-radius:5px}
.app .ball{display:grid;gap:8px}
.app .region-row{display:grid;grid-template-columns:70px minmax(0,1fr);align-items:center;gap:10px;font-size:12.5px;color:var(--muted)}
.app .pts{display:flex;flex-wrap:wrap;gap:5px}
.app .pt{width:17px;height:17px;border-radius:5px;background:var(--good-bg);border:1px solid var(--good)}
.app .pt.x{background:var(--bad);border-color:var(--bad)}
/* Hero-Ausschnitt: Diagramm zeichnet sich ein */
@media (prefers-reduced-motion:no-preference){
  .draw path.ist{stroke-dasharray:var(--len);stroke-dashoffset:var(--len);animation:drawline 1.8s ease .3s forwards}
  .draw rect.b{transform-origin:center bottom;transform-box:fill-box;animation:grow .6s ease both}
}
@keyframes drawline{to{stroke-dashoffset:0}}
@keyframes grow{from{transform:scaleY(0)}}
