:root{--ink:#1c211e;--ink-soft:#3c463f;--muted:#6f776d;--paper:#f1f0e9;--panel:#fcfbf6;--line:#d8d6c8;--line-soft:#e8e6da;--accent:#0e5a50;--accent-deep:#0a453d;--accent-wash:#e2ece8;--amber-ink:#7a5900;--amber-wash:#f5ecca;--green-ink:#1d6b3f;--green-wash:#dcefe0;--red-ink:#a12f1e;--red-wash:#f7e2dc;--font-mono:ui-monospace, "SF Mono", "Cascadia Mono", "Roboto Mono", Menlo, Consolas, monospace;--font-body:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;color:var(--ink);font-family:var(--font-body);font-size:15px;line-height:1.5}*{box-sizing:border-box}body{background-color:var(--paper);background-image:repeating-linear-gradient(0deg,#0000,#0000 27px,#1c211e09 27px 28px),repeating-linear-gradient(90deg,#0000,#0000 27px,#1c211e09 27px 28px);min-height:100vh;margin:0}button,input,textarea{font:inherit}:is(a,button,input,textarea):focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app{width:min(1180px,100vw - 32px);margin:0 auto;padding:36px 0 48px}.masthead{border-bottom:2px solid var(--ink);justify-content:space-between;align-items:flex-end;gap:24px;margin-bottom:24px;padding-bottom:18px;display:flex}h1,h2,p,dl{margin:0}.kicker{color:var(--accent);font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;margin-bottom:6px;font-size:.72rem;font-weight:700}h1{font-family:var(--font-mono);letter-spacing:-.02em;font-size:1.6rem;font-weight:600;line-height:1.2}.lede{color:var(--muted);max-width:52ch;margin-top:6px}.envStatus{flex-wrap:wrap;gap:8px;display:flex}.envPill{border:1px solid var(--line);background:var(--panel);font-family:var(--font-mono);letter-spacing:.04em;white-space:nowrap;border-radius:999px;align-items:center;gap:7px;padding:4px 11px;font-size:.72rem;font-weight:600;display:inline-flex}.envPill:before{content:"";background:currentColor;border-radius:50%;width:7px;height:7px}.envPill.is-ok{color:var(--green-ink)}.envPill.is-bad{color:var(--red-ink);border-color:color-mix(in srgb, var(--red-ink) 40%, var(--line));background:var(--red-wash)}.layout{grid-template-columns:minmax(300px,1.1fr) minmax(240px,.8fr) minmax(280px,1fr);align-items:start;gap:16px;display:grid}.panel{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:18px 20px 20px;box-shadow:0 1px 2px #1c211e0d}.panelHead{border-bottom:1px solid var(--line-soft);align-items:baseline;gap:10px;margin:-18px -20px 18px;padding:12px 20px;display:flex}.stepNo{color:var(--accent);font-family:var(--font-mono);font-size:.78rem;font-weight:700}h2{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;font-size:.82rem;font-weight:700}label{color:var(--ink-soft);font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;gap:6px;margin-bottom:16px;font-size:.72rem;font-weight:700;display:grid}input,textarea{border:1px solid var(--line);width:100%;color:var(--ink);font-family:var(--font-body);letter-spacing:normal;text-transform:none;background:#fff;border-radius:4px;padding:9px 11px;font-size:.95rem}textarea{resize:vertical;font-family:var(--font-mono);font-size:.85rem;line-height:1.7}input::placeholder,textarea::placeholder{color:#a6ac9f}.fileControl{border:1px dashed var(--line);cursor:pointer;background:#fff;border-radius:4px;align-items:center;min-height:44px;padding:8px 11px;display:flex;position:relative}.fileControl:hover{border-color:var(--accent)}.fileControl.has-file{border-style:solid;border-color:var(--accent);background:var(--accent-wash)}.fileControl input[type=file]{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.fileHint{color:var(--muted);font-family:var(--font-body);letter-spacing:normal;text-transform:none;overflow-wrap:anywhere;font-size:.85rem;font-weight:400}.fileControl.has-file .fileHint{color:var(--accent-deep);font-family:var(--font-mono);font-size:.8rem}.fileHint.is-parsing{color:var(--amber-ink);font-family:var(--font-mono)}button,.btn{border:1px solid var(--accent-deep);color:#fff;background:var(--accent);min-height:40px;font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;border-radius:4px;justify-content:center;align-items:center;padding:0 18px;font-size:.78rem;font-weight:700;text-decoration:none;display:inline-flex}button:hover:not(:disabled),.btn:hover{background:var(--accent-deep)}button:active:not(:disabled),.btn:active{transform:translateY(1px)}button[type=submit]{width:100%}button:disabled{cursor:not-allowed;border-color:var(--line);background:var(--line-soft);color:var(--muted)}.btnGhost{color:var(--accent-deep);border-color:var(--accent);background:0 0}.btnGhost:hover{color:#fff}.notice{border-left:3px solid var(--accent);background:var(--accent-wash);color:var(--accent-deep);margin-top:14px;padding:8px 12px;font-size:.88rem;font-weight:600}.notice.is-error{border-left-color:var(--red-ink);background:var(--red-wash);color:var(--red-ink)}.metric{border-bottom:1px solid var(--line-soft);align-items:baseline;gap:10px;margin-bottom:14px;padding-bottom:14px;display:flex}.metric strong{font-family:var(--font-mono);font-size:2.5rem;font-weight:600;line-height:1}.metric span{color:var(--muted);font-size:.88rem}.chips{flex-wrap:wrap;gap:6px;display:flex}.chips span{overflow-wrap:anywhere;border:1px solid var(--line-soft);max-width:100%;color:var(--ink-soft);font-family:var(--font-mono);background:#fff;border-radius:3px;padding:3px 8px;font-size:.76rem}.chips .chipMore{color:var(--muted);background:0 0;border-style:dashed}.emptyHint{color:var(--muted);font-size:.88rem}.statusPanel{min-height:260px}.emptyState{border:1px dashed var(--line);text-align:center;color:var(--ink-soft);border-radius:4px;gap:4px;padding:22px 16px;display:grid}.statusBanner{border:1px solid var(--line);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;background:#fff;border-radius:4px;align-items:center;gap:10px;margin-bottom:16px;padding:10px 14px;font-size:.85rem;display:flex}.statusDot{background:currentColor;border-radius:50%;flex:none;width:9px;height:9px}.statusBanner.is-queued,.statusBanner.is-running{border-color:color-mix(in srgb, var(--amber-ink) 35%, var(--line));background:var(--amber-wash);color:var(--amber-ink)}.statusBanner.is-running .statusDot{animation:1.4s ease-in-out infinite pulse}.statusBanner.is-succeeded{border-color:color-mix(in srgb, var(--green-ink) 35%, var(--line));background:var(--green-wash);color:var(--green-ink)}.statusBanner.is-failed{border-color:color-mix(in srgb, var(--red-ink) 35%, var(--line));background:var(--red-wash);color:var(--red-ink)}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.7)}}@media (prefers-reduced-motion:reduce){.statusBanner.is-running .statusDot{animation:none}}.statusGrid{grid-template-columns:minmax(110px,.7fr) minmax(120px,1fr);align-items:baseline;gap:9px 14px;display:grid}.statusGrid dt{color:var(--muted);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;font-size:.72rem;font-weight:600}.statusGrid dd{overflow-wrap:anywhere;margin:0;font-weight:600}.downloads{flex-wrap:wrap;gap:10px;margin-top:18px;display:flex}@media (width<=980px){.app{padding-top:24px}.masthead{flex-direction:column;align-items:flex-start;gap:12px}.layout{grid-template-columns:1fr}.statusPanel{min-height:0}}
