:root{--bg:#0b1220;--panel:#131c2e;--panel-2:#1b273d;--text:#e8eef7;--muted:#9fb0c7;--accent:#14b8a6;--accent-2:#0f766e;--good:#22c55e;--warn:#f59e0b;--bad:#ef4444;--line:#243149;--radius:14px}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;overscroll-behavior:none;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.app{max-width:520px;min-height:100vh;margin:0 auto;padding:16px 16px 96px}header.brand{align-items:center;gap:10px;padding:8px 0 16px;display:flex}header.brand .dot{background:var(--accent);width:12px;height:12px;box-shadow:0 0 14px var(--accent);border-radius:50%}header.brand h1{letter-spacing:.2px;margin:0;font-size:18px}header.brand small{color:var(--muted);font-size:11px;font-weight:400;display:block}.steps{gap:6px;margin-bottom:16px;display:flex}.steps .step{background:var(--line);border-radius:4px;flex:1;height:4px}.steps .step.active{background:var(--accent)}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:14px;padding:16px}.card h2{margin:0 0 6px;font-size:16px}.card p.hint{color:var(--muted);margin:0 0 14px;font-size:13px;line-height:1.5}button{font:inherit;cursor:pointer;background:var(--accent-2);color:#fff;border:none;border-radius:10px;padding:12px 16px;font-weight:600;transition:filter .15s,transform 50ms}button:hover{filter:brightness(1.08)}button:active{transform:translateY(1px)}button:disabled{opacity:.45;cursor:not-allowed}button.ghost{border:1px solid var(--line);color:var(--text);background:0 0}button.full{width:100%}.row{gap:8px;display:flex}.plan-wrap{border:1px solid var(--line);touch-action:none;-webkit-user-select:none;user-select:none;background:#0a0f1a;border-radius:12px;width:100%;position:relative;overflow:hidden}.plan-wrap img{pointer-events:none;width:100%;height:auto;display:block}.grid-overlay{pointer-events:none;position:absolute;inset:0}.marker{background:var(--accent);color:#04221d;white-space:nowrap;cursor:grab;border-radius:20px;padding:3px 7px;font-size:11px;font-weight:700;position:absolute;transform:translate(-50%,-50%);box-shadow:0 2px 8px #0006}.marker.door{background:var(--warn);color:#2a1a00}.marker .x{opacity:.7;margin-left:6px}.door-tip{border:3px solid var(--warn);cursor:grab;background:#fff;border-radius:50%;width:22px;height:22px;position:absolute;transform:translate(-50%,-50%)}.chips{flex-wrap:wrap;gap:8px;display:flex}.chip{background:var(--panel-2);border:1px solid var(--line);color:var(--text);border-radius:20px;padding:9px 12px;font-size:13px}.chip.sel{background:var(--accent-2);border-color:var(--accent)}.compass{flex-direction:column;align-items:center;gap:10px;padding:8px 0;display:flex}.compass .needle{border:2px solid var(--line);background:radial-gradient(circle at 50% 40%,#1b273d,#0c1322);border-radius:50%;place-items:center;width:130px;height:130px;display:grid;position:relative}.compass .needle .n{color:var(--muted);font-size:11px;position:absolute;top:6px}.compass .needle .arrow{background:linear-gradient(var(--bad) 50%, var(--text) 50%);transform-origin:bottom;border-radius:4px;width:4px;height:54px}.compass .reading{font-size:28px;font-weight:700}.compass .reading small{color:var(--muted);font-size:14px;font-weight:500}select{font:inherit;background:var(--panel-2);color:var(--text);border:1px solid var(--line);border-radius:10px;width:100%;padding:11px 12px}.score-ring{align-items:center;gap:16px;display:flex}.score-ring .num{font-size:40px;font-weight:800;line-height:1}.badge{border-radius:20px;padding:4px 10px;font-size:12px;font-weight:700;display:inline-block}.badge.good{color:var(--good);background:#22c55e26}.badge.warn{color:var(--warn);background:#f59e0b26}.badge.bad{color:var(--bad);background:#ef444426}.report{font-size:14px;line-height:1.65}.report h2{margin:18px 0 8px;font-size:17px}.report h3{color:var(--accent);margin:16px 0 6px;font-size:15px}.report ul{padding-left:18px}.report li{margin-bottom:6px}.report hr{border:none;border-top:1px solid var(--line);margin:16px 0}.report em{color:var(--muted)}.note{color:var(--muted);font-size:12px;line-height:1.5}.error{color:var(--bad);font-size:13px}.center{text-align:center}.spin{border:3px solid var(--line);border-top-color:var(--accent);border-radius:50%;width:22px;height:22px;animation:.8s linear infinite r;display:inline-block}@keyframes r{to{transform:rotate(360deg)}}
