/**
 * Engine structural CSS — chapter-agnostic, ZERO brand values.
 * All colours/fonts/radii/shadows come from the active theme's CSS custom
 * properties (ADR-0003). Class names mirror the prototypes so behaviour and
 * layout match 1:1; only the palette/typeface are themed (corporate CD).
 */

*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--app);color:var(--ink);font-family:var(--font-body);line-height:1.55;-webkit-font-smoothing:antialiased;min-height:100vh}
.wrap{max-width:1060px;margin:0 auto;padding:0 20px}
h1,h2,h3,h4,.q{font-family:var(--font-display)}

.squig{background-image:var(--squiggle);background-repeat:repeat-x;background-position:left bottom;background-size:24px 9px;padding-bottom:11px}
.squig.grey{background-image:var(--squiggle-grey)}

/* ---------- header ---------- */
header{position:sticky;top:0;z-index:40;background:color-mix(in srgb,var(--app) 90%,transparent);backdrop-filter:blur(12px);border-bottom:1px solid var(--line2)}
.head-row{display:flex;align-items:center;gap:16px;padding:14px 20px;max-width:1060px;margin:0 auto;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:12px;flex:1;min-width:230px}
.crest{width:40px;height:40px;flex:none;border-radius:12px;background:#fff;border:1.5px solid var(--line2);display:grid;place-items:center;box-shadow:var(--shadow-sm)}
.crest svg{width:23px;height:23px}
.brand h1{font-weight:700;font-size:15.5px;color:var(--ink)}
.brand .sub{font-size:12px;color:var(--muted);font-weight:600}
.pills{display:flex;gap:8px;flex-wrap:wrap}
.pill{font-size:12px;font-weight:700;color:var(--ink-soft);background:#fff;border:1px solid var(--line2);border-radius:30px;padding:5px 12px}
.pill b{color:var(--brand)}

/* stepper */
.stepper{display:flex;gap:6px;padding:10px 20px 16px;max-width:1060px;margin:0 auto;overflow-x:auto}
.step{flex:1;min-width:118px;background:#fff;border:1.5px solid var(--line2);cursor:pointer;text-align:left;padding:9px 13px;border-radius:14px;transition:.18s}
.step:hover{border-color:var(--faint)}
.step .n{font-size:10.5px;letter-spacing:.6px;font-weight:800;color:var(--faint);text-transform:uppercase}
.step .t{font-family:var(--font-display);font-size:13px;font-weight:700;margin-top:1px;color:var(--ink-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.step.active{border-color:var(--yellow-deep);background:color-mix(in srgb,var(--yellow) 14%,#fff);box-shadow:0 0 0 3px color-mix(in srgb,var(--yellow) 22%,transparent)}
.step.active .n{color:var(--yellow-deep)} .step.active .t{color:var(--ink)}
.step.done .n{color:var(--green)} .step.done .n::before{content:"✓ "}
.step:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

main{padding:28px 0 80px}
.screen{display:none;animation:fade .35s ease}.screen.active{display:block}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.screen{animation:none}*{scroll-behavior:auto!important}}

.eyebrow{display:inline-flex;align-items:center;gap:9px;font-size:12px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:var(--muted);margin-bottom:10px}
.eyebrow::before{content:"";width:26px;height:3px;border-radius:3px;background:var(--yellow)}
h2.screen-title{font-weight:700;font-size:clamp(25px,4vw,36px);color:var(--ink);margin-bottom:14px;display:inline-block;max-width:100%}
/* Signature squiggle for titles: paint once on the block (hugs the text because
   the heading is inline-block) so a wrapped title gets ONE underline stroke,
   not a wave under every line. The inner .squig span is neutralised here. */
h2.screen-title{background-image:var(--squiggle);background-repeat:repeat-x;background-position:left bottom;background-size:24px 9px;padding-bottom:11px}
h2.screen-title .squig{background-image:none;padding-bottom:0}
.lead{color:var(--ink-soft);font-size:16px;max-width:64ch;margin-bottom:24px;font-weight:600}

.grid{display:grid;gap:20px}
@media(min-width:880px){.grid.split{grid-template-columns:312px 1fr}}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:22px;box-shadow:var(--shadow)}
.card h3{font-weight:700;font-size:16px;margin-bottom:16px;display:flex;align-items:center;gap:9px;color:var(--ink)}
.card h3 .dot{width:9px;height:9px;border-radius:50%;background:var(--yellow);flex:none}

/* buttons + nav */
.btn{font-family:var(--font-display);font-weight:700;font-size:14.5px;cursor:pointer;border-radius:30px;padding:12px 24px;transition:.18s;border:2px solid transparent}
.btn-primary{background:#fff;border-color:var(--line2);color:var(--brand)}
.btn-primary:hover{border-color:var(--brand);transform:translateY(-1px);box-shadow:var(--shadow-sm)}
.btn-ghost{background:transparent;color:var(--muted)}.btn-ghost:hover{color:var(--ink)}
.btn:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}
.btn:disabled .squig{background-image:none}
.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.nav{display:flex;justify-content:space-between;gap:12px;margin-top:30px;padding-top:22px;border-top:1px solid var(--line2)}

.audio-note{margin-top:24px;background:#fff;border:1px solid var(--line);border-left:4px solid var(--yellow);border-radius:12px;padding:15px 17px;box-shadow:var(--shadow-sm)}
.audio-note .ah{font-size:11px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:var(--faint);margin-bottom:8px}
.audio-note p{font-size:13.5px;font-weight:600;color:var(--ink-soft);font-style:italic}
footer.foot{border-top:1px solid var(--line2);padding:22px 0;color:var(--muted);font-size:12.5px;font-weight:700}
footer.foot .wrap{display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap}

/* ===== content blocks ===== */
.blocks{display:flex;flex-direction:column;gap:18px}
.prose{color:var(--ink-soft);font-size:15px;font-weight:600;max-width:70ch}
.mat-grid{display:grid;gap:18px}@media(min-width:680px){.mat-grid{grid-template-columns:1fr 1fr}}
.mat-group .gh{font-family:var(--font-display);font-weight:700;font-size:13px;letter-spacing:.4px;text-transform:uppercase;color:var(--yellow-deep);margin-bottom:11px;padding-bottom:8px;border-bottom:2px solid var(--line)}
.mat-group ul{list-style:none;display:flex;flex-direction:column;gap:9px}
.mat-group li{display:flex;gap:10px;font-size:14px;font-weight:600;align-items:flex-start;color:var(--ink)}
.mat-group li .c{color:var(--green);flex:none;font-weight:800}
.mat-group li .qy{color:var(--muted);font-weight:800;flex:none;min-width:30px}
.note-item{display:flex;gap:14px;padding:13px 0;border-bottom:1px solid var(--line)}
.note-item:last-child{border:none}
.note-item .nh{font-family:var(--font-display);font-weight:700;font-size:14px;flex:none;width:140px;color:var(--ink)}
.note-item .nb{font-size:13.5px;font-weight:600;color:var(--ink-soft)}
.reveal-grid{display:grid;gap:14px;margin-top:16px}@media(min-width:680px){.reveal-grid{grid-template-columns:1fr 1fr}}
.reveal-item{background:color-mix(in srgb,var(--app) 50%,#fff);border:1px solid var(--line);border-radius:14px;padding:15px}
.reveal-item .rt{font-family:var(--font-display);font-weight:700;font-size:14px;margin-bottom:6px;color:var(--brand)}
.reveal-item .rb{font-size:13.5px;font-weight:600;color:var(--ink-soft)}
.reveal-body{display:none}.reveal-body.show{display:block;animation:fade .3s}
.sum-list{list-style:none;display:flex;flex-direction:column;gap:14px;margin:10px 0 24px}
.sum-list li{display:flex;gap:13px;align-items:flex-start;font-size:15.5px;font-weight:600;color:var(--ink)}
.sum-list li .c{width:26px;height:26px;border-radius:9px;background:var(--green-soft);color:var(--green);display:grid;place-items:center;flex:none;font-weight:800}
.next-card{background:linear-gradient(150deg,color-mix(in srgb,var(--yellow) 16%,#fff),#fff)}
.pruef{list-style:none;display:flex;flex-direction:column;gap:8px;margin-top:14px}
.pruef li{display:flex;gap:10px;font-size:13.5px;font-weight:600;color:var(--ink)}
.pruef li .b{color:var(--faint)}
.schema{background:linear-gradient(180deg,var(--slide),var(--slide2));border-radius:var(--r);padding:8px;margin-top:8px;box-shadow:var(--shadow)}
.schema svg{display:block;width:100%;height:auto}

/* ===== hotspot-explorer ===== */
.chk{list-style:none;display:flex;flex-direction:column;gap:12px}
.chk li{display:flex;gap:11px;align-items:flex-start;font-size:14px;font-weight:600;color:var(--muted);transition:.2s}
.chk li .box{width:20px;height:20px;border:2px solid var(--line2);border-radius:7px;flex:none;margin-top:1px;display:grid;place-items:center;font-size:12px;transition:.2s}
.chk li.ok{color:var(--ink)} .chk li.ok .box{background:var(--green);border-color:var(--green);color:#fff} .chk li.ok .box::after{content:"✓"}
.progress-wrap{margin-top:20px}
.progress-lbl{display:flex;justify-content:space-between;font-size:12.5px;font-weight:700;color:var(--muted);margin-bottom:7px}
.progress-lbl b{color:var(--yellow-deep)}
.bar{height:9px;background:color-mix(in srgb,var(--line) 70%,#fff);border-radius:20px;overflow:hidden}
.bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--yellow),var(--yellow-deep));transition:width .5s cubic-bezier(.4,0,.2,1)}
.done-msg{display:none;margin-top:18px;background:color-mix(in srgb,var(--yellow) 16%,#fff);border:1px solid color-mix(in srgb,var(--yellow) 55%,#fff);border-radius:12px;padding:12px 14px;font-size:13.5px;font-weight:600;color:var(--yellow-deep);gap:10px}
.done-msg.show{display:flex}
.slide-card{background:linear-gradient(180deg,var(--slide),var(--slide2));border-radius:var(--r);padding:6px;position:relative;overflow:hidden;box-shadow:var(--shadow)}
.slide-card svg{display:block;width:100%;height:auto}
.slide-tag{position:absolute;top:16px;left:18px;font-family:var(--font-display);font-weight:700;font-size:15px;color:#6c7780}
.slide-tag small{display:block;font-family:var(--font-body);font-weight:700;font-size:10.5px;letter-spacing:.5px;color:var(--muted);text-transform:uppercase;margin-top:1px}
.hotspot{cursor:pointer}
.hotspot rect.hs{fill:var(--yellow)}
.hotspot .hsh{fill:none;stroke:#fff;stroke-width:2.2;stroke-linejoin:round;stroke-linecap:round;pointer-events:none}
.hotspot .halo{fill:var(--yellow);opacity:.4;transform-origin:center}
@media(prefers-reduced-motion:no-preference){.hotspot:not(.done) .halo{animation:pulse 2.1s ease-out infinite}}
@keyframes pulse{0%{transform:scale(.6);opacity:.45}70%{transform:scale(1.9);opacity:0}100%{opacity:0}}
.hotspot:hover rect.hs{fill:var(--yellow-deep)}
.hotspot.done rect.hs{fill:var(--green)} .hotspot.done .halo{display:none}
.hotspot:focus-visible rect.hs{stroke:var(--accent);stroke-width:3}

/* modal */
.overlay{position:fixed;inset:0;z-index:100;background:color-mix(in srgb,var(--ink) 40%,transparent);backdrop-filter:blur(3px);display:none;align-items:center;justify-content:center;padding:20px}
.overlay.open{display:flex;animation:fade .2s}
.modal{background:#fff;border-radius:22px;max-width:480px;width:100%;box-shadow:0 30px 70px -20px rgba(40,50,60,.5);max-height:86vh;overflow:auto}
.modal-head{padding:20px 22px 16px;display:flex;align-items:flex-start;gap:13px;border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff}
.modal-head .ic{width:40px;height:40px;border-radius:12px;flex:none;display:grid;place-items:center;background:color-mix(in srgb,var(--yellow) 18%,#fff);font-size:19px}
.modal-head.warn .ic{background:color-mix(in srgb,var(--orange) 20%,#fff)}
.modal-head h4{font-weight:700;font-size:17px;line-height:1.25;color:var(--ink);font-family:var(--font-display)}
.modal-head .x{margin-left:auto;background:color-mix(in srgb,var(--app) 60%,#fff);border:none;color:var(--muted);width:32px;height:32px;border-radius:10px;cursor:pointer;font-size:18px;flex:none}
.modal-head .x:hover{color:var(--ink)}
.modal-body{padding:18px 22px 24px}
.sect{margin-bottom:17px}.sect:last-child{margin-bottom:0}
.sect .lbl{font-size:11px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:var(--faint);margin-bottom:9px}
.li{display:flex;gap:10px;font-size:14px;font-weight:600;margin-bottom:8px;color:var(--ink)}
.li .m{flex:none;color:var(--green);font-weight:800}
.li.box .m{color:var(--faint)} .li.box .m::before{content:"☐"} .li.check .m::before{content:"✓"}
.li.bullet .m{color:var(--faint)} .li.bullet .m::before{content:"•"}
.li.num .m{width:21px;height:21px;border-radius:7px;background:color-mix(in srgb,var(--yellow) 18%,#fff);color:var(--yellow-deep);display:grid;place-items:center;font-size:12px;font-weight:800}
.li .v{color:var(--brand);font-weight:800}
.warn-box{background:color-mix(in srgb,var(--orange) 14%,#fff);border:1px solid color-mix(in srgb,var(--orange) 45%,#fff);border-radius:11px;padding:11px 13px;font-size:13.5px;font-weight:700;color:#b5632a;display:flex;gap:9px;margin-top:14px}

/* ===== drag-fulfil ===== */
.ril-check .crit{display:flex;align-items:center;gap:11px;padding:11px 0;border-bottom:1px solid var(--line)}
.ril-check .crit:last-of-type{border-bottom:none}
.cdot{width:22px;height:22px;border-radius:7px;border:2px solid var(--line2);flex:none;display:grid;place-items:center;font-size:12px;color:#fff;transition:.2s}
.crit.ok .cdot{background:var(--green);border-color:var(--green)} .crit.ok .cdot::after{content:"✓"}
.crit .cl{flex:1;font-size:13.5px;font-weight:700;color:var(--ink)}
.crit .cl small{display:block;font-weight:700;color:var(--muted);font-size:11.5px}
.crit .cv{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--muted);min-width:62px;text-align:right}
.crit.ok .cv{color:var(--green)} .crit.bad .cv{color:var(--brand)}
.speed{display:flex;gap:8px;margin:4px 0 16px}
.speed button{flex:1;font-family:var(--font-display);font-weight:700;font-size:13px;padding:8px;border-radius:10px;border:1.5px solid var(--line2);background:#fff;color:var(--muted);cursor:pointer}
.speed button.on{border-color:var(--yellow-deep);background:color-mix(in srgb,var(--yellow) 14%,#fff);color:var(--ink)}
.ok-banner{display:none;margin-top:16px;background:var(--green-soft);border:1px solid color-mix(in srgb,var(--green) 35%,#fff);border-radius:12px;padding:13px 15px;font-weight:700;color:var(--green);font-size:14px;align-items:center;gap:9px}
.ok-banner.show{display:flex;animation:fade .3s}
.stage-wrap{display:grid;gap:16px}@media(min-width:560px){.stage-wrap{grid-template-columns:1fr 132px}}
.stage{position:relative;background:linear-gradient(180deg,var(--slide),var(--slide2));border-radius:var(--r);height:400px;overflow:hidden;box-shadow:var(--shadow);touch-action:none}
.rail{position:absolute;left:0;right:0;top:8%;height:26px;background:repeating-linear-gradient(90deg,#3a3027 0 7px,transparent 7px 30px),#171b21;border-top:3px solid #5b6573;border-bottom:3px solid #5b6573}
.rail-lbl{position:absolute;top:calc(8% - 18px);left:12px;font-size:10.5px;font-weight:800;color:#6c7780;letter-spacing:.5px}
.road{position:absolute;top:0;bottom:0;left:43%;width:15%;background:var(--road)}
.road::before{content:"";position:absolute;left:50%;top:0;bottom:0;width:5px;transform:translateX(-50%);background:repeating-linear-gradient(180deg,#fff 0 18px,transparent 18px 40px)}
.road-lbl{position:absolute;bottom:8px;left:50.5%;transform:translateX(-50%);font-size:10px;font-weight:800;color:#cdd5da;letter-spacing:1px}
.track{position:absolute;z-index:2}
.track.vert{width:0;border-left:2px dashed #8893a0}
.track.horiz{height:0;border-top:2px dashed #8893a0}
.zone{position:absolute;background:color-mix(in srgb,var(--green) 30%,transparent);border:1.5px solid color-mix(in srgb,var(--green) 70%,transparent);border-radius:7px}
.zone.vert{left:-9px;width:18px}.zone.horiz{top:-9px;height:18px}
.handle{position:absolute;transform:translate(-50%,-50%);cursor:grab;touch-action:none;z-index:5;display:flex;flex-direction:column;align-items:center;gap:3px}
.handle.grab{cursor:grabbing}
.handle:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}
.handle .ico{filter:drop-shadow(0 3px 5px rgba(0,0,0,.25))}
.bub{background:#fff;border:1.5px solid var(--line2);border-radius:20px;padding:2px 9px;font-family:var(--font-display);font-weight:700;font-size:12px;color:var(--ink);white-space:nowrap}
.handle.ok .bub{border-color:var(--green);color:var(--green)}
.baum{position:absolute;height:7px;border-radius:2px;transform:translateY(-50%);z-index:3;background:repeating-linear-gradient(90deg,var(--red) 0 9px,#fbfbfb 9px 18px)}
.elev{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:14px 10px;position:relative;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;align-items:center}
.elev .et{font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;color:var(--faint);text-align:center;margin-bottom:8px}
.elev .col{position:relative;flex:1;width:46px;min-height:230px}
.elev .ground{position:absolute;left:-6px;right:-6px;bottom:0;height:4px;background:var(--muted);border-radius:2px}
.elev .mast{position:absolute;left:50%;bottom:0;top:8%;width:4px;transform:translateX(-50%);background:#b4bdc4}
.hint-inline{font-size:12px;font-weight:700;color:var(--muted);margin-top:10px;text-align:center}

/* ===== build-sim ===== */
.stepbar{display:flex;gap:6px;margin-bottom:18px}
.stepbar i{flex:1;height:7px;border-radius:20px;background:color-mix(in srgb,var(--line) 70%,#fff)}
.stepbar i.on{background:linear-gradient(90deg,var(--yellow),var(--yellow-deep))}
.sim-step{display:none}.sim-step.active{display:block}
.sim-head{font-family:var(--font-display);font-weight:700;font-size:16px;margin-bottom:4px;color:var(--ink)}
.sim-sub{font-size:13.5px;font-weight:600;color:var(--ink-soft);margin-bottom:16px}
.platten-grid{display:grid;gap:10px;max-width:330px;margin:0 auto 8px}
.pcell{aspect-ratio:1.15;border:2px dashed var(--line2);border-radius:10px;background:color-mix(in srgb,var(--app) 50%,#fff);cursor:pointer;display:grid;place-items:center;transition:.15s;font-size:11px;font-weight:800;color:var(--faint)}
.pcell:hover{border-color:var(--faint)}
.pcell:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.pcell.filled{border-style:solid;border-color:#1d2227;background:#1d2227;color:#fff}
.street-arrow{text-align:center;font-size:11.5px;font-weight:800;color:var(--muted);letter-spacing:1px;margin:4px 0 14px}
.feedback{font-size:13.5px;font-weight:700;border-radius:11px;padding:11px 14px;margin-top:6px;display:none}
.feedback.show{display:block;animation:fade .25s}
.feedback.ok{background:var(--green-soft);color:var(--green);border:1px solid color-mix(in srgb,var(--green) 35%,#fff)}
.feedback.bad{background:color-mix(in srgb,var(--yellow) 16%,#fff);color:var(--yellow-deep);border:1px solid color-mix(in srgb,var(--yellow) 50%,#fff)}
.level-wrap{max-width:380px;margin:0 auto}
.bubble-tube{height:30px;border:2px solid var(--line2);border-radius:30px;background:var(--green-soft);position:relative;overflow:hidden;margin:14px 0}
.bubble-tube .target{position:absolute;left:50%;top:0;bottom:0;width:42px;transform:translateX(-50%);border-left:2px dashed var(--green);border-right:2px dashed var(--green)}
.bubble-tube .ball{position:absolute;top:50%;width:22px;height:22px;border-radius:50%;background:var(--green);transform:translate(-50%,-50%);transition:left .05s}
input[type=range]{width:100%;accent-color:var(--yellow-deep)}
.mc{display:flex;flex-direction:column;gap:10px;max-width:520px}
.mc button{text-align:left;border:2px solid var(--line2);background:#fff;border-radius:12px;padding:12px 15px;font-size:13.5px;font-weight:700;color:var(--ink);cursor:pointer;transition:.15s}
.mc button:hover{border-color:var(--faint)}
.mc button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.mc button.ok{border-color:var(--green);background:var(--green-soft)}
.mc button.bad{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 8%,#fff)}

/* gated-action (verriegelung) */
.lock-grid{display:grid;gap:20px}@media(min-width:620px){.lock-grid{grid-template-columns:1fr 300px}}
.lock-stage{background:linear-gradient(180deg,var(--slide),var(--slide2));border-radius:var(--r);height:260px;position:relative;overflow:hidden;box-shadow:var(--shadow)}
.lock-post{position:absolute;left:60px;bottom:30px;width:16px;height:120px;background:#b4bdc4;border:2px solid var(--ink-soft);border-radius:4px}
.lock-arm{position:absolute;left:64px;bottom:140px;width:170px;height:12px;border-radius:3px;transform-origin:left center;transform:rotate(-78deg);transition:transform 1.1s cubic-bezier(.5,0,.3,1);background:repeating-linear-gradient(90deg,var(--red) 0 16px,#fbfbfb 16px 32px);border:1px solid #b0413a}
.lock-stage.open .lock-arm{transform:rotate(-4deg)}
@media(prefers-reduced-motion:reduce){.lock-arm{transition:none}}
.lock-base{position:absolute;left:40px;bottom:0;width:60px;height:34px;background:#5c666f;border-radius:6px}
.lock-state{position:absolute;top:14px;right:16px;font-family:var(--font-display);font-weight:700;font-size:13px;padding:6px 13px;border-radius:20px;background:#fff;border:1.5px solid var(--brand);color:var(--brand)}
.lock-stage.open .lock-state{border-color:var(--green);color:var(--green)}
.precheck{list-style:none;display:flex;flex-direction:column;gap:10px;margin-bottom:16px}
.precheck li{display:flex;gap:10px;align-items:center;font-size:13.5px;font-weight:700;color:var(--ink);cursor:pointer;user-select:none}
.precheck li .cb{width:20px;height:20px;border:2px solid var(--line2);border-radius:6px;flex:none;display:grid;place-items:center;font-size:12px;color:#fff}
.precheck li.on .cb{background:var(--green);border-color:var(--green)}.precheck li.on .cb::after{content:"✓"}
.precheck li:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}

/* ===== order-sort ===== */
.order{display:flex;flex-direction:column;gap:10px;max-width:560px}
.oitem{display:flex;align-items:center;gap:12px;background:#fff;border:1.5px solid var(--line2);border-radius:12px;padding:12px 14px}
.oitem .onum{width:26px;height:26px;border-radius:8px;background:color-mix(in srgb,var(--app) 55%,#fff);color:var(--muted);font-family:var(--font-display);font-weight:700;display:grid;place-items:center;flex:none}
.oitem .ot{flex:1;font-size:13.5px;font-weight:700;color:var(--ink)}
.oitem .mv{display:flex;flex-direction:column;gap:3px}
.oitem .mv button{width:26px;height:18px;border:1px solid var(--line2);background:#fff;border-radius:6px;cursor:pointer;color:var(--muted);font-size:10px;line-height:1}
.oitem .mv button:hover{border-color:var(--faint);color:var(--ink)}
.oitem .mv button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.oitem.correct{border-color:var(--green);background:var(--green-soft)}
.oitem.wrong{border-color:color-mix(in srgb,var(--yellow) 50%,#fff);background:color-mix(in srgb,var(--yellow) 14%,#fff)}

/* ===== checklist ===== */
.clgrid{display:grid;gap:18px}@media(min-width:680px){.clgrid{grid-template-columns:1fr 1fr}}
.clgroup .gh{font-family:var(--font-display);font-weight:700;font-size:13px;text-transform:uppercase;letter-spacing:.4px;color:var(--yellow-deep);margin-bottom:10px;padding-bottom:7px;border-bottom:2px solid var(--line)}
.clgroup ul{list-style:none;display:flex;flex-direction:column;gap:9px}
.clgroup li{display:flex;gap:10px;align-items:flex-start;font-size:13.5px;font-weight:600;color:var(--ink);cursor:pointer;user-select:none}
.clgroup li .cb{width:19px;height:19px;border:2px solid var(--line2);border-radius:6px;flex:none;margin-top:1px;display:grid;place-items:center;font-size:11px;color:#fff}
.clgroup li.on{color:var(--muted)} .clgroup li.on .cb{background:var(--green);border-color:var(--green)} .clgroup li.on .cb::after{content:"✓"}
.clgroup li:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
.cl-prog{margin:18px 0 8px}

/* ===== config-tool ===== */
.tool{background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;box-shadow:var(--shadow)}
.tool-bar{background:color-mix(in srgb,var(--app) 55%,#fff);border-bottom:1px solid var(--line);padding:12px 18px;display:flex;align-items:center;gap:9px}
.tool-bar .lights{display:flex;gap:6px}.tool-bar .lights i{width:11px;height:11px;border-radius:50%}
.tool-bar .lights i:nth-child(1){background:var(--red)}.tool-bar .lights i:nth-child(2){background:var(--yellow)}.tool-bar .lights i:nth-child(3){background:var(--green)}
.tool-bar .name{font-family:var(--font-display);font-weight:700;font-size:13.5px;color:var(--ink-soft)}
.tool-grid{display:grid}@media(min-width:760px){.tool-grid{grid-template-columns:1fr 1fr}}
.tool-col{padding:22px}.tool-col+.tool-col{border-top:1px solid var(--line)}
@media(min-width:760px){.tool-col+.tool-col{border-top:none;border-left:1px solid var(--line)}}
.field{margin-bottom:18px}
.field>label{display:block;font-size:13px;font-weight:800;color:var(--ink-soft);margin-bottom:8px}
select,input[type=number]{width:100%;background:#fff;border:2px solid var(--line2);color:var(--ink);font-family:var(--font-body);font-weight:700;font-size:14.5px;padding:11px 13px;border-radius:12px;transition:.15s}
select:focus,input:focus{outline:none;border-color:var(--yellow-deep);box-shadow:0 0 0 3px color-mix(in srgb,var(--yellow) 22%,transparent)}
.hint{font-size:12.5px;font-weight:700;margin-top:8px;display:flex;gap:7px;min-height:18px;color:var(--muted)}
.hint.ok{color:var(--green)}.hint.warn{color:var(--yellow-deep)}.hint.err{color:var(--brand)}
.cable-row{display:flex;align-items:center;gap:10px;margin-bottom:13px}
.cable-row label{flex:1;font-size:13px;font-weight:700;color:var(--ink-soft)}
.cable-row input{width:84px;flex:none}
.cable-row .rec{width:120px;flex:none;font-size:12px;font-weight:800;text-align:right;color:var(--faint)}
.cable-row .rec.set{color:var(--green)}.cable-row .rec.warn{color:var(--yellow-deep)}
.result{margin-top:18px;border-radius:14px;overflow:hidden;border:1px solid var(--line);display:none}
.result.show{display:block;animation:fade .3s}
.result.ok{border-color:color-mix(in srgb,var(--green) 35%,#fff)}.result.bad{border-color:color-mix(in srgb,var(--yellow) 50%,#fff)}
.result-head{padding:13px 17px;font-family:var(--font-display);font-weight:700;font-size:14.5px;display:flex;align-items:center;gap:9px}
.result.ok .result-head{background:var(--green-soft);color:var(--green)}
.result.bad .result-head{background:color-mix(in srgb,var(--yellow) 16%,#fff);color:var(--yellow-deep)}
.result-body{padding:15px 17px}
.kv{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px dashed var(--line2);font-size:13.5px;font-weight:700}
.kv:last-child{border:none}.kv .k{color:var(--muted)}.kv .v{color:var(--ink)}.kv .v.hl{color:var(--yellow-deep)}

/* ---------- review comment widget (review build only) ---------- */
.cw-fab{position:fixed;right:20px;bottom:20px;z-index:9000;width:52px;height:52px;border:none;border-radius:50%;
  background:var(--brand);color:#fff;font-size:22px;cursor:pointer;box-shadow:var(--shadow);transition:.15s}
.cw-fab:hover{transform:translateY(-2px)}
.cw-fab.hidden{display:none}
.cw-panel{position:fixed;right:20px;bottom:20px;z-index:9001;width:340px;max-width:calc(100vw - 32px);max-height:80vh;
  display:none;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  box-shadow:var(--shadow);font-family:var(--font-body);overflow:hidden}
.cw-panel.open{display:flex}
.cw-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;background:var(--brand);color:#fff}
.cw-head strong{font-family:var(--font-display);font-size:15px;letter-spacing:.3px}
.cw-x{background:none;border:none;color:#fff;font-size:22px;line-height:1;cursor:pointer;opacity:.85}
.cw-x:hover{opacity:1}
.cw-meta{display:flex;flex-wrap:wrap;gap:6px;padding:10px 14px 0}
.cw-chip{font-size:11.5px;font-weight:800;color:var(--brand);background:color-mix(in srgb,var(--accent) 16%,#fff);
  border-radius:999px;padding:3px 9px}
.cw-chip.cw-anchor{color:var(--ink-soft);background:var(--faint)}
.cw-row{padding:8px 14px 0}
.cw-actions{display:flex;gap:8px;align-items:center;justify-content:space-between;padding-bottom:12px}
.cw-in,.cw-ta{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:10px;padding:8px 10px;
  font:inherit;font-size:13.5px;color:var(--ink);background:#fff}
.cw-ta{margin:8px 14px 0;width:calc(100% - 28px);resize:vertical}
.cw-in:focus,.cw-ta:focus{outline:2px solid var(--accent);border-color:var(--accent)}
.cw-mini{background:var(--faint);border:1px solid var(--line);color:var(--ink-soft);border-radius:8px;
  padding:6px 9px;font-size:12px;font-weight:700;cursor:pointer}
.cw-mini:hover{border-color:var(--accent);color:var(--brand)}
.cw-send{background:var(--brand);color:#fff;border:none;border-radius:8px;padding:8px 14px;font-size:13px;
  font-weight:800;cursor:pointer}
.cw-send:hover{filter:brightness(1.08)}
.cw-send:disabled{opacity:.5;cursor:default}
.cw-status{padding:0 14px;font-size:12.5px;font-weight:700;color:var(--muted);min-height:0}
.cw-status:not(:empty){padding:6px 14px}
.cw-status.cw-ok{color:var(--green)}
.cw-status.cw-warn{color:var(--yellow-deep)}
.cw-list-h{padding:10px 14px 4px;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;color:var(--muted)}
.cw-list{overflow-y:auto;padding:0 14px 14px;display:flex;flex-direction:column;gap:8px}
.cw-empty{font-size:12.5px;color:var(--muted);padding:4px 0}
.cw-item{border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:#fff}
.cw-item-h{display:flex;justify-content:space-between;align-items:center;margin-bottom:3px}
.cw-badge{font-size:11px;font-weight:800;color:var(--ink-soft)}
.cw-link{font-size:11.5px;font-weight:800;color:var(--accent);text-decoration:none}
.cw-link:hover{text-decoration:underline}
.cw-item-b{font-size:13px;color:var(--ink);line-height:1.4}
body.cw-capturing,body.cw-capturing *{cursor:crosshair !important}
body.cw-capturing main :hover{outline:2px dashed var(--accent);outline-offset:2px}

/* ---------- component explorer / catalog ---------- */
.cx-head{max-width:1100px;margin:0 auto 18px;padding:24px 20px 0}
.cx-head-row{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}
.cx-title{font-family:var(--font-display);color:var(--brand);font-size:26px;margin:0}
.cx-sub{color:var(--muted);font-weight:700;font-size:14px}
.cx-count{color:var(--muted);font-weight:700;font-size:13px;white-space:nowrap}
.cx-search{margin-top:14px;width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:12px;
  padding:11px 14px;font:inherit;font-size:15px;background:var(--card);color:var(--ink)}
.cx-search:focus{outline:2px solid var(--accent);border-color:var(--accent)}
.cx-grid{max-width:1100px;margin:0 auto;padding:0 20px 80px}
.cx-cat-h{font-family:var(--font-display);color:var(--ink);font-size:15px;text-transform:uppercase;letter-spacing:.8px;
  margin:26px 0 12px;padding-bottom:6px;border-bottom:2px solid var(--line)}
.cx-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}
/* chapter-embedded grid */
.cx-grid .cx-row{margin:0}
section.screen .cx-grid{padding:0;max-width:none}
section.screen .cx-grid .cx-card,.cx-row .cx-card{margin:0}
.cx-card{display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);
  border-radius:var(--r);overflow:hidden;box-shadow:var(--shadow-sm)}
.cx-imgwrap{position:relative;background:var(--slide);border-bottom:1px solid var(--line)}
.cx-stage{height:170px;display:flex;align-items:center;justify-content:center;padding:10px}
.cx-img{max-width:100%;max-height:100%;object-fit:contain}
.cx-icon svg{width:80px;height:80px}
.cx-noimg{color:var(--muted);font-weight:700;font-size:13px;display:flex;align-items:center;justify-content:center;height:100%}
.cx-fehlt{color:var(--yellow-deep)}
.cx-tabs{position:absolute;bottom:8px;right:8px;display:flex;gap:4px}
.cx-tab{font-size:11px;font-weight:800;border:1px solid var(--line);background:var(--card);color:var(--muted);
  border-radius:7px;padding:4px 9px;cursor:pointer}
.cx-tab.on{background:var(--brand);color:#fff;border-color:var(--brand)}
.cx-tab-warn:not(.on){color:var(--yellow-deep);border-color:var(--yellow)}
.cx-body{padding:13px 15px 15px;display:flex;flex-direction:column;gap:8px}
.cx-name{font-family:var(--font-display);color:var(--brand);font-size:17px;margin:0}
.cx-badges{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.cx-abbr{font-size:11px;font-weight:800;color:#fff;background:var(--brand);border-radius:6px;padding:2px 7px}
.cx-cat{font-size:11px;font-weight:800;color:var(--brand);background:color-mix(in srgb,var(--accent) 16%,#fff);border-radius:6px;padding:2px 7px}
.cx-fehlt-badge{font-size:11px;font-weight:800;color:var(--yellow-deep);background:color-mix(in srgb,var(--yellow) 22%,#fff);border-radius:6px;padding:2px 7px}
.cx-partof{font-size:11px;font-weight:700;color:var(--muted)}
.cx-fn{font-size:13.5px;color:var(--ink-soft);line-height:1.45;margin:0}
.cx-specs{display:grid;grid-template-columns:auto 1fr;gap:3px 12px;margin:0;font-size:13px}
.cx-specs dt{color:var(--muted);font-weight:800}
.cx-specs dd{margin:0;color:var(--ink);font-weight:600}
.cx-conns{display:flex;flex-wrap:wrap;gap:5px;align-items:center;margin-top:2px}
.cx-conns-l{font-size:11px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.4px}
.cx-chip{font-size:11.5px;font-weight:700;color:var(--ink-soft);background:var(--faint);border-radius:999px;padding:2px 9px}
.cx-warns{display:flex;flex-direction:column;gap:4px}
.cx-warn{font-size:12.5px;color:var(--yellow-deep);background:color-mix(in srgb,var(--yellow) 12%,#fff);border-radius:8px;padding:6px 9px;line-height:1.4}
.cx-src{font-size:11px;color:var(--muted);margin-top:2px}

/* ---------- course shell (brand bar + nav) ---------- */
.shell-bar{position:sticky;top:0;z-index:50;background:var(--brand);color:#fff;box-shadow:var(--shadow-sm)}
.shell-bar-in{max-width:1280px;margin:0 auto;display:flex;align-items:center;gap:16px;padding:10px 18px}
.shell-brand{display:flex;align-items:center;gap:13px;text-decoration:none;color:#fff}
.shell-logo{display:flex;background:#fff;border-radius:10px;padding:6px 10px;box-shadow:0 2px 8px -3px rgba(0,0,0,.4)}
.shell-logo img{display:block;height:34px;width:auto}
.shell-titles{display:flex;flex-direction:column;line-height:1.15}
.shell-title{font-family:var(--font-display);font-weight:800;font-size:16px;letter-spacing:.2px}
.shell-sub{font-size:11.5px;opacity:.8;font-weight:600}
.shell-burger{margin-left:auto;background:rgba(255,255,255,.14);border:none;color:#fff;font-size:18px;
  border-radius:9px;width:40px;height:36px;cursor:pointer;display:none}
.shell-layout{max-width:1280px;margin:0 auto;display:flex;align-items:flex-start;gap:0}
.shell-navwrap{flex:0 0 248px;align-self:stretch;border-right:1px solid var(--line);background:var(--card)}
.shell-nav{position:sticky;top:64px;padding:18px 14px;display:flex;flex-direction:column;gap:18px;max-height:calc(100vh - 64px);overflow-y:auto}
.shell-grp-l{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);margin-bottom:7px}
.shell-link{display:flex;align-items:center;gap:8px;text-decoration:none;color:var(--ink-soft);font-size:13.5px;font-weight:700;
  padding:8px 11px;border-radius:9px;margin-bottom:3px;border:1px solid transparent}
.shell-link:hover{background:var(--faint);color:var(--brand)}
.shell-link.active{background:color-mix(in srgb,var(--accent) 16%,#fff);color:var(--brand);border-color:color-mix(in srgb,var(--accent) 40%,#fff)}
.shell-ic{font-size:14px}
.shell-content{flex:1 1 auto;min-width:0}
/* the chapter/catalog keep their own inner max-width; relax the full-bleed header inside the shell */
.shell-content > header{position:static}
@media(max-width:860px){
  .shell-burger{display:block}
  .shell-layout{display:block}
  .shell-navwrap{position:fixed;inset:48px 0 auto 0;z-index:49;border-right:none;border-bottom:1px solid var(--line);
    display:none;max-height:70vh;overflow-y:auto}
  .shell-navwrap.open{display:block}
  .shell-nav{position:static;max-height:none}
}

/* ---------- inline variants (A/B review) ---------- */
.vary{border:1px dashed var(--line2);border-radius:var(--r);padding:12px;margin:6px 0;background:color-mix(in srgb,var(--accent) 5%,#fff)}
.vary-l{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin-bottom:8px}
.vary-tabs{display:inline-flex;gap:3px;background:var(--faint);border:1px solid var(--line);border-radius:10px;padding:3px;margin-bottom:12px}
.vary-tab{border:none;background:none;color:var(--ink-soft);font:inherit;font-size:13px;font-weight:800;padding:6px 14px;border-radius:7px;cursor:pointer}
.vary-tab.on{background:var(--brand);color:#fff}
.vary-body{display:flex;flex-direction:column;gap:12px}
/* ---------- shell chapter-variant switcher ---------- */
.shell-vary{display:flex;align-items:center;gap:6px;margin-left:18px;background:rgba(255,255,255,.12);border-radius:10px;padding:4px 6px}
.shell-vary-l{font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;opacity:.85;padding:0 4px}
.shell-vary-opt{font-size:12.5px;font-weight:700;color:#fff;text-decoration:none;padding:4px 10px;border-radius:7px;opacity:.85}
.shell-vary-opt:hover{background:rgba(255,255,255,.15);opacity:1}
.shell-vary-opt.on{background:#fff;color:var(--brand);opacity:1}
@media(max-width:860px){.shell-vary{display:none}}
