:root{--bg:#f4f6f8;--surface:#fff;--surface-2:#eef1f4;--border:#d9dee4;--text:#17212b;--muted:#5d6b78;--accent:#0b6e99;--water:#e6f1f7;--water-grid:#b9d3e2;--rung:#8fb2c7;--layline:#0b4f6c;--rhumb:#6d7f8c;--line:#17212b;--mark:#ff8c1a;--obstruction:#8a8f96;--port:#d93a3a;--port-bg:#fde8e8;--starboard:#1f9d55;--starboard-bg:#e3f6ea;--gain:#1f9d55;--loss:#d93a3a;--shadow:0 1px 2px #0000000f, 0 2px 8px #0000000d;color:var(--text);background:var(--bg);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0f151b;--surface:#17202a;--surface-2:#1e2934;--border:#2c3a47;--text:#e4ebf1;--muted:#93a3b1;--accent:#5cc2f0;--water:#0f2533;--water-grid:#24485e;--rung:#3f6f8c;--layline:#7fd1f2;--rhumb:#8195a5;--line:#e4ebf1;--port:#ff6b6b;--port-bg:#3a1c1f;--obstruction:#6b7580;--starboard:#3ddc84;--starboard-bg:#173325;--gain:#3ddc84;--loss:#ff6b6b;--shadow:none;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#0f151b;--surface:#17202a;--surface-2:#1e2934;--border:#2c3a47;--text:#e4ebf1;--muted:#93a3b1;--accent:#5cc2f0;--water:#0f2533;--water-grid:#24485e;--rung:#3f6f8c;--layline:#7fd1f2;--rhumb:#8195a5;--line:#e4ebf1;--port:#ff6b6b;--port-bg:#3a1c1f;--obstruction:#6b7580;--starboard:#3ddc84;--starboard-bg:#173325;--gain:#3ddc84;--loss:#ff6b6b;--shadow:none;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{background:var(--bg);height:100%;margin:0}button,.button,select,input{font:inherit;color:inherit}button,.button{background:var(--surface);border:1px solid var(--border);cursor:pointer;white-space:nowrap;border-radius:6px;padding:6px 10px}button:hover:not(:disabled),.button:hover{border-color:var(--accent)}button:disabled{opacity:.45;cursor:default}button:focus-visible,select:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}select,input[type=number],input:not([type]){background:var(--surface);border:1px solid var(--border);border-radius:6px;min-width:0;padding:5px 7px}.muted{color:var(--muted)}.small{font-size:12px}.dot{vertical-align:baseline;border-radius:50%;width:10px;height:10px;display:inline-block}.app{flex-direction:column;height:100%;display:flex}.topbar{background:var(--surface);border-bottom:1px solid var(--border);align-items:center;gap:16px;padding:8px 16px;display:flex}.brand{color:var(--accent);align-items:center;gap:8px;font-size:16px;font-weight:700;display:flex}.brand svg path{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linejoin:round;stroke-linecap:round}.scenario-name{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.tabs{gap:4px;display:flex}.tabs button{background:0 0;border-color:#0000}.tabs button.on{background:var(--surface-2);border-color:var(--border);font-weight:600}.about-link{color:inherit;white-space:nowrap;border:1px solid #0000;border-radius:6px;padding:6px 10px;text-decoration:none}.about-link:hover{border-color:var(--accent)}.about-link:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.lang-switch{border:1px solid var(--border);border-radius:6px;display:flex;overflow:hidden}.lang-switch button{color:var(--muted);background:0 0;border:none;border-radius:0;padding:4px 8px;font-size:12px}.lang-switch button.on{background:var(--surface-2);color:inherit;font-weight:600}.layout{flex:1;grid-template-columns:minmax(0,1fr) 400px;min-height:0;display:grid}.stage{flex-direction:column;min-width:0;min-height:0;display:flex;position:relative}.panel{border-left:1px solid var(--border);background:var(--bg);padding:12px;overflow-y:auto}.course{background:var(--water);touch-action:none;cursor:grab;flex:1;min-height:0;position:relative;overflow:hidden}.course:active{cursor:grabbing}.course>svg{-webkit-user-select:none;user-select:none;display:block}.course line,.course polyline,.course polygon,.course path,.course rect,.course circle{vector-effect:non-scaling-stroke}.wind-arrows line,.wind-arrows polyline{stroke:var(--water-grid);stroke-width:1.5px;fill:none}.rungs line{stroke:var(--rung);stroke-width:1px;stroke-dasharray:4 4}.laylines polyline{stroke:var(--layline);stroke-width:2px;fill:none}.laylines polyline.port,.laylines-start polyline.port{stroke:var(--port)}.laylines polyline.starboard,.laylines-start polyline.starboard{stroke:var(--starboard)}.layline-label{paint-order:stroke;stroke:var(--water);vector-effect:none;font-weight:600}.layline-label.port{fill:var(--port)}.layline-label.starboard{fill:var(--starboard)}.laylines-start polyline{stroke:var(--layline);stroke-width:1.5px;stroke-dasharray:2 5;opacity:.5;fill:none}.rhumb{stroke:var(--rhumb);stroke-width:1.5px;stroke-dasharray:10 6;fill:none}.finishline polyline{stroke:var(--line);stroke-width:2px;stroke-dasharray:8 4}.finishline circle{fill:var(--surface);stroke:var(--line);stroke-width:1.5px}.startline polyline{stroke:var(--line);stroke-width:2px}.startline .pin{fill:var(--mark);stroke:var(--line);stroke-width:1px}.startline .committee{fill:var(--surface);stroke:var(--line);stroke-width:1.5px}.mark{fill:var(--mark);stroke:var(--line);stroke-width:1.5px}.boat-rung{stroke-width:1px;stroke-dasharray:1 5;stroke-linecap:round;opacity:.55}.boat-rung.sel{stroke-width:1.5px;opacity:.9}.track{fill:none;stroke-width:2px;stroke-linejoin:round;opacity:.85}.perfect-track{fill:none;stroke-width:2px;stroke-dasharray:3 5;stroke-linejoin:round;vector-effect:non-scaling-stroke;opacity:.7}.boat path{stroke:var(--line);stroke-width:1px}.boat.sel path{stroke-width:2.5px}.mark-num{fill:var(--muted);paint-order:stroke;stroke:var(--water);vector-effect:none;font-weight:700}.boat-label{fill:var(--text);paint-order:stroke;stroke:var(--water);vector-effect:none;font-weight:600}.start-badge{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);pointer-events:none;border-radius:10px;padding:6px 12px;position:absolute;top:78px;left:12px}.start-recall{color:var(--loss);font-weight:700}.start-count{font-variant-numeric:tabular-nums;font-weight:700}.wind-badge{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);pointer-events:none;border-radius:10px;align-items:center;gap:8px;padding:6px 12px 6px 6px;display:flex;position:absolute;top:12px;left:12px}.wind-badge svg line,.wind-badge svg polyline{stroke:var(--accent);stroke-width:3px;fill:none;stroke-linecap:round;stroke-linejoin:round}.wind-speed{color:var(--muted);font-size:14px;font-weight:600}.wind-label{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-size:11px}.wind-value{font-variant-numeric:tabular-nums;font-size:20px;font-weight:700}.wind-shift{color:var(--muted);font-size:12px}.wind-shift.left{color:var(--port)}.wind-shift.right{color:var(--starboard)}.legend{color:var(--muted);pointer-events:none;flex-direction:column;gap:2px;font-size:12px;display:flex;position:absolute;bottom:10px;left:12px}.zoom{gap:4px;display:flex;position:absolute;top:12px;right:12px}.zoom button{min-width:34px;box-shadow:var(--shadow)}.controls{background:var(--surface);border-top:1px solid var(--border);flex-direction:column;gap:8px;padding:8px 12px;display:flex}.controls .row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.controls .play{background:var(--accent);border-color:var(--accent);color:#fff;min-width:44px;font-weight:700}.timeline{min-width:120px;accent-color:var(--accent);flex:1}.clock{font-variant-numeric:tabular-nums;text-align:right;min-width:90px}.actions{justify-content:flex-start}.group{border-right:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:6px;margin-right:4px;padding-right:12px;display:flex}.group:last-of-type{border-right:none}.group-label{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-size:11px}.deg input{width:56px}button.shift,button.tack-btn{padding:8px 12px;font-weight:600}button.shift.left,button.tack-btn.port{background:var(--port-bg);border-color:var(--port);color:var(--port)}button.shift.right,button.tack-btn.starboard{background:var(--starboard-bg);border-color:var(--starboard);color:var(--starboard)}button.tack-btn .dot{margin-right:6px}.small-btn{padding:3px 8px;font-size:12px}.card{background:var(--surface);border:1px solid var(--border);border-top:3px solid var(--border);box-shadow:var(--shadow);border-radius:8px;margin-bottom:12px;padding:10px 12px}.card h3{flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 8px;font-size:14px;display:flex}.card h4{margin:12px 0 6px;font-size:13px}.card p{margin:6px 0 0}table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%}th{color:var(--muted);text-align:left;border-bottom:1px solid var(--border);padding:4px;font-size:11px;font-weight:600}td{border-bottom:1px solid var(--surface-2);vertical-align:top;padding:5px 4px}.num{text-align:right}.fleet tr{cursor:pointer}.fleet tr.sel td{background:var(--surface-2)}.tack{text-align:center;border-radius:4px;min-width:20px;padding:1px 4px;font-size:12px;font-weight:700;display:inline-block}.tack.port{color:var(--port);background:var(--port-bg)}.tack.starboard{color:var(--starboard);background:var(--starboard-bg)}.finished{color:var(--gain);font-weight:600}.gain,td.gain{color:var(--gain)}.loss,td.loss{color:var(--loss)}td.left{color:var(--port)}td.right{color:var(--starboard)}.stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.stat{background:var(--surface-2);border-radius:6px;padding:6px 8px}.stat-label{color:var(--muted);font-size:11px}.stat-value{font-variant-numeric:tabular-nums;color:var(--text);font-size:18px;font-weight:700}.stat.gain .stat-value{color:var(--gain)}.stat.loss .stat-value{color:var(--loss)}.stat-sub{color:var(--muted);font-size:12px}.risk{border-top:1px solid var(--border);margin-top:10px}.risk-row{grid-template-columns:24px 1fr auto;align-items:center;gap:4px 8px;padding:6px 0;display:grid}.risk-row .muted{grid-column:2/4}.risk-label{font-size:13px}.risk-value{font-variant-numeric:tabular-nums;font-size:17px;font-weight:700}.shift-chip{border-radius:50%;place-items:center;width:22px;height:22px;font-size:11px;display:inline-grid}.shift-chip.left{background:var(--port-bg);color:var(--port)}.shift-chip.right{background:var(--starboard-bg);color:var(--starboard)}label.inline input{width:60px}.calc{margin-top:8px}.fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px;display:grid}.field{color:var(--muted);flex-direction:column;gap:3px;font-size:12px;display:flex}.field select,.field input{color:var(--text);width:100%}.field-input{align-items:center;gap:4px;display:flex}.field-input input{flex:1}.unit{color:var(--muted);min-width:18px}.full{grid-column:1/-1}.check{align-items:center;gap:6px;font-size:13px;display:flex}.checks{gap:6px;display:grid}.boat-setup{border-left:4px solid;margin-bottom:12px;padding:4px 0 8px 10px}.boat-setup-row{align-items:center;gap:6px;margin-bottom:8px;display:flex}.boat-name{flex:1;font-weight:600}input[type=color]{border:1px solid var(--border);background:0 0;border-radius:6px;width:34px;height:30px;padding:0}input[type=range]{accent-color:var(--accent)}.btn-row{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.flash{color:var(--gain);font-weight:600}.list{margin:0;padding:0;list-style:none}.list li{border-bottom:1px solid var(--surface-2);padding:6px 0}.rule-tags{flex-wrap:wrap;gap:4px;margin-top:4px;display:flex}.rule-tag{background:var(--surface-2);color:var(--accent);border:1px solid #0000;border-radius:4px;padding:1px 6px;font-size:11px;font-weight:700}.rule-tag.on{border-color:var(--accent)}.scen-filter{margin-bottom:8px}textarea{font:inherit;color:inherit;background:var(--surface);border:1px solid var(--border);resize:vertical;border-radius:6px;width:100%;padding:5px 7px}.recording svg{background:var(--water);border-radius:6px;display:block}.recording polyline{fill:none;stroke:var(--accent);stroke-width:2px;stroke-linejoin:round}.recording .zero{stroke:var(--water-grid)}.recording text{fill:var(--muted);font-size:9px}.card.about summary{cursor:pointer;font-weight:700}.card.about p{white-space:pre-wrap;margin:6px 0 0}.saved-about{white-space:pre-wrap;flex-basis:100%;margin:2px 0 0}button.link{color:var(--accent);text-align:left;white-space:normal;background:0 0;border:none;padding:0;font-weight:600}.saved-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.saved-row .link{flex:1}@media (width<=1000px){.layout{grid-template-rows:minmax(420px,72vh) auto;grid-template-columns:1fr;overflow-y:auto}.panel{border-left:none;border-top:1px solid var(--border);overflow:visible}.topbar{gap:8px;padding:8px 12px}.scenario-name{display:none}.brand{flex:1}}@media (width<=700px){.topbar{flex-wrap:wrap}}@media (pointer:coarse){button.shift,button.tack-btn,.controls button{min-height:44px}}.encounter line{stroke:var(--muted);stroke-width:1px;stroke-dasharray:3 4}.encounter.risk line{stroke:var(--loss);stroke-width:1.5px}.encounter.contact line{stroke:var(--loss);stroke-width:3px;stroke-dasharray:none}.encounter .abeam{stroke:var(--muted);stroke-width:1px;stroke-dasharray:6 3;fill:none;opacity:.8}.boat.row path{stroke:var(--gain);stroke-width:3px}.boat.keepClear path{stroke:var(--loss);stroke-width:3px}.boat.draggable{cursor:move}.boat.stopped path{fill-opacity:.45;stroke-dasharray:3 2}.boat.dragging{cursor:grabbing}.boat.dragging path{filter:drop-shadow(0 2px 3px #00000059)}.zone{fill:var(--mark);fill-opacity:.08;stroke:var(--mark);stroke-width:1.5px;stroke-dasharray:5 4}.zone.active{fill-opacity:.16;stroke-width:2.5px}.limits li.bad{color:var(--loss)}.obstruction{fill:var(--obstruction);stroke:var(--line);stroke-width:1px}.obstruction.long{stroke:var(--obstruction);stroke-linecap:round;vector-effect:none}.obstruction.hit{fill:var(--loss);stroke:var(--loss)}.mark.touched{fill:var(--loss);stroke:var(--loss);stroke-width:3px}.jump polyline{stroke-width:1.5px;stroke-dasharray:3 4;fill:none;opacity:.6}.jump circle{fill:none;stroke-width:1.5px;opacity:.6}.drag-ghost polyline{stroke:var(--text);stroke-width:1px;stroke-dasharray:4 3;fill:none;opacity:.7}.drag-ghost path{fill:none;stroke:var(--text);stroke-width:1px;stroke-dasharray:3 2;opacity:.6}.drag-label{fill:var(--text);paint-order:stroke;stroke:var(--water);vector-effect:none;font-weight:600}.undo-toast{background:var(--surface);border:1px solid var(--border);max-width:calc(100% - 32px);box-shadow:var(--shadow);z-index:2;border-radius:8px;align-items:center;gap:10px;padding:6px 6px 6px 12px;font-size:13px;display:flex;position:absolute;top:12px;left:50%;transform:translate(-50%)}.undo-toast button{color:var(--accent);font-weight:600}.rules-card .enc{border-top:1px solid var(--surface-2);padding:8px 0}.rules-card .enc:first-of-type{border-top:none;padding-top:0}.rule-badge{color:var(--accent);align-items:baseline;gap:6px;font-weight:700;text-decoration:none;display:inline-flex}.rule-badge:hover{text-decoration:underline}.rule-num{text-align:center;background:var(--surface-2);min-width:34px;color:var(--text);font-variant-numeric:tabular-nums;border-radius:4px;padding:1px 5px;display:inline-block}.who{margin:4px 0}.who .row-boat{color:var(--gain);font-weight:700}.who .kc-boat{color:var(--loss);font-weight:700}.status-line{font-size:12px;font-weight:600}.status-line.ok{color:var(--gain)}.status-line.bad{color:var(--loss)}.limits{gap:4px;margin:6px 0 0;padding:0;list-style:none;display:grid}.limits li{font-size:12px}.cases{color:var(--muted);margin-top:4px;font-size:12px}.cases a{color:var(--accent);margin-left:4px}.steer-row button{padding:6px 10px}
