/* 속도 변환기 전용 CSS (2026-10-21). 속도 경주 트랙: 단위 판 → [같은 시간 경주 | 이 속도로 가면] → 바람으로 읽기 → 자주 찾는 값.
   폭(작업면 컨테이너 spd): 700 이상 [경주 | 시간 220], 그 아래 한 열(시간 520 이상 4칸·미만 2 × 2). 단위 판: 주요 4칸(700 이상 한 줄·미만 2 × 2) + 그 밖 6칸(560 이상 3열·미만 2열), 440 미만은 '라벨 | 입력' 한 줄씩.
   움직임(R45): 레인이 같은 시간 동안 달림(선형), 스펙트럼 표식 미끄러짐. 동작 줄이기면 바로. 공용 부품 assets/v2.css */
.spd-work{container:spd / inline-size}
.spd-work .v2-status:empty{display:none}
.spd-grid{display:grid;grid-template-columns:minmax(0,1fr);grid-template-areas:"board" "race" "time" "wind" "quick"}
.spd-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:2px 10px;margin:0 0 8px}
.spd-headhint{margin:0;font-family:var(--sans);font-size:12px;color:var(--muted);overflow-wrap:anywhere}
.spd-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}

/* 단위 판: 친 칸이 정본(진한 테두리), 반올림한 칸은 라벨 끝 ≈ */
.spd-board{grid-area:board;min-width:0;padding:14px 18px;border-bottom:1px solid var(--soft)}
.spd-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 14px;margin:0 0 12px}
.spd-sd{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px}
.spd-cells{display:grid;gap:12px}
.spd-main{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.spd-more{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding-top:12px;border-top:1px dashed var(--soft)}
.spd-cell .v2-label{display:flex;align-items:baseline;gap:4px;min-width:0}
.spd-cell .v2-label > span:first-child{min-width:0;overflow-wrap:anywhere}
.spd-ap{flex:none;font-style:normal;font-weight:700;color:var(--muted);visibility:hidden}
.spd-cell.is-ap .spd-ap{visibility:visible}
.spd-main .v2-input input{font-size:18px;font-weight:750}
.spd-cell.is-src .v2-input{border-color:var(--ink)}
.spd-cell .v2-input b{min-width:0;padding:0 9px;white-space:nowrap}
.spd-sent{margin:12px 0 0;font-family:var(--sans);font-size:14px;font-weight:650;font-variant-numeric:tabular-nums lining-nums;overflow-wrap:anywhere;transition:opacity var(--ease)}
.spd-sent.is-error{color:var(--accent)}
.spd-board.is-pend .spd-sent{opacity:.45}
.spd-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 14px;margin-top:10px}
.spd-foot .v2-formula{margin:0;min-width:0;white-space:normal;overflow-wrap:anywhere}
.spd-acts{display:flex;flex-wrap:wrap;align-items:center;gap:8px}

/* 같은 시간 경주: 위 스펙트럼(로그 눈금, 기준 점) + 레인(같은 시간 동안 간 거리, 결승선 = 고른 거리 72% 자리) */
.spd-race{grid-area:race;min-width:0;margin:0;padding:14px 18px;border-bottom:1px solid var(--soft)}
.spd-spec{margin:0 0 10px}
.spd-axis{position:relative;height:calc(60px + (var(--rows, 1) - 1) * 24px);margin:0 8px}
.spd-line{position:absolute;left:-8px;right:-8px;top:31px;height:4px;border-radius:2px;background:linear-gradient(90deg, var(--soft), color-mix(in srgb, var(--ink) 35%, var(--soft)))}
.spd-ticks{position:absolute;inset:0}
.spd-tick{position:absolute;top:28px;display:flex;flex-direction:column;align-items:center;transform:translateX(-50%)}
.spd-tick i{display:block;width:1px;height:calc(10px + (var(--rows, 1) - 1) * 24px);background:linear-gradient(var(--line) 10px, var(--soft) 10px)}
.spd-tick em{margin-top:3px;font-style:normal;font-family:var(--sans);font-size:10.5px;font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.spd-refs{position:absolute;inset:0}
.spd-ref{position:absolute;top:calc(21px + var(--r, 0) * 24px);width:24px;height:24px;margin-left:-12px;padding:0;border:0;border-radius:50%;background:none;cursor:pointer}
.spd-ref::before{content:"";position:absolute;inset:6px;border-radius:50%;background:var(--card);border:2px solid var(--muted);transition:background var(--ease),border-color var(--ease),transform var(--ease)}
.spd-ref.is-low::after{content:"";position:absolute;left:11.5px;bottom:18px;width:1px;height:calc(var(--r, 0) * 24px - 6px);background:var(--line)}
.spd-ref.is-near::before{background:var(--ink);border-color:var(--ink)}
.spd-ref:hover::before{transform:scale(1.25);border-color:var(--ink)}
.spd-ref:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.spd-mark{position:absolute;top:0;margin:0;transform:translateX(-50%);transition:left .6s cubic-bezier(.2,.75,.25,1);pointer-events:none;z-index:1}
.spd-mark b{display:block;padding:2px 7px;border-radius:var(--radius);background:var(--fill);color:var(--on-fill);font-family:var(--sans);font-size:11.5px;font-weight:700;line-height:17px;white-space:nowrap;font-variant-numeric:tabular-nums}
.spd-mark::after{content:"";position:absolute;left:50%;top:100%;margin-left:-5px;border:5px solid transparent;border-top-color:var(--fill)}
.spd-mark.is-l{transform:translateX(-10px)}
.spd-mark.is-l::after{left:10px}
.spd-mark.is-r{transform:translateX(calc(-100% + 10px))}
.spd-mark.is-r::after{left:auto;right:5px;margin-left:0}
.spd-mark[hidden]{display:none}
.spd-ends{display:flex;justify-content:space-between;gap:10px;margin:2px 0 0;font-family:var(--sans);font-size:11px;color:var(--muted)}
.spd-ends span[data-u]::after{content:" · " attr(data-u)}
.spd-lanes{display:grid;gap:6px;margin:0;padding:0;list-style:none}
.spd-lane{display:grid;grid-template-columns:minmax(92px,30%) minmax(0,1fr) minmax(58px,auto);align-items:center;gap:0 10px;min-height:38px}
.spd-ln{display:flex;flex-direction:column;min-width:0;margin:0}
.spd-ln b{font-family:var(--sans);font-size:12.5px;font-weight:700;line-height:1.3;overflow-wrap:anywhere}
.spd-ln small{font-family:var(--sans);font-size:11px;color:var(--muted);line-height:1.35;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.spd-trk{position:relative;height:14px;border-radius:7px;background:var(--wash);overflow:hidden}
.spd-trk::after{content:"";position:absolute;top:0;bottom:0;left:72%;border-left:2px dashed color-mix(in srgb, var(--ink) 35%, transparent)}
.spd-run{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:7px;background:color-mix(in srgb, var(--ink) 28%, var(--wash))}
.spd-run::after{content:"";position:absolute;right:2px;top:2px;width:10px;height:10px;border-radius:50%;background:var(--ink)}
.spd-lanes.is-go .spd-run{width:var(--w);transition:width var(--dur) linear}
.spd-lanes.is-done .spd-run{width:var(--w)}
.spd-lane.is-over .spd-run{border-radius:7px 0 0 7px}
.spd-lane.is-me .spd-ln b{color:var(--accent)}
.spd-lane.is-me .spd-run{background:color-mix(in srgb, var(--accent) 30%, var(--wash))}
.spd-lane.is-me .spd-run::after{background:var(--accent)}
.spd-dist{font-family:var(--sans);font-size:12px;font-weight:700;text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.spd-lanes.is-off .spd-lane{opacity:.35}

/* 이 속도로 가면: 거리별 시간 = 경주 거리 선택 */
.spd-time{grid-area:time;min-width:0;padding:14px 18px;border-bottom:1px solid var(--soft)}
.spd-dists{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.spd-dists button{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:2px;min-width:0;padding:9px 12px;border:1px solid var(--soft);border-radius:var(--radius);background:var(--paper);text-align:left;cursor:pointer;transition:border-color var(--ease),background var(--ease)}
.spd-dists button:hover{border-color:var(--line)}
.spd-dists button span{font-family:var(--sans);font-size:11.5px;font-weight:600;color:var(--muted)}
.spd-dists button b{font-family:var(--sans);font-size:16px;font-weight:800;line-height:1.25;color:var(--ink);font-variant-numeric:tabular-nums lining-nums;overflow-wrap:anywhere}
.spd-dists button[aria-pressed="true"]{border-color:var(--ink);background:var(--card);box-shadow:inset 3px 0 0 var(--ink)}

/* 바람으로 읽기: 풍력 0~12 계단 막대(높이·진하기가 계급을 따름), 지금 계급은 채움 */
.spd-wind{grid-area:wind;min-width:0;padding:14px 18px;border-bottom:1px solid var(--soft)}
.spd-bf{display:grid;grid-template-columns:repeat(13,minmax(0,1fr));align-items:end;gap:3px}
.spd-bf button{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:3px;min-width:0;padding:0;border:0;background:none;cursor:pointer;color:var(--muted)}
.spd-bf button i{display:block;width:100%;height:calc(14px + var(--k) * 3.6px);border-radius:3px 3px 0 0;background:color-mix(in srgb, var(--ink) calc(8% + var(--k) * 4.5%), var(--wash));transition:background var(--ease),transform var(--ease);transform-origin:bottom}
.spd-bf button b{font-family:var(--sans);font-size:11.5px;font-weight:750;line-height:1;font-variant-numeric:tabular-nums}
.spd-bf button small{display:none;font-family:var(--sans);font-size:10.5px;font-weight:600;line-height:1.2;text-align:center;overflow-wrap:anywhere}
.spd-bf button:hover i{background:color-mix(in srgb, var(--ink) 55%, var(--wash))}
.spd-bf button[aria-pressed="true"]{color:var(--ink)}
.spd-bf button[aria-pressed="true"] i{background:var(--fill);transform:scaleY(1.06)}
.spd-bf button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.spd-bf.is-off button i{opacity:.5}
.spd-bfd{margin:10px 0 0;font-family:var(--sans);font-size:13.5px;line-height:1.6;color:var(--ink);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.spd-bfd b{font-weight:800}
.spd-bfe{display:block;color:var(--muted)}
.spd-fc,.spd-ty{margin:3px 0 0;font-family:var(--sans);font-size:12.5px;line-height:1.55;color:var(--muted);overflow-wrap:anywhere}
.spd-fc:empty,.spd-ty:empty{display:none}

/* 자주 찾는 값 */
.spd-quick{grid-area:quick;min-width:0;padding:14px 18px 16px}
.spd-qgs{display:grid;grid-template-columns:minmax(0,1fr);gap:12px 16px}
.spd-qt{margin:0 0 6px;font-family:var(--sans);font-size:12px;font-weight:650;color:var(--ink)}
.spd-qg ul{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin:0;padding:0;list-style:none}
.spd-qg button{display:flex;flex-direction:column;align-items:flex-start;gap:1px;width:100%;min-width:0;padding:7px 9px;border:1px solid var(--soft);border-radius:var(--radius);background:var(--paper);text-align:left;cursor:pointer;transition:border-color var(--ease),background var(--ease)}
.spd-qg button:hover{border-color:var(--line);background:var(--card)}
.spd-qg button b{font-family:var(--sans);font-size:13px;font-weight:750;font-variant-numeric:tabular-nums;white-space:nowrap}
.spd-qg button span{font-family:var(--sans);font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}

@container spd (min-width:560px){
  .spd-more{grid-template-columns:repeat(3,minmax(0,1fr))}
  .spd-dists{grid-template-columns:repeat(4,minmax(0,1fr))}
}
@container spd (min-width:700px){
  .spd-grid{grid-template-columns:minmax(0,1fr) 220px;grid-template-areas:"board board" "race time" "wind wind" "quick quick"}
  .spd-main{grid-template-columns:repeat(4,minmax(0,1fr))}
  .spd-race{border-right:1px solid var(--soft)}
  .spd-time{display:flex;flex-direction:column}
  .spd-dists{flex:1 1 auto;grid-template-columns:minmax(0,1fr);grid-auto-rows:1fr}
  .spd-qgs{grid-template-columns:repeat(2,minmax(0,1fr))}
  .spd-bf.has-names button small{display:block}
}
@container spd (max-width:439px){
  .spd-main,.spd-more{grid-template-columns:minmax(0,1fr);gap:8px}
  .spd-cell{display:grid;grid-template-columns:minmax(0,42%) minmax(0,1fr);align-items:center;gap:8px}
  .spd-cell > .v2-label{margin:0}
  .spd-acts .v2-btn .i{display:none}
  .spd-lane{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"n d" "t t";gap:3px 10px}
  .spd-ln{grid-area:n} .spd-dist{grid-area:d} .spd-trk{grid-area:t}
  .spd-tick.is-odd em{display:none}
}
@container spd (max-width:339px){ .spd-qg ul{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (prefers-reduced-motion: reduce){
  .spd-mark,.spd-ref::before,.spd-bf button i{transition:none}
  .spd-lanes.is-go .spd-run{transition:none}
}
