:root{--asphalt: #181b20;--asphalt-2: #1f232a;--sign-green: #186a3b;--sign-green-2: #0f5730;--sign-border: #f2f4f0;--lane-yellow: #e8c95a;--ink: #eef1ea;--dim: #9aa3ad;--danger: #e5484d}*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{min-height:100%}body{background:var(--asphalt);color:var(--ink);font-family:Overpass,system-ui,sans-serif;background-image:radial-gradient(circle at 50% -20%,#232830 0%,var(--asphalt) 60%);user-select:none;-webkit-user-select:none}#root{display:flex;flex-direction:column;align-items:center}.material-symbols-outlined{font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 24;color:var(--lane-yellow)}header{width:100%;max-width:860px;display:flex;align-items:baseline;gap:14px;padding:14px 16px 6px;flex-wrap:wrap}header h1{font-size:clamp(22px,4vw,30px);font-family:Matemasie,sans-serif;font-weight:400;font-style:italic;letter-spacing:.04em;cursor:pointer}header h1 .mile{color:var(--lane-yellow)}header .sub{color:var(--dim);font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase}header .sub .mile{color:var(--lane-yellow);font-family:Matemasie,sans-serif;font-size:12px}.authbar{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:13px}.authbar .driver{font-weight:800;color:var(--lane-yellow);letter-spacing:.04em}.authbar .autherr{color:var(--danger);font-size:12px;max-width:260px}.dim{color:var(--dim)}.screen{width:100%;max-width:860px;display:flex;flex-direction:column}.signbar{width:100%;display:flex;gap:10px;padding:8px 12px;flex-wrap:wrap;align-items:stretch}.sign{background:linear-gradient(180deg,var(--sign-green),var(--sign-green-2));border:2px solid var(--sign-border);border-radius:8px;box-shadow:0 3px #00000073,inset 0 1px #ffffff26;padding:8px 12px 6px;display:flex;flex-direction:column;justify-content:center;min-width:86px}.sign .lbl{font-size:10px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#cfe3d3}.sign .val{font-size:20px;font-weight:800;line-height:1.05;color:#fff}.sign .val small{font-size:12px;font-weight:600;color:#cfe3d3}.sign.grade .val{font-size:26px}.sign.warn{background:linear-gradient(180deg,#8f3b12,#6e2c0c)}button{font-family:inherit;font-weight:800;letter-spacing:.05em;font-size:14px;text-transform:uppercase;color:var(--ink);background:var(--asphalt-2);border:2px solid #39404a;border-radius:8px;padding:10px 14px;cursor:pointer;box-shadow:0 2px #0006;transition:transform .05s ease,background .15s ease,border-color .15s}button:active{transform:translateY(2px);box-shadow:none}button:focus-visible{outline:3px solid var(--lane-yellow);outline-offset:2px}button.on{background:var(--sign-green);border-color:var(--sign-border);color:#fff}button.test{margin-left:auto;background:#274056;border-color:#4d7ba1}button.test.on{background:#b8860b;border-color:#ffd76a;color:#fff}button:disabled{opacity:.4;cursor:default}button.ghost{background:transparent;border-color:#39404a;color:var(--dim)}button.mini{padding:6px 10px;font-size:12px}button.mini.go{background:var(--sign-green);border-color:var(--sign-border);color:#fff}.toolbar{width:100%;display:flex;gap:8px;padding:4px 12px 10px;flex-wrap:wrap;align-items:center}.field{font-family:inherit;font-weight:600;font-size:14px;color:var(--ink);background:var(--asphalt-2);border:2px solid #39404a;border-radius:8px;padding:10px 12px;min-width:220px;flex:1}.field:focus-visible{outline:3px solid var(--lane-yellow);outline-offset:2px}.slider{display:flex;align-items:center;gap:8px;color:var(--dim);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em}.slider input{accent-color:var(--lane-yellow)}.toolbar.sub{margin-top:-4px;padding-top:0}.sublbl{font-size:12px;font-weight:800;letter-spacing:.06em;color:var(--dim);text-transform:uppercase}button.chip{border-radius:999px;padding:5px 14px;font-size:13px}button.chip.dot{display:inline-flex;align-items:center;gap:7px}button.chip.dot:before{content:"";width:9px;height:9px;border-radius:50%;background:var(--c, var(--ink));box-shadow:0 0 0 1.5px #00000059}button.chip.on{background:var(--sign-green);border-color:var(--sign-border)}.stage{position:relative;width:100%;padding:0 12px 6px}canvas{display:block;width:100%;background:var(--asphalt-2);border:3px solid var(--sign-border);border-radius:12px;box-shadow:0 8px 24px #00000080;touch-action:none;cursor:crosshair}.stage.testing canvas{cursor:default}footer{width:100%;padding:6px 16px 18px;color:var(--dim);font-size:13px;line-height:1.5}footer b{color:var(--ink)}.routeNote{color:var(--lane-yellow);font-weight:600}.panel{margin:10px 12px;background:linear-gradient(180deg,var(--sign-green),var(--sign-green-2));border:3px solid var(--sign-border);border-radius:12px;box-shadow:0 6px #00000073,inset 0 1px #ffffff26;padding:12px;display:flex;flex-direction:column;gap:8px}.panel-foot{margin:10px 12px;background:linear-gradient(180deg,#130c01,#021827);border:3px solid var(--sign-border);border-radius:12px;box-shadow:0 6px #00000073,inset 0 1px #ffffff26;padding:12px;display:flex;flex-direction:column;gap:8px}.panel-title{font-size:11px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:#cfe3d3;padding:2px 4px 4px;border-bottom:2px solid rgba(242,244,240,.35)}button.guide{display:flex;align-items:center;gap:12px;text-align:left;background:#0000002e;border:2px solid rgba(242,244,240,.55);color:#fff;padding:12px 14px;font-size:16px;text-transform:none}button.guide:hover{border-color:var(--sign-border);background:#0000004d}.guide-shield{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:8px 8px 12px 12px;background:#fff;color:#10231a;font-weight:800;font-style:italic;flex:none}.guide-name{font-weight:800;letter-spacing:.03em;flex:1}.guide-arrow{color:var(--lane-yellow);font-weight:800}.level-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;background:#0000002e;border:2px solid rgba(242,244,240,.45);border-radius:8px;padding:10px 12px}.level-main{flex:1;min-width:200px}.level-name{font-weight:800;color:#fff;letter-spacing:.03em}.level-meta{font-size:12px;color:#cfe3d3}.level-lb{width:100%}.lb{width:100%;border-collapse:collapse;font-size:13px}.lb th{font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:#cfe3d3;padding:6px 8px;text-align:right;border-bottom:2px solid rgba(242,244,240,.35)}.lb td{padding:6px 8px;text-align:right;color:#fff;border-bottom:1px solid rgba(242,244,240,.15)}.lb .left{text-align:left}.lb .rank{color:var(--lane-yellow);font-weight:800;font-style:italic}.lb .pts{font-weight:800}.lb tr.me td{background:#e8c95a24}.lb-empty{color:#cfe3d3;font-size:13px;padding:8px 4px}.modal-scrim{position:absolute;top:0;right:12px;bottom:6px;left:12px;background:#101216b8;display:flex;align-items:center;justify-content:center;border-radius:12px}.modal{width:min(560px,94%);max-height:92%;overflow:auto;background:linear-gradient(180deg,var(--sign-green),var(--sign-green-2));border:3px solid var(--sign-border);border-radius:14px;box-shadow:0 10px #00000080,0 24px 60px #0009;padding:18px;display:flex;flex-direction:column;gap:14px}.modal-head{display:flex;align-items:center;gap:14px}.modal-kicker{font-size:11px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:#cfe3d3}.modal h2{color:#fff;font-weight:800;font-style:italic;letter-spacing:.03em;font-size:20px}.shield{display:inline-flex;align-items:center;justify-content:center;width:58px;height:58px;border-radius:10px 10px 18px 18px;background:#fff;color:#10231a;font-weight:800;font-style:italic;font-size:26px;flex:none;box-shadow:0 3px #0006}.modal-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.modal-stats>div{background:#00000038;border:2px solid rgba(242,244,240,.45);border-radius:8px;padding:8px 10px;display:flex;flex-direction:column}.modal-stats .lbl{font-size:10px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#cfe3d3}.modal-stats .val{font-size:18px;font-weight:800;color:#fff}.modal-stats .val.pts{color:var(--lane-yellow)}.modal-score-note{font-size:13px;font-weight:600;color:var(--lane-yellow);min-height:1.2em}.lb-title{font-size:11px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:#cfe3d3;margin-bottom:4px}.modal-actions{display:flex;gap:8px;flex-wrap:wrap}.modal-actions button.test{margin-left:0}@media (max-width: 560px){.modal-stats{grid-template-columns:repeat(2,1fr)}}@media (prefers-reduced-motion: reduce){button{transition:none}}button .mult{font-size:10px;font-weight:800;color:var(--lane-yellow);margin-left:2px}.modalwrap{position:fixed;top:0;right:0;bottom:0;left:0;background:#080a0db8;display:flex;align-items:center;justify-content:center;z-index:50}.modal{width:min(420px,92vw);background:var(--asphalt-2);border:1.5px solid #3a414c;border-radius:14px;padding:18px 20px 20px;box-shadow:0 18px 60px #0000008c}.modaltabs{display:flex;align-items:center;gap:8px;margin-bottom:14px}.modaltabs button{font-size:13px}.modaltabs button.on{background:var(--sign-green);border-color:var(--sign-border)}.modaltitle{font-weight:800;letter-spacing:.02em}.modalx{margin-left:auto}.modalfield{display:block;margin:10px 0 2px}.modalfield span{display:block;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.07em;color:var(--dim);margin-bottom:4px}.modalfield input{width:100%;background:var(--asphalt);border:1.5px solid #3a414c;border-radius:8px;color:var(--ink);font:inherit;padding:9px 11px}.modalfield input:focus-visible{outline:2px solid var(--lane-yellow);outline-offset:1px}.modalhint{font-size:12px;color:var(--dim);margin:6px 0 0;line-height:1.45}.modalhint.dim{margin-top:10px}.modalerr{font-size:12.5px;color:var(--danger);margin-top:8px}.modalnote{font-size:12.5px;color:var(--lane-yellow);margin-top:8px}.modalnote.ok{color:#6fcf8f}.modalnote.bad{color:var(--danger)}.modalgo{width:100%;margin-top:14px;background:var(--sign-green);border-color:var(--sign-border);font-weight:800}.modalor{display:flex;align-items:center;gap:10px;margin:14px 0 10px;color:var(--dim);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.modalor:before,.modalor:after{content:"";flex:1;height:1px;background:#3a414c}.providers{display:grid;grid-template-columns:1fr 1fr;gap:8px}.providers button b{margin-right:4px}.driver.nag{color:var(--lane-yellow)}
