/* CarWatch — 단일 CSS (14장 STEP 145 · 145a).  빌드 도구도 JS 도 쓰지 않는다 */
/* ★ 이 파일의 대부분은 ref/screens/*_시안.html 에서 그대로 옮긴 것이다 (개정 275).
   다시 만들지 않는다.  시안이 정본이다.
   시안끼리 같은 이름을 다르게 쓴 것이 있어(.bar · .cand · .prog · .log …)
   그것만 body 의 화면 클래스 안에 가뒀다 — 화면을 서로 깨뜨리지 않게 한다 */

/* ── 0. 토큰 · 껍데기.  ★ 색 12 · 글꼴 2 밖의 값을 쓰지 않는다 (V11-13) ── */
:root {
  --bg:#ffffff;  --surface:#ffffff;  --surface2:#f9fafb;
  --line:#e5e8eb; --line2:#d1d6db;
  --text:#191f28; --dim:#8b95a1;     --faint:#b0b8c1;
  /* ★★ 08-25 — ★ 토큰 밖에 있던 색 스물하나에 ★ 이름을 준다 (가이드 ⓐ).
     ★ 원천은 ★ **이 `:root` 다** — ★ 시안이 아니다.
     ★ ★ 전에는 ★ `test_spec_ui` L-3 이 ★ 시안의 색을 허용 목록으로 써서
       ★ ★ 시안이 색을 늘릴 때마다 ★ app.css 의 색이 조용히 늘었다.
     ★★ 값은 ★ **한 글자도 안 바꿨다** — ★ 이름만 준다 (33-1 · 화면 체계를 안 건드린다) */
  --ink:#f9fafb;    /* 가장 짙은 바탕 — 사진 뒤·배지 뒤 */
  --ink2:#f9fafb;   /* 짙은 바탕 — 표 머리·접은 칸 */
  --ink3:#ffffff;   /* 짙은 바탕 둘째 */
  --ink4:#ffffff;      /* 검정에 가까운 것 */
  --ink5:#f9fafb;   /* 회색 바탕 */
  --ok-bg:#f9fafb;  /* 판정 OK 바탕 */
  --ok-line:#00c471; /* 판정 OK 테두리 */
  --no-bg:#f9fafb;  /* 판정 × 바탕 */
  --no-line:#f04452; /* 판정 × 테두리 */
  --warn-bg:#f9fafb; /* 주의 바탕 */
  --warn-bg2:#f9fafb; /* 주의 바탕 둘째 */
  --warn-line:#3182f6; /* 주의 테두리 */
  --warn-line2:#3182f6; /* 주의 테두리 둘째 */
  --warn-text:#3182f6; /* 주의 글자 */
  --api-bg:#f9fafb; /* 조사창 바탕 */
  --api-surface:#ffffff; /* 조사창 칸 */
  --api-line:#e5e8eb; /* 조사창 선 */
  --api-dim:#8b95a1; /* 조사창 흐린 글자 */
  --line3:#e5e8eb;  /* 선 셋째 */
  --violet:#3182f6; /* 보라 — 사전 확정 표시 */
  --amber:#3182f6;   /* 계기판 조명 — 강조는 여기 하나뿐 */
  --down:#00c471;    /* 인하 = 좋음 */
  --up:#f04452;      /* 인상 = 나쁨 */
  --gone:#b0b8c1;    /* 소진 */
  --mono:ui-monospace,"SFMono-Regular",Consolas,"D2Coding",monospace;
  --sans:-apple-system,"Segoe UI","Malgun Gothic",sans-serif;
  /* ★★ 개정 427 — 시안(ref/screens/v2_시안_목록상세.html)이 정본이다.
     ★ 시안이 쓰는 이름을 그대로 둔다 — 우리 이름으로 바꿔 적으면
       값이 갈린다 (V11-60 이 그것을 잡는다) */
  --accent:#3182f6;            /* 등급 S · 강조 */
  --good:#00c471;              /* 싸다 · 통과 */
  --bad:#f04452;               /* 비싸다 · 막힘 */
  --cool:#3182f6;              /* 정보 */
}
* { box-sizing:border-box; }
html, body { margin:0; padding:0; }
body { font:15px/1.65 var(--sans); color:var(--text); background:var(--bg); }
/* ★ 시안의 main 은 화면마다 폭이 다르다.  화면별 규칙이 이것을 덮는다 */
main { max-width:1280px; margin:0 auto; padding:18px 20px 60px; }
a { color:var(--amber); }

.top { display:flex; justify-content:space-between; align-items:center;
       padding:10px 24px; border-bottom:1px solid var(--line); }
.brand { font-weight:700; text-decoration:none; letter-spacing:.02em;
         color:var(--text); }
.who { color:var(--dim); font-size:13px; }
.inline { display:inline; }

.nav { display:flex; flex-wrap:wrap; gap:14px; padding:8px 24px;
       border-bottom:1px solid var(--line); font-size:14px; }
.nav-item { color:var(--dim); text-decoration:none; }

/* ★★ 08-28 — ★ 여기 메뉴 블록을 뺐다.  ★ 이미 아래에 ★ 같은 규칙이 있다
   (「상단 메뉴를 손가락 폭에서는 아래 탭으로」 · 마스터 확정 08-25).
   ★ 실측 — ★ 내가 모르고 하나를 더 넣어 ★ 같은 규칙이 두 벌이 됐다.
   ★ ★ 마스터께서 「메뉴가 위에 있다가 밑으로」 하신 것은 ★ **이미 고쳐져 있었다** */
.nav-item em { color:var(--faint); font-style:normal; font-size:12px; }
.locked { color:var(--up); font-size:12px; }

.flash { margin:10px 24px 0; padding:8px 12px; background:var(--surface2);
         border-left:3px solid var(--down); }
.banner { margin:10px 24px 0; padding:10px 12px; border-left:3px solid;
          background:var(--surface); }
.banner-unclassified { border-color:var(--amber); }
.banner-pending      { border-color:var(--faint); }
.banner-halted       { border-color:var(--up); }
.banner-action { color:var(--dim); margin-left:8px; }

/* ── 1. 공통 — 시안 544규칙 (모든 시안이 같은 값을 쓰는 것) ── */
.num { font-family:var(--mono);font-variant-numeric:tabular-nums }
nav a.on { color:var(--bg);background:var(--amber);font-weight:600 }
.sgrp { display:flex;align-items:center;gap:2px }
.sgrp .lbl { font-size:10px;letter-spacing:.08em;color:var(--faint); text-transform:uppercase;margin-right:6px;white-space:nowrap }
.sub a { padding:4px 10px;font-size:12.5px;color:var(--dim);border-radius:12px; white-space:nowrap }
.sub a:hover { color:var(--text);background:var(--surface2) }
.sub a.on { color:var(--amber);background:var(--warn-bg2) }
.sub .sep { width:1px;height:16px;background:var(--line);flex:none }
h2:first-of-type { margin-top:0 }
h2 .more { float:right;font-size:11px;letter-spacing:0;text-transform:none;color:var(--faint) }
tbody tr:hover { background:var(--surface2) }
.r { text-align:right }
.c { text-align:center }
.tag.amber { border-color:var(--warn-line);background:var(--warn-bg2);color:var(--amber) }
.tag.down { border-color:var(--ok-line);background:var(--ok-bg);color:var(--down) }
.tag.up { border-color:var(--no-line);background:var(--no-bg);color:var(--up) }
.dim { color:var(--dim) }
.faint { color:var(--faint) }
.btn.on { background:var(--amber);color:var(--bg);border-color:var(--amber);font-weight:600 }
.f label { display:block;font-size:11px;letter-spacing:.07em;color:var(--faint); text-transform:uppercase;margin-bottom:5px }
.f input,.f select { width:100% }
.f .h { font-size:11.5px;color:var(--faint);margin-top:4px;line-height:1.6 }
.url { background:var(--ink);border:1px solid var(--line);border-radius:6px; padding:10px 12px;font-family:var(--mono);font-size:11.5px;color:var(--dim); line-height:1.8;word-break:break-all;margin-bottom:11px }
.url b { color:var(--amber) }
.url .p { color:var(--text) }
.resp { background:var(--ink);border:1px solid var(--line);border-radius:6px; padding:11px 13px;font-family:var(--mono);font-size:11.5px;line-height:1.75; max-height:460px;overflow:auto;color:var(--dim) }
.resp .k { color:var(--amber) }
.resp .s { color:var(--down) }
.resp .n { color:var(--text) }
.resp .b { color:var(--violet) }
.resp .nl { color:var(--faint) }
.rmeta { display:flex;gap:12px;align-items:center;font-size:12px;color:var(--dim); margin-bottom:8px;flex-wrap:wrap }
.rmeta b { font-family:var(--mono);color:var(--text) }
.note b { color:var(--text) }
.note .k { color:var(--amber) }
.warnbox b { color:var(--amber) }
.stat:last-child { border-right:0 }
.stat:hover { background:var(--surface2) }
.stat.on { background:var(--warn-bg2) }
.stat .k { font-size:10.5px;letter-spacing:.07em;color:var(--faint);text-transform:uppercase }
.code { font-family:var(--mono);font-size:12px;font-weight:600 }
.kind { font-size:10px;padding:1px 5px;border-radius:3px;border:1px solid var(--line2); color:var(--faint) }
.kind.code { color:var(--up);border-color:var(--no-line) }
.kind.contract { color:var(--up);border-color:var(--no-line) }
.kind.external { color:var(--amber);border-color:var(--warn-line) }
.kind.total { color:var(--up);border-color:var(--no-line) }
.exp { background:var(--ink2);font-size:12px;color:var(--dim);line-height:1.7; padding:10px 14px 10px 32px }
.exp .l { padding:2px 0 }
.exp .l b { color:var(--text) }
.exp .act { color:var(--amber);margin-top:6px;padding-top:6px; border-top:1px solid var(--line) }
tr.det { display:none }
tr.det.open { display:table-row }
.tw { cursor:pointer }
.tw .car { color:var(--faint);font-size:9px;margin-right:5px }
input.chg { border-color:var(--amber);color:var(--amber) }
input:disabled { opacity:.4;cursor:not-allowed }
.kp { font-family:var(--mono);font-size:12px }
.kp .f { color:var(--faint) }
tr.lock td { opacity:.55 }
tr.lock:hover td { opacity:.75 }
.imp { font-size:11px;color:var(--faint) }
.imp.hi { color:var(--amber) }
.savebar { position:fixed;left:0;right:0;bottom:0;background:var(--ink2); border-top:1px solid var(--line2);padding:11px 20px;z-index:40; display:flex;align-items:center;gap:12px;box-shadow:0 -6px 20px rgba(0,0,0,.08) }
.savebar .n { font-size:13px }
.savebar .n b { font-family:var(--mono);color:var(--amber) }
.savebar .sp { margin-left:auto }
.ed { width:100%;min-height:120px;background:var(--ink);border:1px solid var(--line2); border-radius:6px;color:var(--text);font-family:var(--mono);font-size:13px; padding:11px 13px;line-height:1.7;resize:vertical }
.ed:focus { outline:1px solid var(--amber);border-color:var(--amber) }
.edbar { display:flex;gap:8px;align-items:center;margin-top:9px;flex-wrap:wrap }
.res { margin-top:14px }
.resmeta { display:flex;gap:14px;align-items:center;font-size:12px; color:var(--dim);margin-bottom:8px;flex-wrap:wrap }
.resmeta b { font-family:var(--mono);color:var(--text) }
.err b { color:var(--text) }
.err .why { color:var(--dim);font-size:12px;margin-top:7px; padding-top:7px;border-top:1px solid var(--no-line) }
.sch { font-size:12px }
.sch .t { padding:5px 8px;cursor:pointer;border-radius:12px; font-family:var(--mono);font-size:12px }
.sch .t:hover { background:var(--surface2);color:var(--amber) }
.sch .g { font-size:10px;letter-spacing:.07em;color:var(--faint); text-transform:uppercase;padding:9px 8px 4px }
.sch .cols { padding:2px 8px 8px 18px;color:var(--faint);font-family:var(--mono); font-size:11px;line-height:1.7;display:none }
.sch .cols.open { display:block }
.ex { padding:6px 9px;border:1px solid var(--line);border-radius:12px; margin-bottom:6px;cursor:pointer;font-size:12px }
.ex:hover { border-color:var(--faint);background:var(--surface2) }
.ex .t { color:var(--text) }
.ex .q { font-family:var(--mono);font-size:11px;color:var(--faint);margin-top:3px; white-space:nowrap;overflow:hidden;text-overflow:ellipsis }
.btn.off { opacity:.4;cursor:not-allowed }
input[type=checkbox] { accent-color:var(--amber);cursor:pointer }
.path { font-family:var(--mono);font-size:12px }
.path .ep { color:var(--faint) }
.samp { font-family:var(--mono);font-size:11.5px;color:var(--dim); max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; display:inline-block;vertical-align:middle }
.usage { display:flex;gap:3px }
.usage span { font-size:10.5px;padding:2px 7px;border-radius:12px; border:1px solid var(--line2);color:var(--faint);cursor:pointer; white-space:nowrap }
.usage span:hover { border-color:var(--faint);color:var(--dim) }
.usage span.sel { background:var(--amber);color:var(--bg);border-color:var(--amber); font-weight:600 }
.usage span.sel.d { background:var(--line3);color:var(--text);border-color:var(--line3) }
.usage span.sel.u { background:var(--ink5);color:var(--dim);border-color:var(--line2) }
.usage span.sel.f { background:var(--warn-bg2);color:var(--amber);border-color:var(--warn-line) }
tr.done td { opacity:.5 }
tr.done:hover td { opacity:.8 }
input[type=text],textarea { background:var(--surface2);border:1px solid var(--line2); border-radius:6px;color:var(--text);padding:8px 11px;font-size:13px; font-family:var(--sans);width:100% }
textarea { min-height:90px;resize:vertical;line-height:1.6 }
input:focus,textarea:focus { outline:1px solid var(--amber);border-color:var(--amber) }
.req { border:1px solid var(--line);border-radius:8px;background:var(--surface); margin-bottom:10px;overflow:hidden }
.req.open { border-color:var(--warn-line) }
.rhead { display:flex;align-items:flex-start;gap:12px;padding:12px 15px; cursor:pointer }
.rhead:hover { background:var(--surface2) }
.rid { font-family:var(--mono);font-size:11.5px;color:var(--faint);width:52px; flex:none;padding-top:2px }
.rinfo { flex:1;min-width:0 }
.rt { font-size:14px;font-weight:600 }
.rm { font-size:11.5px;color:var(--faint);margin-top:3px }
.rm .st { margin-right:8px }
.rbody { border-top:1px solid var(--line);background:var(--ink2);padding:13px 15px; display:none }
.req.on .rbody { display:block }
.rsec { margin-bottom:11px }
.rsec:last-child { margin-bottom:0 }
.rsec .k { font-size:10.5px;letter-spacing:.07em;color:var(--faint); text-transform:uppercase;margin-bottom:4px }
.rsec .v { font-size:13px;line-height:1.7;color:var(--dim) }
.rsec .v b { color:var(--text) }
.rsec .v .num { color:var(--amber) }
.st { font-size:10px;padding:1px 6px;border-radius:3px;border:1px solid var(--line2); color:var(--faint) }
.st.new { border-color:var(--warn-line);background:var(--warn-bg2);color:var(--amber) }
.st.doing { border-color:var(--ok-line);background:var(--ok-bg);color:var(--down) }
.st.done { color:var(--faint) }
.st.hold { border-color:var(--no-line);color:var(--up) }
.flow { display:flex;gap:4px;flex-wrap:wrap;margin-top:9px }
.flow span { font-size:10.5px;padding:3px 9px;border:1px solid var(--line2); border-radius:12px;color:var(--faint);cursor:pointer }
.flow span:hover { border-color:var(--faint);color:var(--dim) }
.flow span.cur { background:var(--amber);color:var(--bg);border-color:var(--amber); font-weight:600 }
tr:last-child td { border-bottom:0 }
.up-v { color:var(--up) }
.down-v { color:var(--down) }
.btn.danger { border-color:var(--no-line);color:var(--up) }
/* ★ 나가는 단추 — 채운 단추다 (명령서 13-2 ⑥ · v3 시안 .btn.go).
   ★ 「엔카에서 보기」가 화면에서 가장 중요한 단추인데 글자색만 있었다 */
.btn.go { background:var(--amber);border-color:var(--amber);color:var(--ink4);font-weight:600 }
/* ★★ 상세 머리 사진 (명령서 13-1 ⑫ · ref/screens/v3_detail_시안.html).
   ★ 320 × 180 (16:9) · ★ 눌러서 다음 장 · ★ 「1 / N」
   ★ 마스터 확정은 「실물 사진 30장 금지」다 — ★ 「한 장도 금지」가 아니다
   ★ JS 없이 간다 — ★ 앵커와 :target 이 갈아 끼운다 (why 화면과 같은 얼개) */
.dhead { display:flex; gap:14px; align-items:flex-start; flex-wrap:wrap }
.photo { position:relative; flex:0 0 320px; width:320px }
.pwrap { position:relative; width:320px; height:180px; border-radius:8px;
         background:var(--surface2); border:1px solid var(--line);
         overflow:hidden }
.pwrap .one { position:absolute; inset:0; display:none }
.pwrap .one:first-child { display:block }
.pwrap .one:target { display:block }
.pwrap img { width:100%; height:100%; object-fit:cover; display:block }
.pimg { width:320px; height:180px; border-radius:8px; background:var(--surface2);
        border:1px solid var(--line); display:flex; align-items:center;
        justify-content:center; color:var(--faint); font-size:12px }
.pnum { position:absolute; right:8px; bottom:8px; background:var(--surface2);
        border:1px solid var(--line2); border-radius:12px; padding:1px 8px;
        font-size:11px; color:var(--dim) }
.psite { position:absolute; top:8px; left:8px; background:var(--surface2);
         border:1px solid var(--line2); border-radius:12px; padding:1px 6px;
         font-size:10.5px; color:var(--dim) }
.dhead-txt { flex:1; min-width:0 }
.dhead-name { font-size:15px }
@media (max-width:639px) {
  .photo, .pwrap, .pimg { flex:1 1 100%; width:100% }
}
.btn:disabled,.btn.off { opacity:.4;cursor:not-allowed }
input[type=checkbox],input[type=radio] { accent-color:var(--amber) }
.runbox { border:1px solid var(--line2);border-radius:8px;background:var(--surface); padding:16px 18px;margin-bottom:14px }
.rrow { display:flex;align-items:center;gap:12px;padding:9px 0; border-bottom:1px solid var(--line);flex-wrap:wrap }
.rrow:last-of-type { border-bottom:0 }
.rrow .k { width:96px;flex:none;font-size:12px;color:var(--faint); letter-spacing:.06em;text-transform:uppercase }
.rrow .v { flex:1;display:flex;gap:8px;align-items:center;flex-wrap:wrap }
.est { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:12px 15px;margin-top:12px;font-size:13px }
.est .l { display:flex;gap:14px;padding:3px 0;flex-wrap:wrap }
.est .l .w { width:110px;color:var(--dim);flex:none }
.est .l b { font-family:var(--mono) }
.est .warn { color:var(--amber);margin-top:8px;padding-top:8px; border-top:1px solid var(--line);font-size:12.5px }
.confirm { border:1px solid var(--warn-line);background:var(--warn-bg);border-radius:7px; padding:13px 16px;margin-top:12px;display:none }
.confirm.show { display:block }
.confirm .t { font-size:13px;margin-bottom:9px }
.confirm .t b { color:var(--amber) }
.confirm input[type=text] { background:var(--surface2);border:1px solid var(--line2); border-radius:12px;color:var(--text);font-family:var(--mono);padding:5px 10px; width:120px;font-size:13px }
.pline { display:flex;align-items:center;gap:10px;padding:6px 0;font-size:12.5px }
.pline .s { width:120px;flex:none;font-family:var(--mono);font-size:12px }
.pline .b { flex:1;height:6px;background:var(--surface2);border:1px solid var(--line); border-radius:3px;overflow:hidden }
.pline .b i { display:block;height:100%;background:var(--down) }
.pline .b i.run { background:var(--amber) }
.pline .n { width:130px;text-align:right;flex:none;font-family:var(--mono); font-size:11.5px;color:var(--dim) }
.pline.wait { opacity:.4 }
.log .t { color:var(--faint) }
.log .ok { color:var(--down) }
.log .wa { color:var(--amber) }
.log .er { color:var(--up) }
input[type=number],input[type=text] { background:var(--surface2); border:1px solid var(--line2);border-radius:12px;color:var(--text); padding:4px 8px;font-family:var(--mono);font-size:13px;text-align:right;width:62px }
input:focus { outline:1px solid var(--amber);border-color:var(--amber) }
tr.grp td b { color:var(--dim);font-family:var(--mono);font-size:11.5px }
tr.sub td:first-child { padding-left:22px;color:var(--dim) }
.sum { display:flex;align-items:center;gap:14px;padding:11px 14px; border:1px solid var(--line2);border-radius:7px;background:var(--surface); margin-bottom:12px;flex-wrap:wrap }
.sum .k { font-size:10.5px;letter-spacing:.07em;color:var(--faint); text-transform:uppercase }
.sum .v { font-family:var(--mono);font-size:19px;font-weight:600 }
.sum .bad { color:var(--up) }
.sum .ok { color:var(--down) }
.sum .sep { width:1px;height:26px;background:var(--line) }
.pv { border:1px solid var(--line);border-radius:7px;background:var(--surface); padding:14px 16px }
.pv.locked { opacity:.45 }
.dist div { display:flex;align-items:center;justify-content:center; font-family:var(--mono);font-size:10.5px;color:var(--bg);font-weight:600 }
.dist .s { background:var(--amber) }
.dist .a { background:var(--warn-text) }
.dist .b { background:var(--dim) }
.dist .c { background:var(--faint) }
.dist .d { background:var(--line3);color:var(--dim) }
.dist .e { background:var(--line);color:var(--faint) }
.mv { display:flex;gap:10px;font-size:12px;padding:4px 0;align-items:center }
.mv .w { width:130px;color:var(--dim);flex:none }
.mv .n { font-family:var(--mono) }
.wiz { border:1px solid var(--line2);border-radius:8px;background:var(--surface); overflow:hidden;margin-bottom:14px }
.wtabs { display:flex;border-bottom:1px solid var(--line);background:var(--ink2) }
.wtab { flex:1;padding:11px 14px;font-size:12.5px;color:var(--faint); border-right:1px solid var(--line);text-align:center }
.wtab:last-child { border-right:0 }
.wtab.on { color:var(--amber);background:var(--surface);font-weight:600 }
.wtab.done { color:var(--down) }
.wtab .n { font-family:var(--mono);margin-right:6px }
.wbody { padding:16px 18px }
.wrow { display:flex;align-items:center;gap:12px;padding:8px 0;flex-wrap:wrap }
.wrow .k { width:96px;flex:none;font-size:12px;color:var(--faint); letter-spacing:.06em;text-transform:uppercase }
.wrow .v { flex:1;display:flex;gap:8px;align-items:center;flex-wrap:wrap }
.facet { background:var(--ink);border:1px solid var(--line);border-radius:6px; padding:11px 13px;font-family:var(--mono);font-size:11.5px; line-height:1.8;color:var(--dim);max-height:220px;overflow-y:auto }
.facet .ok { color:var(--down) }
.facet .wa { color:var(--amber) }
.facet b { color:var(--text) }
.cands { display:flex;flex-wrap:wrap;gap:6px;margin-top:8px }
.cand:hover { border-color:var(--faint) }
.cand.sel { background:var(--warn-bg2);border-color:var(--warn-line);color:var(--amber) }
.cand .n { font-family:var(--mono);font-size:11px;color:var(--faint) }
.cand.sel .n { color:var(--amber) }
.warn { font-size:11.5px;color:var(--amber);margin-left:10px }
.qprev { background:var(--ink);border:1px solid var(--line);border-radius:6px; padding:10px 12px;font-family:var(--mono);font-size:11.5px;color:var(--dim); line-height:1.8;margin-top:10px;word-break:break-all }
.qprev b { color:var(--amber) }
button,.btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:6px 13px; font-size:12.5px;font-family:inherit;cursor:pointer }
.tool { border:1px solid var(--line);border-radius:8px;background:var(--surface); margin-bottom:11px;overflow:hidden }
.tool.warn { border-color:var(--warn-line) }
.thead { display:flex;align-items:flex-start;gap:13px;padding:14px 16px }
.tinfo { flex:1;min-width:0 }
.tname { font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px }
.tdesc { font-size:12.5px;color:var(--dim);margin-top:4px;line-height:1.65 }
.tcli { font-family:var(--mono);font-size:11.5px;color:var(--faint);margin-top:6px }
.tact { flex:none;display:flex;flex-direction:column;gap:6px;align-items:flex-end }
.tstat { font-size:11.5px;color:var(--faint);font-family:var(--mono) }
.out { border-top:1px solid var(--line);background:var(--ink);padding:11px 14px; font-family:var(--mono);font-size:11.5px;line-height:1.8;color:var(--dim); max-height:260px;overflow-y:auto;display:none }
.out.on { display:block }
.out .ok { color:var(--down) }
.out .wa { color:var(--amber) }
.out .er { color:var(--up) }
.out b { color:var(--text) }
.pol .opts { display:flex;gap:5px }
.pol .opt { font-size:12.5px;padding:5px 12px;border:1px solid var(--line2); border-radius:12px;color:var(--dim);cursor:pointer }
.pol .opt:hover { border-color:var(--faint) }
.pol .opt.sel { background:var(--amber);color:var(--bg);border-color:var(--amber); font-weight:600 }
.pol .d { font-size:11.5px;color:var(--faint);flex:1;min-width:200px }
.pend { border:1px solid var(--warn-line);border-radius:7px;background:var(--warn-bg); padding:12px 15px;margin-bottom:14px }
.pend .h { font-size:11px;letter-spacing:.08em;color:var(--amber); text-transform:uppercase;margin-bottom:9px }
.prow { display:flex;align-items:center;gap:12px;padding:7px 0; border-bottom:1px solid var(--line);font-size:13px }
.prow:last-child { border-bottom:0 }
.prow .n { flex:1 }
.prow .n .m { font-size:11.5px;color:var(--dim);font-family:var(--mono) }
.prow .t { font-size:11.5px;color:var(--faint);font-family:var(--mono) }
.role { font-size:10.5px;padding:2px 8px;border-radius:12px;cursor:pointer; border:1px solid var(--line2);color:var(--faint) }
.role.admin { background:var(--warn-bg2);border-color:var(--warn-line);color:var(--amber) }
.role.user { background:var(--surface2);color:var(--dim) }
.role.off { background:var(--no-bg);border-color:var(--no-line);color:var(--up) }
tr.dis td { opacity:.45 }
tr.dis:hover td { opacity:.75 }
tr.me td { background:var(--surface2) }
.dim-bg { position:fixed;inset:0;background:var(--surface2);z-index:60; display:none;align-items:center;justify-content:center;padding:24px }
.dim-bg.on { display:flex }
.modal { width:100%;max-width:420px;background:var(--surface); border:1px solid var(--line2);border-radius:9px;padding:20px 22px; box-shadow:0 16px 44px rgba(0,0,0,.10) }
.modal h3 { margin:0 0 5px;font-size:15px;font-weight:600 }
.modal .s { font-size:12.5px;color:var(--dim);margin-bottom:16px;line-height:1.6 }
.mf { margin-bottom:12px }
.mf label { display:block;font-size:11px;letter-spacing:.07em;color:var(--faint); text-transform:uppercase;margin-bottom:5px }
.mf label .opt { color:var(--faint);text-transform:none;letter-spacing:0; font-size:10.5px;margin-left:5px }
.mf input { width:100%;background:var(--surface2);border:1px solid var(--line2); border-radius:6px;color:var(--text);padding:8px 11px;font-size:13.5px; font-family:var(--sans) }
.mf input.mono { font-family:var(--mono) }
.mf input:focus { outline:1px solid var(--amber);border-color:var(--amber) }
.mf .h { font-size:11.5px;color:var(--faint);margin-top:4px }
.mf .h.bad { color:var(--up) }
.mf .h.ok { color:var(--down) }
.mrole { display:flex;gap:6px }
.mrole span { flex:1;text-align:center;font-size:12.5px;padding:7px 0; border:1px solid var(--line2);border-radius:6px;color:var(--dim);cursor:pointer }
.mrole span:hover { border-color:var(--faint) }
.mrole span.sel { background:var(--amber);color:var(--bg);border-color:var(--amber); font-weight:600 }
.mtemp { background:var(--warn-bg);border:1px solid var(--warn-line);border-radius:6px; padding:11px 13px;margin:14px 0;font-size:12.5px;color:var(--dim);line-height:1.7 }
.mtemp .v { font-family:var(--mono);font-size:17px;font-weight:600;color:var(--text); background:var(--ink);border:1px solid var(--line2);border-radius:12px; padding:7px 11px;text-align:center;margin:7px 0;user-select:all }
.mtemp b { color:var(--amber) }
.mbtn { display:flex;gap:8px;margin-top:16px }
.mbtn .btn { flex:1;text-align:center;padding:9px }
.mbtn .btn.on { font-weight:600 }
nav a:hover { color:var(--text);background:var(--surface2) }
.g3 { grid-template-columns:repeat(3,1fr) }
a.tag:hover { border-color:var(--amber) }
.stat .v small { font-size:11px;color:var(--dim);font-weight:400;margin-left:3px }
.todo:last-child { border-bottom:0 }
.todo .t { flex:1 }
.todo .t .d { font-size:11.5px;color:var(--dim);margin-top:2px }
.tiles { display:grid;grid-template-columns:repeat(4,1fr);gap:10px }
.tile { border:1px solid var(--line);border-radius:7px;background:var(--surface); padding:13px 14px;display:block }
.tile:hover { border-color:var(--faint);background:var(--surface2) }
.tile .t { font-size:13.5px;font-weight:600 }
.tile .d { font-size:11.5px;color:var(--dim);margin-top:3px;line-height:1.5 }
.tile .n { font-family:var(--mono);font-size:11.5px;color:var(--amber);margin-top:6px }
.tile.locked { opacity:.5 }
.tile.locked:hover { border-color:var(--line) }
.lock { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);margin-bottom:14px }
.lock b { color:var(--amber) }
table.cmp { width:100%;border-collapse:collapse;font-size:13px }
table.cmp th,table.cmp td { padding:8px 12px;border-bottom:1px solid var(--line); vertical-align:middle }
table.cmp th { font-size:10.5px;font-weight:600;letter-spacing:.06em;color:var(--faint); text-transform:uppercase;text-align:left;background:var(--surface2); border-bottom:1px solid var(--line2) }
table.cmp td:first-child,table.cmp th:first-child { width:150px;color:var(--dim); background:var(--ink2);position:sticky;left:0;z-index:5 }
table.cmp td { text-align:center;font-family:var(--mono) }
table.cmp td:first-child { text-align:left;font-family:var(--sans) }
table.cmp tr:last-child td { border-bottom:0 }
.chd { padding:14px 12px;text-align:left!important;font-family:var(--sans)!important; border-bottom:1px solid var(--line2);background:var(--surface2) }
.chd .t { font-size:14px;font-weight:600;margin-top:5px }
.chd .s { font-size:11.5px;color:var(--dim);margin-top:2px }
.chd .p { font-family:var(--mono);font-size:19px;font-weight:600;margin-top:6px }
.chd .x { float:right;color:var(--faint);cursor:pointer;font-size:14px; padding:0 4px;border-radius:3px }
.chd .x:hover { color:var(--up);background:var(--surface2) }
.win { font-weight:700;position:relative }
.win::after { content:"●";color:var(--amber);font-size:7px; vertical-align:super;margin-left:3px }
.lose { color:var(--faint) }
.verdict { border:1px solid var(--warn-line);border-radius:8px;background:var(--surface); padding:16px 18px;margin-bottom:14px }
.verdict h3 { margin:0 0 10px;font-size:12px;letter-spacing:.09em; color:var(--amber);text-transform:uppercase;font-weight:600 }
.vrow { display:flex;gap:12px;padding:7px 0;font-size:13px; border-bottom:1px solid var(--line) }
.vrow:last-child { border-bottom:0 }
.vrow .k { width:120px;color:var(--dim);flex:none }
.vrow .v { flex:1 }
.vrow .v b { color:var(--amber) }
.slot { border:1px dashed var(--line2);border-radius:7px;padding:22px 14px; text-align:center;color:var(--faint);font-size:12.5px }
.dot.ok { background:var(--down) }
.cellnum { border-bottom:1px dotted var(--line2);cursor:pointer }
.cellnum:hover { border-bottom-color:var(--amber);color:var(--amber)!important }
.dist div,.dist a { display:flex;align-items:center;justify-content:center; font-family:var(--mono);font-size:11px;color:var(--bg);font-weight:600 }
.legend { display:flex;gap:12px;margin-top:8px;font-size:11px;color:var(--faint);flex-wrap:wrap }
.legend b { color:var(--text);font-family:var(--mono) }
.tcard { cursor:pointer;border:1px solid var(--line);border-radius:6px;padding:11px 13px; background:var(--surface2) }
.tcard:hover { border-color:var(--faint) }
.tcard .t { font-size:13px;font-weight:600 }
.tcard .n { font-family:var(--mono);font-size:19px;font-weight:600;margin-top:3px }
.tcard .m { font-size:11px;color:var(--dim);margin-top:4px }
.mini div { height:100% }
.f:hover { border-bottom-color:var(--amber);color:var(--amber)!important }
.quad { position:relative;height:360px;border:1px solid var(--line); border-radius:7px;background:var(--surface);margin-bottom:6px }
.quad .axis { position:absolute;background:var(--line2) }
.quad .axis.v { left:50%;top:0;bottom:0;width:1px }
.quad .axis.h { top:50%;left:0;right:0;height:1px }
.qlabel { position:absolute;font-size:10.5px;letter-spacing:.06em; color:var(--faint);text-transform:uppercase }
.qname { position:absolute;font-size:11.5px;color:var(--dim) }
.pt { position:absolute;border-radius:50%;cursor:pointer; transform:translate(-50%,-50%);border:1px solid var(--bg) }
.pt:hover { outline:2px solid var(--amber);outline-offset:1px;z-index:12 }
.pt .tip { position:absolute;bottom:calc(100% + 8px);left:50%; transform:translateX(-50%);background:var(--surface2); border:1px solid var(--line2);border-radius:12px;padding:6px 10px; font-size:11.5px;white-space:nowrap;display:none;z-index:20; box-shadow:0 6px 18px rgba(0,0,0,.08);color:var(--text) }
.pt .tip b { font-family:var(--mono);color:var(--amber) }
.pt:hover .tip { display:block }
.pt.q1 { background:var(--amber) }
.pt.q2 { background:var(--up) }
.pt.q3 { background:var(--down) }
.pt.q4 { background:var(--faint) }
.pt.mine { outline:2px solid var(--text);outline-offset:1px }
.qlegend { display:flex;gap:16px;flex-wrap:wrap;font-size:11.5px; color:var(--faint);margin-bottom:14px }
.qlegend i { width:9px;height:9px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle }
.mb { display:inline-block;width:52px;height:4px;border-radius:2px; background:var(--surface2);border:1px solid var(--line); vertical-align:middle;overflow:hidden;margin-left:6px }
.mb i { display:block;height:100%;background:var(--dim) }
.mb.hi i { background:var(--down) }
.mb.lo i { background:var(--up) }
.thin { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim) }
.thin b { color:var(--amber) }
.scr { display:none;min-height:100vh;align-items:center;justify-content:center; padding:32px 20px }
.scr.on { display:flex }
.card h1 { margin:0 0 5px;font-size:16px;font-weight:600 }
.card .sub { font-size:12.5px;color:var(--dim);margin-bottom:18px;line-height:1.6 }
.f input { width:100%;background:var(--surface2);border:1px solid var(--line2); border-radius:6px;color:var(--text);padding:9px 12px;font-size:14px; font-family:var(--sans) }
.f input:focus { outline:1px solid var(--amber);border-color:var(--amber) }
.f .hint { font-size:11.5px;color:var(--faint);margin-top:5px;line-height:1.6 }
.f .hint.bad { color:var(--up) }
.f .hint.ok { color:var(--down) }
.btn.ghost { background:var(--surface2);color:var(--text);border-color:var(--line2); font-weight:400 }
.err.on { display:block }
.foot { text-align:center;font-size:11.5px;color:var(--faint);margin-top:16px; line-height:1.8 }
.foot a { color:var(--dim);border-bottom:1px dotted var(--line2) }
.foot a:hover { color:var(--amber);border-bottom-color:var(--amber) }
.rules { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 13px;margin-bottom:14px }
.rule { display:flex;align-items:center;gap:8px;font-size:12px;padding:2px 0; color:var(--faint) }
.rule .m { width:13px;text-align:center;font-family:var(--mono);font-size:11px }
.rule.ok { color:var(--down) }
.rule.ok .m::before { content:"✓" }
.rule .m::before { content:"·" }
.lead b { color:var(--amber) }
.lead .car { background:var(--surface2);border:1px solid var(--line2); border-radius:12px;padding:8px 11px;margin-top:9px;font-size:12.5px }
.lead .car .t { font-weight:600 }
.lead .car .d { color:var(--dim);font-size:11.5px;margin-top:2px }
.pol b { color:var(--text) }
.big { font-size:30px;line-height:1;margin-bottom:12px;text-align:center }
.sw { font-size:10.5px;padding:3px 8px;border:1px solid var(--line2); border-radius:12px;color:var(--faint);cursor:pointer;background:var(--surface) }
.sw:hover { color:var(--amber);border-color:var(--amber) }
select:hover,button:hover,.btn:hover { border-color:var(--faint) }
.chips { display:flex;gap:6px;align-items:center;flex-wrap:wrap; margin-bottom:12px;min-height:26px }
.chip { font-size:11.5px;padding:2px 4px 2px 9px;border-radius:12px; background:var(--surface2);border:1px solid var(--line2); color:var(--text);display:inline-flex;align-items:center;gap:2px }
.chip b { color:var(--amber);font-weight:600 }
.chip .x { color:var(--faint);cursor:pointer;padding:0 5px; border-radius:50%;font-size:13px;line-height:1 }
.chip .x:hover { color:var(--up);background:var(--surface2) }
.chips .clear { font-size:11.5px;color:var(--faint);cursor:pointer; border-bottom:1px dotted var(--line2);margin-left:4px }
.chips .clear:hover { color:var(--amber);border-bottom-color:var(--amber) }
.chips .none { font-size:11.5px;color:var(--faint) }
th a { color:var(--faint);cursor:pointer }
th a:hover { color:var(--amber) }
th.on a { color:var(--amber) }
.thumb-none { width:56px;height:38px;border-radius:12px;background:var(--surface2); border:1px solid var(--line);display:flex;align-items:center; justify-content:center;font-size:9px;color:var(--faint) }
td.c .f { border-bottom:none;padding:1px 5px;border-radius:3px }
td.c .f:hover { background:var(--surface2) }
.g { font-family:var(--mono);font-weight:700;font-size:13px;cursor:pointer; border-bottom:1px dotted transparent;padding:0 3px }
.g:hover { color:var(--amber);border-bottom-color:var(--amber) }
.g.e,.g.nr { color:var(--faint);font-weight:400 }
.ratio { display:inline-block;width:46px;height:4px;border-radius:2px; background:var(--surface2);vertical-align:middle;border:1px solid var(--line); overflow:hidden;margin-left:6px }
.ratio i { display:block;height:100%;background:var(--dim) }
.ratio.hi i { background:var(--down) }
.den { font-size:10px;color:var(--faint) }
.den.short { color:var(--amber) }
.ax { font-family:var(--mono);font-size:12px }
.ax.o { color:var(--down) }
.ax.x { color:var(--faint) }
.ax.u { color:var(--amber) }
tr.ex:hover td { opacity:.8 }
.page { display:flex;gap:6px;align-items:center;justify-content:center; margin-top:16px;font-size:12.5px;color:var(--dim) }
.page a { padding:4px 10px;border:1px solid var(--line2);border-radius:12px;cursor:pointer }
.page a.on { background:var(--amber);color:var(--bg);border-color:var(--amber) }
.empty { padding:44px 24px;text-align:center;color:var(--dim) }
.empty h3 { color:var(--text);font-size:15px;margin:0 0 8px }
.act { margin-top:14px;border:1px solid var(--line2);border-radius:7px; background:var(--surface);padding:13px 16px }
.act h3 { font-size:11px;font-weight:600;letter-spacing:.09em;color:var(--dim); text-transform:uppercase;margin:0 0 5px }
.act .q { font-size:12.5px;color:var(--faint);margin-bottom:10px }
.act .q b { color:var(--amber);font-family:var(--mono) }
.act .btns { display:flex;gap:8px;flex-wrap:wrap }
.f input.bad { border-color:var(--up) }
.str { display:flex;gap:3px;margin-top:7px }
.str i { flex:1;height:3px;border-radius:2px;background:var(--line) }
.str i.on1 { background:var(--up) }
.str i.on2 { background:var(--amber) }
.str i.on3 { background:var(--down) }
.strl { font-size:11px;color:var(--faint);margin-top:5px }
.temp { background:var(--warn-bg);border:1px solid var(--warn-line);border-radius:7px; padding:14px 16px;margin-bottom:16px }
.temp .k { font-size:10.5px;letter-spacing:.07em;color:var(--amber); text-transform:uppercase;margin-bottom:7px }
.temp .v { font-family:var(--mono);font-size:19px;font-weight:600; letter-spacing:.08em;color:var(--text); background:var(--ink);border:1px solid var(--line2);border-radius:12px; padding:9px 12px;text-align:center;user-select:all }
.temp .w { font-size:11.5px;color:var(--dim);margin-top:9px;line-height:1.7 }
.temp .w b { color:var(--amber) }
.cli { background:var(--ink);border:1px solid var(--line);border-radius:6px; padding:11px 13px;font-family:var(--mono);font-size:12px; color:var(--dim);line-height:1.8;margin-bottom:14px }
.cli b { color:var(--amber) }
.steps i { width:22px;height:3px;border-radius:2px;background:var(--line) }
.steps i.on { background:var(--amber) }
.steps i.done { background:var(--down) }
.hist { display:flex;align-items:flex-end;gap:3px;height:130px; padding:0 4px;margin-bottom:6px }
/* ★ 막대 자체는 공통이다.  body.s-market 에만 걸려 있어
   다른 화면에서는 막대가 안 보였다 (실측 08-18 · 개정 340) */
.hist .b { flex:1;background:var(--line2);border-radius:2px 2px 0 0;
           position:relative;cursor:pointer;min-height:3px;
           transition:background .12s }
/* 등급 막대 — 등급 색을 그대로 쓴다 (개정 340) */
.hist .b.grade-b { background:var(--dim) }
.hist .b.grade-b:hover { background:var(--amber) }
.hist .b:hover { background:var(--dim) }
.hist .b.mine { background:var(--amber) }
.hist .b .n { position:absolute;top:-16px;left:0;right:0;text-align:center; font-family:var(--mono);font-size:10px;color:var(--faint) }
.histx { display:flex;gap:3px;padding:0 4px;font-family:var(--mono); font-size:10px;color:var(--faint) }
.histx span { flex:1;text-align:center;cursor:pointer }
.histx span:hover { color:var(--amber) }
.histx span.sel { color:var(--amber);font-weight:600 }
.hist .b.sel { background:var(--amber) }
.hist .b.inrange { background:var(--warn-line2) }
.hist .b .tip { position:absolute;bottom:100%;left:50%;transform:translateX(-50%); margin-bottom:20px;background:var(--surface2);border:1px solid var(--line2); border-radius:12px;padding:5px 9px;font-family:var(--sans);font-size:11.5px; color:var(--text);white-space:nowrap;display:none;z-index:15; box-shadow:0 6px 18px rgba(0,0,0,.08) }
.hist .b .tip b { font-family:var(--mono);color:var(--amber) }
.hist .b:hover .tip { display:block }
.hnote { font-size:11.5px;margin-top:9px }
.hsel { margin-top:10px;padding-top:10px;border-top:1px solid var(--line); display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12.5px }
.hsel .lab { color:var(--faint);font-size:11px;letter-spacing:.07em; text-transform:uppercase }
.hsel .rng { font-size:14px;font-weight:600;color:var(--amber) }
.hsel .cnt { color:var(--dim) }
.hsel .go { background:var(--amber);color:var(--bg);border-color:var(--amber); font-weight:600 }
.mark { border-top:1px solid var(--line);margin-top:10px;padding-top:10px; font-size:12.5px }
.mrow { display:flex;align-items:center;gap:10px;padding:4px 0 }
.mrow .w { width:180px;flex:none }
.mrow .pos { flex:1;height:5px;background:var(--surface2);border-radius:3px; position:relative;border:1px solid var(--line) }
.mrow .pos i { position:absolute;top:-3px;width:3px;height:9px; background:var(--amber);border-radius:1px }
.mrow .pct { font-family:var(--mono);width:70px;text-align:right;flex:none }
.curve { display:flex;align-items:flex-end;gap:6px;height:110px;padding:0 4px }
.curve .c { flex:1;display:flex;flex-direction:column;justify-content:flex-end; align-items:center;gap:3px }
.curve .c .bar { width:100%;background:var(--line2);border-radius:2px 2px 0 0 }
.curve .c .bar.now { background:var(--amber) }
.curve .c .l { font-family:var(--mono);font-size:10px;color:var(--faint) }
.curve .c .v { font-family:var(--mono);font-size:10.5px;color:var(--dim) }
.lead h1 { margin:0 0 8px;font-size:19px;font-weight:600 }
.lead p { margin:0;color:var(--dim);font-size:13.5px;line-height:1.7 }
.lead code { background:var(--surface2);padding:2px 7px;border-radius:12px; font-family:var(--mono);font-size:12.5px;color:var(--amber) }
.step { display:flex;gap:14px;padding:14px 0;border-bottom:1px solid var(--line) }
.step:last-child { border-bottom:0 }
.step .no { width:26px;height:26px;border-radius:50%;flex:none; background:var(--surface2);border:1px solid var(--line2); display:flex;align-items:center;justify-content:center; font-family:var(--mono);font-size:12px;color:var(--dim) }
.step.now .no { background:var(--amber);color:var(--bg);border-color:var(--amber); font-weight:700 }
.step.done .no { background:var(--ok-bg);border-color:var(--ok-line);color:var(--down) }
.step .b { flex:1;min-width:0 }
.step .t { font-size:14px;font-weight:600 }
.step.done .t { color:var(--dim);font-weight:400 }
.step .d { font-size:12.5px;color:var(--dim);margin-top:3px;line-height:1.6 }
.step .a { margin-top:9px;display:flex;gap:7px;flex-wrap:wrap }
.step .n { font-family:var(--mono);color:var(--amber) }
.prog i { display:block;height:100% }
.prog .ok { background:var(--down) }
.prog .now { background:var(--amber) }
.cand.top { border-color:var(--warn-line) }
.chead { display:flex;align-items:flex-start;gap:14px;padding:15px 17px; border-bottom:1px solid var(--line) }
.rank { font-family:var(--mono);font-size:26px;font-weight:700;color:var(--faint); width:34px;flex:none;line-height:1.1 }
.cand.top .rank { color:var(--amber) }
.cinfo { flex:1;min-width:0 }
.ctitle { display:flex;align-items:baseline;gap:9px;flex-wrap:wrap }
.ctitle b { font-size:15.5px }
.cprice { font-family:var(--mono);font-size:23px;font-weight:600;margin-top:5px }
.cprice small { font-size:11px;color:var(--dim);font-weight:400;margin-left:2px }
.cmeta { font-size:12.5px;color:var(--dim);margin-top:4px }
.cact { display:flex;flex-direction:column;gap:6px;flex:none }
.cact .btn { text-align:center;white-space:nowrap }
.cbody { display:grid;grid-template-columns:1fr 1fr;gap:0 }
.cbody>div { padding:13px 17px }
.cbody>div:first-child { border-right:1px solid var(--line) }
.blk { font-size:11px;font-weight:600;letter-spacing:.08em;color:var(--faint); text-transform:uppercase;margin-bottom:8px }
.pts { display:flex;flex-wrap:wrap;gap:5px }
.loss { border-top:1px solid var(--line);padding:12px 17px;background:var(--ink2) }
.loss .h { font-size:11px;font-weight:600;letter-spacing:.08em;color:var(--amber); text-transform:uppercase;margin-bottom:7px }
.loss .row { display:flex;align-items:center;gap:10px;font-size:12.5px; padding:4px 0 }
.loss .row .w { width:110px;color:var(--dim);flex:none }
.loss .row .n { font-family:var(--mono);width:56px;text-align:right;flex:none }
.loss .row .d { color:var(--faint);font-size:11.5px }
.loss .sum { margin-top:8px;padding-top:8px;border-top:1px solid var(--line); font-size:12.5px }
.loss .sum b { color:var(--down);font-family:var(--mono) }
.pbar { display:flex;height:6px;border-radius:3px;overflow:hidden; background:var(--surface2);border:1px solid var(--line);margin:6px 0 3px }
.pbar .got { background:var(--down) }
.pbar .may { background:var(--warn-bg2) }
.item { border:1px solid var(--line);border-radius:8px;background:var(--surface); margin-bottom:12px;overflow:hidden }
.item.gone { opacity:.55 }
.item.pin { border-color:var(--warn-line) }
.ihead { display:flex;align-items:flex-start;gap:13px;padding:13px 16px }
.iinfo { flex:1;min-width:0 }
.ititle { display:flex;align-items:baseline;gap:8px;flex-wrap:wrap }
.ititle b { font-size:14.5px }
.iprice { font-family:var(--mono);font-size:20px;font-weight:600;margin-top:4px }
.iprice small { font-size:11px;color:var(--dim);font-weight:400;margin-left:2px }
.imeta { font-size:12px;color:var(--dim);margin-top:3px }
.iact { display:flex;gap:6px;flex:none;align-items:flex-start }
.spark { display:flex;align-items:flex-end;gap:2px;height:34px; padding:0 16px 10px }
.spark i { flex:1;background:var(--line2);border-radius:1px 1px 0 0; min-height:2px;position:relative }
.spark i.now { background:var(--amber) }
.spark i.dn { background:var(--down) }
.sparkx { display:flex;justify-content:space-between;padding:0 16px 11px; font-size:10px;color:var(--faint);font-family:var(--mono) }
.lrow { display:flex;gap:10px;font-size:12px;padding:3px 0;align-items:center }
.lrow .d { width:52px;color:var(--faint);font-family:var(--mono);flex:none }
.lrow .t { flex:1 }
.lrow .n { font-family:var(--mono) }
.goal { display:flex;align-items:center;gap:9px;padding:9px 16px; border-top:1px solid var(--line);font-size:12.5px }
.goal .lab { color:var(--dim);width:64px;flex:none }
.goal input { background:var(--surface2);border:1px solid var(--line2); border-radius:12px;color:var(--text);font-family:var(--mono); padding:4px 9px;width:92px;font-size:12.5px;text-align:right }
.goal .gap { font-family:var(--mono) }
.cond { border:1px solid var(--line);border-radius:7px;background:var(--surface); padding:12px 16px;margin-bottom:10px;display:flex;align-items:center;gap:12px }
.cond .q { flex:1;font-size:13px }
.cond .q b { color:var(--amber);font-family:var(--mono) }
.cond .n { font-family:var(--mono);font-size:13px;color:var(--dim);flex:none }
.bar i { display:block;height:100%;background:var(--dim) }
.bar.full i { background:var(--down) }
.bar.low i { background:var(--up) }
tr.ex .num { color:var(--faint) }
details { border-bottom:1px solid var(--line) }
details:last-of-type { border-bottom:0 }
details>summary { list-style:none;cursor:pointer;padding:8px 9px; display:grid;grid-template-columns:110px 88px 70px 1fr; gap:9px;align-items:center }
details>summary::-webkit-details-marker { display:none }
details[open]>summary { background:var(--surface2) }
summary .caret { color:var(--faint);font-size:10px;margin-right:4px }
.sub td { padding-left:26px;font-size:12.5px;background:var(--ink2) }
.sub td:first-child { color:var(--dim) }
.src { font-size:10px;color:var(--faint);border:1px solid var(--line); padding:0 4px;border-radius:2px;margin-left:6px }
.prio { font-size:10px;color:var(--faint);margin-left:4px }
.got { color:var(--down) }
.notgot { color:var(--faint) }

/* ── 2. 화면별 — 시안끼리 값이 갈리는 선택자만 가둔다 ── */
/* admin-api */
body.s-admin-api * { box-sizing:border-box }
body.s-admin-api, body.s-admin-api { margin:0;padding:0 }
body.s-admin-api { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-admin-api a { color:inherit;text-decoration:none }
body.s-admin-api .hwrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:24px;height:52px }
body.s-admin-api .brand b { font-size:15px;font-weight:700 }
body.s-admin-api .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-admin-api nav { display:flex;gap:2px;margin-left:4px }
body.s-admin-api nav a { padding:6px 12px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-admin-api .hmeta { margin-left:auto;display:flex;align-items:center;gap:14px; font-size:11.5px;color:var(--faint) }
body.s-admin-api .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-admin-api .who { border:1px solid var(--line2);border-radius:12px;padding:2px 10px; font-size:11.5px;color:var(--amber) }
body.s-admin-api .sub { border-bottom:1px solid var(--line);background:var(--ink2) }
body.s-admin-api .swrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:18px;height:40px;overflow-x:auto }
body.s-admin-api main { max-width:1400px;margin:0 auto;padding:18px 20px 60px }
body.s-admin-api h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:22px 0 10px }
body.s-admin-api .card { background:var(--surface);border:1px solid var(--line);border-radius:7px }
body.s-admin-api .card.pad { padding:14px 16px;margin-bottom:14px }
body.s-admin-api .grid { display:grid;gap:12px;grid-template-columns:1fr 1.15fr }
body.s-admin-api table { width:100%;border-collapse:collapse;font-size:12.5px }
body.s-admin-api th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:6px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-admin-api td { padding:6px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-admin-api .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-admin-api select, body.s-admin-api button, body.s-admin-api .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-admin-api .btn:hover { border-color:var(--faint) }
body.s-admin-api input[type=text] { background:var(--surface2);border:1px solid var(--line2); border-radius:12px;color:var(--text);padding:6px 11px;font-size:12.5px; font-family:var(--mono) }
body.s-admin-api .f { margin-bottom:11px }
body.s-admin-api .note { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);line-height:1.7; margin-bottom:12px }
body.s-admin-api .warnbox { background:var(--warn-bg);border:1px solid var(--warn-line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);line-height:1.7; margin-bottom:12px }
/* admin-audit */
body.s-admin-audit * { box-sizing:border-box }
body.s-admin-audit, body.s-admin-audit { margin:0;padding:0 }
body.s-admin-audit { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-admin-audit a { color:inherit;text-decoration:none }
body.s-admin-audit .hwrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:24px;height:52px }
body.s-admin-audit .brand b { font-size:15px;font-weight:700 }
body.s-admin-audit .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-admin-audit nav { display:flex;gap:2px;margin-left:4px }
body.s-admin-audit nav a { padding:6px 12px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-admin-audit .hmeta { margin-left:auto;display:flex;align-items:center;gap:14px; font-size:11.5px;color:var(--faint) }
body.s-admin-audit .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-admin-audit .who { border:1px solid var(--line2);border-radius:12px;padding:2px 10px; font-size:11.5px;color:var(--amber) }
body.s-admin-audit .sub { border-bottom:1px solid var(--line);background:var(--ink2); position:sticky;top:52px;z-index:29 }
body.s-admin-audit .swrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:18px;height:40px;overflow-x:auto }
body.s-admin-audit main { max-width:1400px;margin:0 auto;padding:18px 20px 60px }
body.s-admin-audit h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:22px 0 10px }
body.s-admin-audit .card { background:var(--surface);border:1px solid var(--line);border-radius:7px }
body.s-admin-audit .card.pad { padding:14px 16px;margin-bottom:14px }
body.s-admin-audit table { width:100%;border-collapse:collapse;font-size:13px }
body.s-admin-audit th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:7px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-admin-audit td { padding:6px 8px;border-bottom:1px solid var(--line);vertical-align:top }
body.s-admin-audit .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-admin-audit select, body.s-admin-audit button, body.s-admin-audit .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-admin-audit .btn:hover { border-color:var(--faint) }
body.s-admin-audit input[type=text] { background:var(--surface2);border:1px solid var(--line2); border-radius:12px;color:var(--text);padding:5px 10px;font-size:12.5px }
body.s-admin-audit .note { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);line-height:1.7; margin-bottom:12px }
body.s-admin-audit .bar { display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px }
body.s-admin-audit .strip { display:flex;border:1px solid var(--line);border-radius:7px; overflow:hidden;background:var(--surface);margin-bottom:14px }
body.s-admin-audit .stat { flex:1;padding:12px 15px;border-right:1px solid var(--line);cursor:pointer }
body.s-admin-audit .stat .v { font-family:var(--mono);font-size:21px;font-weight:600;line-height:1.25;margin-top:2px }
body.s-admin-audit .stat .d { font-size:11px;color:var(--dim);margin-top:2px }
/* admin-config */
body.s-admin-config * { box-sizing:border-box }
body.s-admin-config, body.s-admin-config { margin:0;padding:0 }
body.s-admin-config { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-admin-config a { color:inherit;text-decoration:none }
body.s-admin-config .hwrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:24px;height:52px }
body.s-admin-config .brand b { font-size:15px;font-weight:700 }
body.s-admin-config .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-admin-config nav { display:flex;gap:2px;margin-left:4px }
body.s-admin-config nav a { padding:6px 12px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-admin-config .hmeta { margin-left:auto;display:flex;align-items:center;gap:14px; font-size:11.5px;color:var(--faint) }
body.s-admin-config .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-admin-config .who { border:1px solid var(--line2);border-radius:12px;padding:2px 10px; font-size:11.5px;color:var(--amber) }
body.s-admin-config .sub { border-bottom:1px solid var(--line);background:var(--ink2); position:sticky;top:52px;z-index:29 }
body.s-admin-config .swrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:18px;height:40px;overflow-x:auto }
body.s-admin-config main { max-width:1400px;margin:0 auto;padding:18px 20px 90px }
body.s-admin-config h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:22px 0 10px }
body.s-admin-config .card { background:var(--surface);border:1px solid var(--line);border-radius:7px }
body.s-admin-config .card.pad { padding:14px 16px }
body.s-admin-config table { width:100%;border-collapse:collapse;font-size:13px }
body.s-admin-config th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:7px 8px; border-bottom:1px solid var(--line2);white-space:nowrap; position:sticky;top:92px;background:var(--surface);z-index:10 }
body.s-admin-config td { padding:6px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-admin-config .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-admin-config select, body.s-admin-config button, body.s-admin-config .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-admin-config .btn:hover { border-color:var(--faint) }
body.s-admin-config input[type=text] { background:var(--surface2);border:1px solid var(--line2); border-radius:12px;color:var(--text);padding:4px 9px;font-family:var(--mono); font-size:12.5px }
body.s-admin-config .note { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);line-height:1.7; margin-bottom:12px }
body.s-admin-config .bar { display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px }
body.s-admin-config .savebar input[type=text] { width:280px;font-family:var(--sans) }
/* admin-query */
body.s-admin-query * { box-sizing:border-box }
body.s-admin-query, body.s-admin-query { margin:0;padding:0 }
body.s-admin-query { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-admin-query a { color:inherit;text-decoration:none }
body.s-admin-query .hwrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:24px;height:52px }
body.s-admin-query .brand b { font-size:15px;font-weight:700 }
body.s-admin-query .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-admin-query nav { display:flex;gap:2px;margin-left:4px }
body.s-admin-query nav a { padding:6px 12px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-admin-query .hmeta { margin-left:auto;display:flex;align-items:center;gap:14px; font-size:11.5px;color:var(--faint) }
body.s-admin-query .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-admin-query .who { border:1px solid var(--line2);border-radius:12px;padding:2px 10px; font-size:11.5px;color:var(--amber) }
body.s-admin-query .sub { border-bottom:1px solid var(--line);background:var(--ink2) }
body.s-admin-query .swrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:18px;height:40px;overflow-x:auto }
body.s-admin-query main { max-width:1400px;margin:0 auto;padding:18px 20px 60px }
body.s-admin-query h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:22px 0 10px }
body.s-admin-query .card { background:var(--surface);border:1px solid var(--line);border-radius:7px }
body.s-admin-query .card.pad { padding:14px 16px;margin-bottom:14px }
body.s-admin-query .grid { display:grid;gap:12px;grid-template-columns:220px 1fr }
body.s-admin-query table { width:100%;border-collapse:collapse;font-size:12.5px }
body.s-admin-query th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:6px 8px; border-bottom:1px solid var(--line2);white-space:nowrap; background:var(--surface2) }
body.s-admin-query td { padding:5px 8px;border-bottom:1px solid var(--line);vertical-align:middle; font-family:var(--mono);white-space:nowrap }
body.s-admin-query .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-admin-query select, body.s-admin-query button, body.s-admin-query .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-admin-query .btn:hover { border-color:var(--faint) }
body.s-admin-query .note { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);line-height:1.7; margin-bottom:12px }
body.s-admin-query .err { background:var(--no-bg);border:1px solid var(--no-line);border-radius:6px; padding:12px 14px;font-size:13px;color:var(--up);line-height:1.7 }
/* admin-registry */
body.s-admin-registry * { box-sizing:border-box }
body.s-admin-registry, body.s-admin-registry { margin:0;padding:0 }
body.s-admin-registry { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-admin-registry a { color:inherit;text-decoration:none }
body.s-admin-registry .hwrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:24px;height:52px }
body.s-admin-registry .brand b { font-size:15px;font-weight:700 }
body.s-admin-registry .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-admin-registry nav { display:flex;gap:2px;margin-left:4px }
body.s-admin-registry nav a { padding:6px 12px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-admin-registry .hmeta { margin-left:auto;display:flex;align-items:center;gap:14px; font-size:11.5px;color:var(--faint) }
body.s-admin-registry .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-admin-registry .who { border:1px solid var(--line2);border-radius:12px;padding:2px 10px; font-size:11.5px;color:var(--amber) }
body.s-admin-registry .sub { border-bottom:1px solid var(--line);background:var(--ink2); position:sticky;top:52px;z-index:29 }
body.s-admin-registry .swrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:18px;height:40px;overflow-x:auto }
body.s-admin-registry main { max-width:1400px;margin:0 auto;padding:18px 20px 90px }
body.s-admin-registry h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:22px 0 10px }
body.s-admin-registry .card { background:var(--surface);border:1px solid var(--line);border-radius:7px }
body.s-admin-registry table { width:100%;border-collapse:collapse;font-size:13px }
body.s-admin-registry th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:7px 8px; border-bottom:1px solid var(--line2);white-space:nowrap; position:sticky;top:92px;background:var(--surface);z-index:10 }
body.s-admin-registry td { padding:6px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-admin-registry .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-admin-registry select, body.s-admin-registry button, body.s-admin-registry .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-admin-registry .btn:hover { border-color:var(--faint) }
body.s-admin-registry input[type=text] { background:var(--surface2);border:1px solid var(--line2); border-radius:12px;color:var(--text);padding:5px 10px;font-size:12.5px; font-family:inherit }
body.s-admin-registry .note { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);margin-bottom:12px; line-height:1.7 }
body.s-admin-registry .bar { display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px }
body.s-admin-registry .savebar input[type=text] { width:260px }
/* admin-requests */
body.s-admin-requests * { box-sizing:border-box }
body.s-admin-requests, body.s-admin-requests { margin:0;padding:0 }
body.s-admin-requests { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-admin-requests a { color:inherit;text-decoration:none }
body.s-admin-requests .hwrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:24px;height:52px }
body.s-admin-requests .brand b { font-size:15px;font-weight:700 }
body.s-admin-requests .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-admin-requests nav { display:flex;gap:2px;margin-left:4px }
body.s-admin-requests nav a { padding:6px 12px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-admin-requests .hmeta { margin-left:auto;display:flex;align-items:center;gap:14px; font-size:11.5px;color:var(--faint) }
body.s-admin-requests .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-admin-requests .who { border:1px solid var(--line2);border-radius:12px;padding:2px 10px; font-size:11.5px;color:var(--amber) }
body.s-admin-requests .sub { border-bottom:1px solid var(--line);background:var(--ink2) }
body.s-admin-requests .swrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:18px;height:40px;overflow-x:auto }
body.s-admin-requests main { max-width:1400px;margin:0 auto;padding:18px 20px 60px }
body.s-admin-requests h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:22px 0 10px }
body.s-admin-requests .card { background:var(--surface);border:1px solid var(--line);border-radius:7px }
body.s-admin-requests .card.pad { padding:14px 16px;margin-bottom:14px }
body.s-admin-requests .grid { display:grid;gap:12px;grid-template-columns:1fr 340px }
body.s-admin-requests .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-admin-requests select, body.s-admin-requests button, body.s-admin-requests .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-admin-requests .btn:hover { border-color:var(--faint) }
body.s-admin-requests .f { margin-bottom:11px }
body.s-admin-requests .note { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);line-height:1.7; margin-bottom:12px }
body.s-admin-requests .bar { display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px }
/* admin-run */
body.s-admin-run * { box-sizing:border-box }
body.s-admin-run, body.s-admin-run { margin:0;padding:0 }
body.s-admin-run { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-admin-run a { color:inherit;text-decoration:none }
body.s-admin-run .hwrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:24px;height:52px }
body.s-admin-run .brand b { font-size:15px;font-weight:700 }
body.s-admin-run .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-admin-run nav { display:flex;gap:2px;margin-left:4px }
body.s-admin-run nav a { padding:6px 12px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-admin-run .hmeta { margin-left:auto;display:flex;align-items:center;gap:14px; font-size:11.5px;color:var(--faint) }
body.s-admin-run .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-admin-run .who { border:1px solid var(--line2);border-radius:12px;padding:2px 10px; font-size:11.5px;color:var(--amber) }
body.s-admin-run .sub { border-bottom:1px solid var(--line);background:var(--ink2) }
body.s-admin-run .swrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:18px;height:40px;overflow-x:auto }
body.s-admin-run main { max-width:1280px;margin:0 auto;padding:20px 20px 60px }
body.s-admin-run h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:24px 0 11px }
body.s-admin-run .card { background:var(--surface);border:1px solid var(--line); border-radius:7px;padding:15px 17px;margin-bottom:14px }
body.s-admin-run table { width:100%;border-collapse:collapse;font-size:13px }
body.s-admin-run th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:6px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-admin-run td { padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-admin-run .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-admin-run select, body.s-admin-run button, body.s-admin-run .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:6px 13px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-admin-run .btn:hover { border-color:var(--faint) }
body.s-admin-run .dot.warn { background:var(--amber);animation:bl 1.4s infinite }
body.s-admin-run .card.tight { padding:8px 12px }
body.s-admin-run label { font-size:12.5px;color:var(--dim);display:flex;align-items:center;gap:6px; cursor:pointer }
body.s-admin-run .prog { margin-top:4px }
body.s-admin-run .log { background:var(--ink);border:1px solid var(--line);border-radius:6px; padding:11px 13px;font-family:var(--mono);font-size:11.5px; line-height:1.75;max-height:220px;overflow-y:auto;color:var(--dim) }
/* admin-scoring */
body.s-admin-scoring * { box-sizing:border-box }
body.s-admin-scoring, body.s-admin-scoring { margin:0;padding:0 }
body.s-admin-scoring { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-admin-scoring a { color:inherit;text-decoration:none }
body.s-admin-scoring .hwrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:24px;height:52px }
body.s-admin-scoring .brand b { font-size:15px;font-weight:700 }
body.s-admin-scoring .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-admin-scoring nav { display:flex;gap:2px;margin-left:4px }
body.s-admin-scoring nav a { padding:6px 12px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-admin-scoring .hmeta { margin-left:auto;display:flex;align-items:center;gap:14px; font-size:11.5px;color:var(--faint) }
body.s-admin-scoring .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-admin-scoring .who { border:1px solid var(--line2);border-radius:12px;padding:2px 10px; font-size:11.5px;color:var(--amber) }
body.s-admin-scoring .sub { border-bottom:1px solid var(--line);background:var(--ink2); position:sticky;top:52px;z-index:29 }
body.s-admin-scoring .swrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:18px;height:40px;overflow-x:auto }
body.s-admin-scoring main { max-width:1400px;margin:0 auto;padding:18px 20px 90px }
body.s-admin-scoring h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:22px 0 10px }
body.s-admin-scoring .card { background:var(--surface);border:1px solid var(--line); border-radius:7px;padding:14px 16px;margin-bottom:14px }
body.s-admin-scoring .grid { display:grid;gap:12px }
body.s-admin-scoring table { width:100%;border-collapse:collapse;font-size:13px }
body.s-admin-scoring th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:6px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-admin-scoring td { padding:5px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-admin-scoring .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-admin-scoring select, body.s-admin-scoring button, body.s-admin-scoring .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-admin-scoring .btn:hover { border-color:var(--faint) }
body.s-admin-scoring .note { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);line-height:1.7; margin-bottom:12px }
body.s-admin-scoring .savebar input[type=text] { width:280px;text-align:left }
body.s-admin-scoring .card.tight { padding:6px 12px }
body.s-admin-scoring .g2 { grid-template-columns:1.25fr 1fr }
body.s-admin-scoring tr.grp td { background:var(--ink2);font-size:10.5px;letter-spacing:.07em; color:var(--faint);text-transform:uppercase;padding:6px 8px }
body.s-admin-scoring .dist { display:flex;height:22px;border-radius:12px;overflow:hidden; border:1px solid var(--line);background:var(--surface2);margin:8px 0 4px }
/* admin-targets */
body.s-admin-targets * { box-sizing:border-box }
body.s-admin-targets, body.s-admin-targets { margin:0;padding:0 }
body.s-admin-targets { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-admin-targets a { color:inherit;text-decoration:none }
body.s-admin-targets .hwrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:24px;height:52px }
body.s-admin-targets .brand b { font-size:15px;font-weight:700 }
body.s-admin-targets .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-admin-targets nav { display:flex;gap:2px;margin-left:4px }
body.s-admin-targets nav a { padding:6px 12px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-admin-targets .hmeta { margin-left:auto;display:flex;align-items:center;gap:14px; font-size:11.5px;color:var(--faint) }
body.s-admin-targets .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-admin-targets .who { border:1px solid var(--line2);border-radius:12px;padding:2px 10px; font-size:11.5px;color:var(--amber) }
body.s-admin-targets .sub { border-bottom:1px solid var(--line);background:var(--ink2) }
body.s-admin-targets .swrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:18px;height:40px;overflow-x:auto }
body.s-admin-targets main { max-width:1280px;margin:0 auto;padding:18px 20px 60px }
body.s-admin-targets h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:22px 0 10px }
body.s-admin-targets .card { background:var(--surface);border:1px solid var(--line); border-radius:7px;padding:14px 16px;margin-bottom:14px }
body.s-admin-targets table { width:100%;border-collapse:collapse;font-size:13px }
body.s-admin-targets th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:6px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-admin-targets td { padding:6px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-admin-targets .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-admin-targets select, body.s-admin-targets button, body.s-admin-targets .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-admin-targets .btn:hover { border-color:var(--faint) }
body.s-admin-targets input[type=text] { background:var(--surface2);border:1px solid var(--line2); border-radius:12px;color:var(--text);padding:5px 10px;font-size:12.5px }
body.s-admin-targets .note { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);line-height:1.7; margin-bottom:12px }
body.s-admin-targets .card.tight { padding:6px 12px }
body.s-admin-targets label { font-size:12.5px;display:flex;align-items:center;gap:6px;cursor:pointer }
body.s-admin-targets .cand { border:1px solid var(--line2);border-radius:12px;padding:4px 9px; font-size:12px;cursor:pointer;display:flex;align-items:center;gap:6px }
/* admin-tools */
body.s-admin-tools * { box-sizing:border-box }
body.s-admin-tools, body.s-admin-tools { margin:0;padding:0 }
body.s-admin-tools { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-admin-tools a { color:inherit;text-decoration:none }
body.s-admin-tools .hwrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:24px;height:52px }
body.s-admin-tools .brand b { font-size:15px;font-weight:700 }
body.s-admin-tools .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-admin-tools nav { display:flex;gap:2px;margin-left:4px }
body.s-admin-tools nav a { padding:6px 12px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-admin-tools .hmeta { margin-left:auto;display:flex;align-items:center;gap:14px; font-size:11.5px;color:var(--faint) }
body.s-admin-tools .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-admin-tools .who { border:1px solid var(--line2);border-radius:12px;padding:2px 10px; font-size:11.5px;color:var(--amber) }
body.s-admin-tools .sub { border-bottom:1px solid var(--line);background:var(--ink2) }
body.s-admin-tools .swrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:18px;height:40px;overflow-x:auto }
body.s-admin-tools main { max-width:1280px;margin:0 auto;padding:18px 20px 60px }
body.s-admin-tools h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:22px 0 10px }
body.s-admin-tools .card { background:var(--surface);border:1px solid var(--line);border-radius:7px }
body.s-admin-tools .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-admin-tools .btn:hover { border-color:var(--faint) }
body.s-admin-tools .note { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);line-height:1.7; margin-bottom:14px }
body.s-admin-tools .warnbox { background:var(--warn-bg);border:1px solid var(--warn-line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);line-height:1.7; margin-bottom:14px }
/* admin-users */
body.s-admin-users * { box-sizing:border-box }
body.s-admin-users, body.s-admin-users { margin:0;padding:0 }
body.s-admin-users { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-admin-users a { color:inherit;text-decoration:none }
body.s-admin-users .hwrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:24px;height:52px }
body.s-admin-users .brand b { font-size:15px;font-weight:700 }
body.s-admin-users .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-admin-users nav { display:flex;gap:2px;margin-left:4px }
body.s-admin-users nav a { padding:6px 12px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-admin-users .hmeta { margin-left:auto;display:flex;align-items:center;gap:14px; font-size:11.5px;color:var(--faint) }
body.s-admin-users .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-admin-users .who { border:1px solid var(--line2);border-radius:12px;padding:2px 10px; font-size:11.5px;color:var(--amber) }
body.s-admin-users .sub { border-bottom:1px solid var(--line);background:var(--ink2) }
body.s-admin-users .swrap { max-width:1400px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:18px;height:40px;overflow-x:auto }
body.s-admin-users main { max-width:1400px;margin:0 auto;padding:18px 20px 60px }
body.s-admin-users h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:22px 0 10px }
body.s-admin-users .card { background:var(--surface);border:1px solid var(--line);border-radius:7px }
body.s-admin-users .card.pad { padding:14px 16px;margin-bottom:14px }
body.s-admin-users table { width:100%;border-collapse:collapse;font-size:13px }
body.s-admin-users th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:7px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-admin-users td { padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-admin-users .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-admin-users select, body.s-admin-users button, body.s-admin-users .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-admin-users .btn:hover { border-color:var(--faint) }
body.s-admin-users input[type=text] { background:var(--surface2);border:1px solid var(--line2); border-radius:12px;color:var(--text);padding:5px 10px;font-size:12.5px }
body.s-admin-users .note { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:11px 14px;font-size:12.5px;color:var(--dim);line-height:1.7; margin-bottom:12px }
body.s-admin-users .bar { display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px }
body.s-admin-users .pol { display:flex;gap:10px;align-items:center;flex-wrap:wrap; border:1px solid var(--line2);border-radius:7px;background:var(--surface); padding:13px 16px;margin-bottom:14px }
body.s-admin-users .pol .k { font-size:10.5px;letter-spacing:.07em;color:var(--faint); text-transform:uppercase;width:80px;flex:none }
/* admin */
body.s-admin * { box-sizing:border-box }
body.s-admin, body.s-admin { margin:0;padding:0 }
body.s-admin { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-admin a { color:inherit;text-decoration:none }
body.s-admin .hwrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:24px;height:52px }
body.s-admin .brand b { font-size:15px;font-weight:700 }
body.s-admin .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-admin nav { display:flex;gap:2px;margin-left:4px }
body.s-admin nav a { padding:6px 12px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-admin .hmeta { margin-left:auto;display:flex;align-items:center;gap:14px; font-size:11.5px;color:var(--faint) }
body.s-admin .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-admin .who { border:1px solid var(--line2);border-radius:12px;padding:2px 10px; font-size:11.5px;color:var(--amber) }
body.s-admin .sub { border-bottom:1px solid var(--line);background:var(--ink2) }
body.s-admin .swrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:18px;height:40px;overflow-x:auto }
body.s-admin main { max-width:1280px;margin:0 auto;padding:20px 20px 60px }
body.s-admin h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:24px 0 11px }
body.s-admin .card { background:var(--surface);border:1px solid var(--line); border-radius:7px;padding:15px 17px;margin-bottom:14px }
body.s-admin .grid { display:grid;gap:12px }
body.s-admin table { width:100%;border-collapse:collapse;font-size:13px }
body.s-admin th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:6px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-admin td { padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-admin .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-admin select, body.s-admin button, body.s-admin .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:6px 13px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-admin .btn:hover { border-color:var(--faint) }
body.s-admin .strip { display:flex;border:1px solid var(--line);border-radius:7px; overflow:hidden;background:var(--surface);margin-bottom:16px }
body.s-admin .stat { flex:1;padding:13px 16px;border-right:1px solid var(--line) }
body.s-admin .stat .v { font-family:var(--mono);font-size:21px;font-weight:600;line-height:1.25;margin-top:2px }
body.s-admin .stat .d { font-size:11px;color:var(--dim);margin-top:3px }
body.s-admin .card.tight { padding:8px 12px }
body.s-admin .g2 { grid-template-columns:1fr 1fr }
body.s-admin .todo { display:flex;align-items:flex-start;gap:10px;padding:10px 0; border-bottom:1px solid var(--line);font-size:13px }
body.s-admin .todo .ic { width:14px;text-align:center;flex:none;font-size:9px;padding-top:5px }
body.s-admin .todo .go { white-space:nowrap;flex:none }
/* compare */
body.s-compare * { box-sizing:border-box }
body.s-compare, body.s-compare { margin:0;padding:0 }
body.s-compare { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-compare a { color:inherit;text-decoration:none }
body.s-compare .hwrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:28px;height:52px }
body.s-compare .brand b { font-size:15px;font-weight:700 }
body.s-compare .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-compare nav { display:flex;gap:2px;margin-left:6px }
body.s-compare nav a { padding:6px 13px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-compare .hmeta { margin-left:auto;display:flex;align-items:center;gap:16px; font-size:11.5px;color:var(--faint) }
body.s-compare .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-compare main { max-width:1280px;margin:0 auto;padding:20px 20px 60px }
body.s-compare h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:24px 0 11px }
body.s-compare .card { background:var(--surface);border:1px solid var(--line); border-radius:7px;padding:0;margin-bottom:14px;overflow:hidden }
body.s-compare .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-compare select, body.s-compare button, body.s-compare .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-compare .btn:hover { border-color:var(--faint) }
body.s-compare .bar { display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px }
body.s-compare tr.grp td { background:var(--ink2);font-size:10.5px;letter-spacing:.07em; color:var(--faint);text-transform:uppercase;font-family:var(--sans); padding:6px 12px }
/* dashboard */
body.s-dashboard * { box-sizing:border-box }
body.s-dashboard, body.s-dashboard { margin:0;padding:0 }
body.s-dashboard { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-dashboard a { color:inherit;text-decoration:none }
body.s-dashboard .hwrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:28px;height:52px }
body.s-dashboard .brand b { font-size:15px;font-weight:700 }
body.s-dashboard .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-dashboard nav { display:flex;gap:2px;margin-left:6px }
body.s-dashboard nav a { padding:6px 13px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-dashboard .hmeta { margin-left:auto;display:flex;align-items:center;gap:16px; font-size:11.5px;color:var(--faint) }
body.s-dashboard .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle }
body.s-dashboard main { max-width:1280px;margin:0 auto;padding:20px 20px 60px }
body.s-dashboard h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:24px 0 11px }
body.s-dashboard .card { background:var(--surface);border:1px solid var(--line); border-radius:7px;padding:15px 17px;margin-bottom:14px }
body.s-dashboard .grid { display:grid;gap:12px }
body.s-dashboard table { width:100%;border-collapse:collapse;font-size:13px }
body.s-dashboard th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:6px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-dashboard td { padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-dashboard .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-dashboard .strip { display:flex;border:1px solid var(--line);border-radius:7px; overflow:hidden;background:var(--surface);margin-bottom:16px }
body.s-dashboard .stat { flex:1;padding:13px 16px;border-right:1px solid var(--line) }
body.s-dashboard .stat .v { font-family:var(--mono);font-size:23px;font-weight:600;line-height:1.25;margin-top:2px }
body.s-dashboard .stat .d { font-size:11px;color:var(--dim);margin-top:3px }
body.s-dashboard .dot.warn { background:var(--amber) }
body.s-dashboard .card.tight { padding:6px 12px }
body.s-dashboard .g2 { grid-template-columns:1fr 1fr }
body.s-dashboard .dist { display:flex;height:26px;border-radius:12px;overflow:hidden; border:1px solid var(--line);background:var(--surface2) }
body.s-dashboard .todo { display:flex;align-items:flex-start;gap:9px;padding:9px 0; border-bottom:1px solid var(--line);font-size:13px }
body.s-dashboard .todo .ic { width:16px;text-align:center;flex:none }
body.s-dashboard .todo .go { font-size:11px;color:var(--amber);white-space:nowrap }
body.s-dashboard .mini { display:flex;height:5px;border-radius:3px;overflow:hidden;margin-top:7px; background:var(--line) }
/* dealers */
body.s-dealers * { box-sizing:border-box }
body.s-dealers, body.s-dealers { margin:0;padding:0 }
body.s-dealers { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-dealers a { color:inherit;text-decoration:none }
body.s-dealers .hwrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:28px;height:52px }
body.s-dealers .brand b { font-size:15px;font-weight:700 }
body.s-dealers .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-dealers nav { display:flex;gap:2px;margin-left:6px }
body.s-dealers nav a { padding:6px 13px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-dealers .hmeta { margin-left:auto;display:flex;align-items:center;gap:16px; font-size:11.5px;color:var(--faint) }
body.s-dealers .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-dealers main { max-width:1280px;margin:0 auto;padding:20px 20px 60px }
body.s-dealers h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:24px 0 11px }
body.s-dealers .card { background:var(--surface);border:1px solid var(--line); border-radius:7px;padding:15px 17px;margin-bottom:14px }
body.s-dealers table { width:100%;border-collapse:collapse;font-size:13px }
body.s-dealers th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:6px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-dealers td { padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-dealers .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-dealers select, body.s-dealers button, body.s-dealers .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-dealers .f { border-bottom:1px dotted var(--line2);cursor:pointer }
body.s-dealers .bar { display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px }
body.s-dealers .card.tight { padding:8px 12px }
/* join */
body.s-join * { box-sizing:border-box }
body.s-join, body.s-join { margin:0;padding:0;height:100% }
body.s-join { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-join a { color:inherit;text-decoration:none }
body.s-join .brand b { font-size:22px;font-weight:700 }
body.s-join .brand span { display:block;font-size:10.5px;color:var(--faint); letter-spacing:.14em;text-transform:uppercase;margin-top:4px }
body.s-join .card { background:var(--surface);border:1px solid var(--line); border-radius:9px;padding:22px 24px }
body.s-join .btn:hover { filter:brightness(1.06) }
body.s-join .f { margin-bottom:13px }
body.s-join .err { background:var(--no-bg);border:1px solid var(--no-line);border-radius:6px; padding:10px 13px;font-size:12.5px;color:var(--up);margin-bottom:14px; line-height:1.6;display:none }
body.s-join .pol { background:var(--ink2);border:1px solid var(--line);border-radius:6px; padding:12px 14px;font-size:12.5px;color:var(--dim);line-height:1.7 }
body.s-join .pol .k { color:var(--amber) }
body.s-join .box { width:100%;max-width:400px }
body.s-join .brand { text-align:center;margin-bottom:24px }
body.s-join .f input.mono { font-family:var(--mono) }
body.s-join .btn { width:100%;background:var(--amber);color:var(--bg);border:1px solid var(--amber); border-radius:6px;padding:10px;font-size:14px;font-weight:600; font-family:inherit;cursor:pointer;margin-top:5px }
body.s-join .lead { background:var(--warn-bg);border:1px solid var(--warn-line);border-radius:7px; padding:13px 15px;margin-bottom:16px;font-size:13px;line-height:1.7 }
/* listings */
body.s-listings * { box-sizing:border-box }
body.s-listings, body.s-listings { margin:0;padding:0 }
body.s-listings { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-listings a { color:inherit;text-decoration:none }
body.s-listings .hwrap { max-width:1560px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:28px;height:52px }
body.s-listings .brand b { font-size:15px;font-weight:700 }
body.s-listings .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-listings nav { display:flex;gap:2px;margin-left:6px }
body.s-listings nav a { padding:6px 13px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-listings .hmeta { margin-left:auto;display:flex;align-items:center;gap:16px; font-size:11.5px;color:var(--faint) }
body.s-listings .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-listings main { max-width:1560px;margin:0 auto;padding:18px 20px 60px }
body.s-listings .card { background:var(--surface);border:1px solid var(--line);border-radius:7px }
body.s-listings table { width:100%;border-collapse:collapse;font-size:13px }
body.s-listings th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:7px 7px; border-bottom:1px solid var(--line2);white-space:nowrap; position:sticky;top:52px;background:var(--surface);z-index:10 }
body.s-listings td { padding:6px 7px;border-bottom:1px solid var(--line);vertical-align:middle; white-space:nowrap }
body.s-listings .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-listings select, body.s-listings button, body.s-listings .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-listings .f { border-bottom:1px dotted var(--line2);cursor:pointer }
body.s-listings .bar { display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px }
body.s-listings tr.ex td { opacity:.45 }
/* login */
body.s-login * { box-sizing:border-box }
body.s-login, body.s-login { margin:0;padding:0;height:100% }
body.s-login { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-login a { color:inherit;text-decoration:none }
body.s-login .brand b { font-size:22px;font-weight:700;letter-spacing:-.01em }
body.s-login .brand span { display:block;font-size:10.5px;color:var(--faint); letter-spacing:.14em;text-transform:uppercase;margin-top:4px }
body.s-login .card { background:var(--surface);border:1px solid var(--line); border-radius:9px;padding:22px 24px }
body.s-login .btn:hover { filter:brightness(1.06) }
body.s-login .f { margin-bottom:13px }
body.s-login .err { background:var(--no-bg);border:1px solid var(--no-line);border-radius:6px; padding:10px 13px;font-size:12.5px;color:var(--up);margin-bottom:14px; line-height:1.6;display:none }
body.s-login .box { width:100%;max-width:380px }
body.s-login .brand { text-align:center;margin-bottom:26px }
body.s-login .f input.mono { font-family:var(--mono);letter-spacing:.04em }
body.s-login .btn { width:100%;background:var(--amber);color:var(--bg);border:1px solid var(--amber); border-radius:6px;padding:10px;font-size:14px;font-weight:600; font-family:inherit;cursor:pointer;margin-top:5px }
body.s-login .steps { display:flex;gap:5px;margin-bottom:18px;justify-content:center }
/* market */
body.s-market * { box-sizing:border-box }
body.s-market, body.s-market { margin:0;padding:0 }
body.s-market { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-market a { color:inherit;text-decoration:none }
body.s-market .hwrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:28px;height:52px }
body.s-market .brand b { font-size:15px;font-weight:700 }
body.s-market .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-market nav { display:flex;gap:2px;margin-left:6px }
body.s-market nav a { padding:6px 13px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-market .hmeta { margin-left:auto;display:flex;align-items:center;gap:16px; font-size:11.5px;color:var(--faint) }
body.s-market .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-market main { max-width:1280px;margin:0 auto;padding:20px 20px 60px }
body.s-market h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:24px 0 11px }
body.s-market .card { background:var(--surface);border:1px solid var(--line); border-radius:7px;padding:15px 17px;margin-bottom:14px }
body.s-market table { width:100%;border-collapse:collapse;font-size:13px }
body.s-market th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:6px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-market td { padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-market .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-market select, body.s-market button, body.s-market .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-market .f { border-bottom:1px dotted var(--line2);cursor:pointer }
body.s-market .bar { display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px }
body.s-market .strip { display:flex;border:1px solid var(--line);border-radius:7px; overflow:hidden;background:var(--surface);margin-bottom:16px }
body.s-market .stat { flex:1;padding:13px 16px;border-right:1px solid var(--line) }
body.s-market .stat .v { font-family:var(--mono);font-size:21px;font-weight:600;line-height:1.25;margin-top:2px }
body.s-market .stat .d { font-size:11px;color:var(--dim);margin-top:3px }
body.s-market .card.tight { padding:8px 12px }
body.s-market .hist .b { flex:1;background:var(--line2);border-radius:2px 2px 0 0; position:relative;cursor:pointer;min-height:3px }
body.s-market .hist .b { transition:background .12s }
/* notready */
body.s-notready * { box-sizing:border-box }
body.s-notready, body.s-notready { margin:0;padding:0 }
body.s-notready { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-notready a { color:inherit;text-decoration:none }
body.s-notready .hwrap { max-width:1100px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:28px;height:52px }
body.s-notready .brand b { font-size:15px;font-weight:700 }
body.s-notready .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-notready nav { display:flex;gap:2px;margin-left:6px }
body.s-notready nav a { padding:6px 13px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-notready .hmeta { margin-left:auto;display:flex;align-items:center;gap:16px; font-size:11.5px;color:var(--faint) }
body.s-notready .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--amber) }
body.s-notready main { max-width:1100px;margin:0 auto;padding:20px 20px 60px }
body.s-notready h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:24px 0 11px }
body.s-notready .card { background:var(--surface);border:1px solid var(--line); border-radius:7px;padding:15px 17px;margin-bottom:14px }
body.s-notready table { width:100%;border-collapse:collapse;font-size:13px }
body.s-notready th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:6px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-notready td { padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-notready .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-notready select, body.s-notready button, body.s-notready .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:6px 13px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-notready .card.tight { padding:8px 12px }
body.s-notready .prog { display:flex;height:6px;border-radius:3px;overflow:hidden; background:var(--surface2);border:1px solid var(--line);margin:14px 0 6px }
body.s-notready .lead { border:1px solid var(--warn-line);border-radius:8px;background:var(--surface); padding:20px 22px;margin-bottom:16px }
body.s-notready .steps { counter-reset:s }
/* recommend */
body.s-recommend * { box-sizing:border-box }
body.s-recommend, body.s-recommend { margin:0;padding:0 }
body.s-recommend { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-recommend a { color:inherit;text-decoration:none }
body.s-recommend .hwrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:28px;height:52px }
body.s-recommend .brand b { font-size:15px;font-weight:700 }
body.s-recommend .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-recommend nav { display:flex;gap:2px;margin-left:6px }
body.s-recommend nav a { padding:6px 13px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-recommend .hmeta { margin-left:auto;display:flex;align-items:center;gap:16px; font-size:11.5px;color:var(--faint) }
body.s-recommend .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-recommend main { max-width:1280px;margin:0 auto;padding:20px 20px 60px }
body.s-recommend h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:24px 0 11px }
body.s-recommend .card { background:var(--surface);border:1px solid var(--line); border-radius:7px;padding:15px 17px;margin-bottom:14px }
body.s-recommend table { width:100%;border-collapse:collapse;font-size:13px }
body.s-recommend th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:6px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-recommend td { padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-recommend .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-recommend select, body.s-recommend button, body.s-recommend .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-recommend .btn:hover { border-color:var(--faint) }
body.s-recommend .f { border-bottom:1px dotted var(--line2);cursor:pointer }
body.s-recommend .bar { display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px }
body.s-recommend .card.tight { padding:8px 12px }
body.s-recommend .cand { border:1px solid var(--line);border-radius:8px;background:var(--surface); margin-bottom:14px;overflow:hidden }
/* watch */
body.s-watch * { box-sizing:border-box }
body.s-watch, body.s-watch { margin:0;padding:0 }
body.s-watch { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-watch a { color:inherit;text-decoration:none }
body.s-watch .hwrap { max-width:1280px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:28px;height:52px }
body.s-watch .brand b { font-size:15px;font-weight:700 }
body.s-watch .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em; text-transform:uppercase;margin-left:8px }
body.s-watch nav { display:flex;gap:2px;margin-left:6px }
body.s-watch nav a { padding:6px 13px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-watch .hmeta { margin-left:auto;display:flex;align-items:center;gap:16px; font-size:11.5px;color:var(--faint) }
body.s-watch .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle;background:var(--down) }
body.s-watch main { max-width:1280px;margin:0 auto;padding:20px 20px 60px }
body.s-watch h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:24px 0 11px }
body.s-watch .card { background:var(--surface);border:1px solid var(--line); border-radius:7px;padding:15px 17px;margin-bottom:14px }
body.s-watch table { width:100%;border-collapse:collapse;font-size:13px }
body.s-watch th { font-size:10px;font-weight:600;letter-spacing:.05em;color:var(--faint); text-transform:uppercase;text-align:left;padding:6px 8px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-watch td { padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-watch .tag { display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-watch select, body.s-watch button, body.s-watch .btn { background:var(--surface2);color:var(--text); border:1px solid var(--line2);border-radius:12px;padding:5px 11px; font-size:12.5px;font-family:inherit;cursor:pointer }
body.s-watch .btn:hover { border-color:var(--faint) }
body.s-watch .f { border-bottom:1px dotted var(--line2);cursor:pointer }
body.s-watch .bar { display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px }
body.s-watch .card.tight { padding:8px 12px }
body.s-watch .log { border-top:1px solid var(--line);background:var(--ink2);padding:9px 16px }
/* why */
body.s-why * { box-sizing:border-box }
body.s-why, body.s-why { margin:0;padding:0 }
body.s-why { background:var(--bg);color:var(--text);font-family:var(--sans); font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased }
body.s-why a { color:inherit;text-decoration:none }
body.s-why .hwrap { max-width:1100px;margin:0 auto;padding:0 20px; display:flex;align-items:center;gap:28px;height:52px }
body.s-why .brand b { font-size:15px;font-weight:700 }
body.s-why .brand span { font-size:10.5px;color:var(--faint);letter-spacing:.09em;text-transform:uppercase }
body.s-why nav { display:flex;gap:2px;margin-left:6px }
body.s-why nav a { padding:6px 13px;font-size:13px;color:var(--dim);border-radius:12px }
body.s-why .hmeta { margin-left:auto;display:flex;align-items:center;gap:16px; font-size:11.5px;color:var(--faint) }
body.s-why .dot { width:6px;height:6px;border-radius:50%;display:inline-block; margin-right:5px;vertical-align:middle }
body.s-why main { max-width:1100px;margin:0 auto;padding:22px 20px 60px }
body.s-why h2 { font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dim); text-transform:uppercase;margin:22px 0 11px }
body.s-why .card { background:var(--surface);border:1px solid var(--line); border-radius:7px;padding:16px 18px;margin-bottom:16px }
body.s-why table { width:100%;border-collapse:collapse;font-size:13px }
body.s-why th { font-size:10.5px;font-weight:600;letter-spacing:.06em;color:var(--faint); text-transform:uppercase;text-align:left;padding:7px 9px; border-bottom:1px solid var(--line2);white-space:nowrap }
body.s-why td { padding:7px 9px;border-bottom:1px solid var(--line);vertical-align:middle }
body.s-why .tag { display:inline-block;font-size:10.5px;padding:1.5px 6px;border-radius:3px; border:1px solid var(--line2);color:var(--dim);white-space:nowrap }
body.s-why .bar { display:inline-block;width:64px;height:5px;border-radius:3px; background:var(--surface2);vertical-align:middle;overflow:hidden; border:1px solid var(--line) }
body.s-why .strip { display:flex;border:1px solid var(--line);border-radius:7px; overflow:hidden;background:var(--surface);margin-bottom:18px }
body.s-why .stat { flex:1;padding:13px 16px;border-right:1px solid var(--line) }
body.s-why .stat .v { font-family:var(--mono);font-size:22px;font-weight:600;line-height:1.25;margin-top:2px }
body.s-why .dot.warn { background:var(--amber) }
body.s-why .card.tight { padding:6px 12px }
body.s-why .brand { display:flex;align-items:baseline;gap:9px }
body.s-why tr.ex td { color:var(--faint) }

/* ── 2b. 좁은 폭 · 애니메이션 — 시안 9개 ── */
@media(max-width:1100px) {
  .grid { grid-template-columns:1fr }
}
@media(max-width:1100px) {
  .g2 { grid-template-columns:1fr }
}
@media(max-width:1000px) {
  .grid { grid-template-columns:1fr }
}
@media(max-width:1080px) {
  .grid { grid-template-columns:1fr }
}
@keyframes bl {
  50% { opacity:.35 }
}
@media(max-width:980px) {
  .g2,.g3 { grid-template-columns:1fr }
}
@media(max-width:980px) {
  .tiles { grid-template-columns:repeat(2,1fr) }
}
@media(max-width:900px) {
  .cbody { grid-template-columns:1fr }
}
@media(max-width:900px) {
  .cbody>div:first-child { border-right:0; border-bottom:1px solid var(--line) }
}

/* ── 3. 우리 것 — 시안에 대응하는 이름이 없는 뜻들 ── */

/* ★ 숫자가 표에 들어가면 mono 다.  예외 없다 (V11-14).
   시안의 .num 은 글꼴만 바꾼다 — 오른쪽 정렬을 여기서 더한다 */
td.num, th.num { text-align:right; }

/* 축 3상태.  ★ 「없음」과 「모름」을 눈으로 가른다 (STEP 149f)
   ★★★ 08-29 (#122 · #123) — ★ 이 셋이 ★ **빈 규칙**이었다.
     ★ 틀이 `{% for %}` 로 `<a>` 를 ★ **틈 없이** 이어 붙여
       ★ 「사고OK골격OK용도OK제조사 보증OK사이트 보증OK」로 나왔고
       ★ 「상세 ▸」·「엔카에서 보기 ↗」와 ★ 포개져 못 읽었다.
     ★ 시험자 실측 — ★ 겹친 글자쌍 390px 4 · 700px 7 · ★ 1100px 14.
       ★ 넓어질수록 심한 것은 ★ 줄이 안 바뀌어 한 줄에 더 많이 몰리기 때문이다.
   ★ 칩마다 ★ 자리를 준다.  ★ 한 칩 안에서는 안 끊고, 칩 사이에서만 끊는다.
   ★ 새 색을 만들지 않는다 — ★ 이미 있는 토큰만 쓴다 (V11-13) */
.axis-good, .axis-bad, .axis-unknown, .axis-muted {
  display:inline-block; padding:0 6px; margin:2px 5px 2px 0;
  border:1px solid var(--line2); border-radius:12px;
  white-space:nowrap; line-height:1.7;
}
/* ★ 칩 바로 뒤의 단추도 ★ 붙지 않게 한다 (같은 줄에 선다)
   ★★ 08-29 — ★ `white-space:nowrap` 이 없어 ★ 1100px 에서
     ★ 「상세 ▸」의 ★ **▸ 만 다음 줄로 떨어졌다** (실측 스크린샷).
     ★ 단추는 ★ 한 덩어리다 — ★ 가운데서 안 쪼갠다 */
.meta .btn.mini { margin:2px 0 2px 4px; white-space:nowrap; }
.raw          { font-size:.82em; color:var(--dim); margin-left:.3em; }
.denom-short  { color:var(--amber); }

.chip-good    { color:var(--down); }
.chip-bad     { color:var(--up); }
/* ★ 감점 줄 (개정 491) — 조용히 깎지 않는다 */
.pen { margin:6px 0 2px; }
.pen .chip-bad { margin-right:6px; }
.chip-muted   { color:var(--dim); }
.chip-unknown { color:var(--faint); font-style:italic; }
.excluded     { color:var(--faint); }
.muted        { color:var(--dim); }

/* 알려진 문제 3종 (부록 B).  ★ 점수에 반영하지 않는다 — 참고 자료다 */
.issue-critical { color:var(--up); font-weight:600; }
.issue-major    { color:var(--amber); }
.issue-minor    { color:var(--dim); }

/* 경고 3종 (7장 82d) */
.warn-block { color:var(--up); font-weight:600; }
.warn-warn  { color:var(--amber); }
.warn-info  { color:var(--dim); }

/* 등급 — ★ 색을 쓰지 않는다.  글자와 위치로 구분한다 (STEP 145a) */
/* ★ 개정 433 — 8단계 + 제외.  같은 자리·같은 모양이어야 눈이 배운다 */
.grade-f, .grade-g, .grade-excluded,
.grade-s, .grade-a, .grade-b, .grade-c, .grade-d, .grade-e, .grade-none {
  display:inline-block; min-width:22px; text-align:center; padding:1px 6px;
  border:1px solid var(--line2); border-radius:3px; font-weight:700;
  font-family:var(--mono); }
.grade-s, .grade-a { border-color:var(--amber); }
.grade-e, .grade-f { color:var(--dim); }
.grade-g { color:var(--faint); }
/* ★ 제외는 등급이 아니다.  점수 색을 안 쓴다 — 테두리로만 구분한다 */
.grade-excluded { color:var(--faint); border-style:dashed; }
.grade-none { color:var(--faint); }

.ver { display:flex; gap:16px; padding:10px 24px; border-top:1px solid var(--line);
       color:var(--faint); font-size:12px; font-family:var(--mono); }
.error .reason { font-size:16px; }
.error .action { color:var(--amber); }
.runid { color:var(--faint); font-size:12px; font-family:var(--mono); }

/* 후보 카드 (10장 · 시안 v2_recommend) */
.cand header { display:flex; gap:10px; align-items:baseline; flex-wrap:wrap; }
.cand .price { margin-left:auto; font-weight:700; font-family:var(--mono); }
.cand .meta { margin:4px 0 8px; font-size:13px; }
.cand p { margin:5px 0; font-size:14px; }
.cand b { margin-right:6px; color:var(--dim); font-weight:600; }
.cand span[class^="chip-"] { display:inline-block; padding:1px 7px;
        border-radius:3px; margin:0 4px 3px 0; font-size:13px;
        background:var(--surface2); }
.pending li { color:var(--amber); }
.score .muted { margin-left:10px; font-size:13px; }

/* 진단 판정 문장 (2장 STEP 21b) — 표시용이다 */
.diag-verdict { padding:9px 12px; background:var(--surface2);
                border-left:3px solid var(--faint); }

/* 작은 단추.  ★ 시안의 .mini(대시보드 막대)와 이름만 같다 — 그쪽은 가둬 뒀다 */
.mini { font-size:12px; padding:1px 6px; }
form.inline { display:inline; margin-left:6px; }
label { display:block; margin:6px 0; }
input, textarea, button { font:inherit; background:var(--surface2);
        color:var(--text); border:1px solid var(--line2); border-radius:3px;
        padding:4px 7px; }
button { cursor:pointer; }
.opt { display:block; padding:3px 0; }
pre, code { background:var(--surface2); font-family:var(--mono); }
pre { padding:8px 10px; overflow-x:auto; }
.toc li { color:var(--dim); }

/* 사진 (개정 274).  ★ ci.encar.com 을 그대로 부른다 — 내려받지 않는다.
   칸을 CSS 로 고정한다 — 이미지가 오기 전에 표가 흔들리지 않게 한다 */
/* ★ 사진은 최소 128px (개정 281 · V11-80).  64px 은 차가 안 보인다.
   ★ 좁아도 줄이지 않는다 — 차를 보는 것이 목적이다 */
.thumb { width:128px; height:86px; border-radius:12px; object-fit:cover;
         border:1px solid var(--line); background:var(--surface2);
         display:block; }

/* ── 반응형 3단 (STEP 149o-2 · 개정 278) ─────────────────────────
   ★ 값을 버리지 않는다.  좁으면 배치를 바꾼다.
   ★ CSS 만으로 한다 — JS 로 폭을 재지 않는다 (개정 248).
   ★ 가로 스크롤로 떠넘기지 않는다 — 오른쪽에 무엇이 있는지 모르게 된다.

   넓음 ≥1100  표.  22열이 한 줄
   중간 640~1099  카드 2장씩.  값은 그대로
   좁음 <640   카드 1장씩.  마스터는 360px 로 본다
   ─────────────────────────────────────────────────────────── */
body.s-listings main { max-width:1560px; }
.rows { table-layout:auto; }
.rows td.photo { width:64px; }
.rows td.ax a { display:inline-block; min-width:1.2em; }
.rows td.act { white-space:nowrap; }
.rows td.act .btn { margin-right:4px; }

/* ≥1400 — 넓으면 더 보여 준다.  트림을 줄이지 않는다 */
@media (min-width:1400px) {
  .rows td[data-label="트림"] { max-width:none; white-space:normal; }
}

/* <1100 — 표를 카드로 바꾼다.  접는 것이 아니라 모양을 바꾸는 것이다.
   ★ 한 칸이 한 줄이면 카드가 25줄이 된다 — 실측 08-16 스크린샷.
     규격은 「한 카드가 화면 절반을 넘지 않는다.  두 개는 보여야 비교가 된다」다.
     그래서 관련된 값을 한 줄에 모아 10줄로 앉힌다 (STEP 149o-2 카드 배치) */
/* ★★ 폭 세 단계 (부록 G 14장-1) — 좁음 <640 카드 · 중간 640~1749 표 2줄
   · 넓음 ≥1750 표 22열.
   ★ 넓음 경계가 규격의 1100 이 아니라 1750 이다.  부록 G 목록 22열의
     폭 합이 1,710px 이라 1100px 에서는 오른쪽 일곱 열이 잘린다
     (실측 08-18 — 마스터 화면 약 1200px 에서 글자가 세로로 떨어졌다).
     이 어긋남은 가이드에게 보고했다 (config/web.json list_wide_min_px)
   ★ 전에는 이 블록이 max-width:1099 였다.  그래서
     640~1099 가 카드로 바뀌고 1100~1749 는 표가 넘쳤다 — 가운데가 통째로
     깨져 있었는데 360·1400 만 찍어 아무도 못 봤다 */
@media (max-width:1749px) {
  .rows, .rows tbody, .rows tr, .rows td { display:block; }
  .rows thead { display:none; }          /* 머리말은 칸마다 data-label 로 붙는다 */
  .rows tbody { display:grid; grid-template-columns:1fr; gap:10px; }
  .rows tr {
    padding:6px 0; border-bottom:1px solid var(--line);
    /* ★ 배치를 고정한다.  값이 없다고 자리를 당기지 않는다 */
    display:grid; grid-template-columns:repeat(12, minmax(0, 1fr));
    gap:1px 6px; align-content:start; font-size:12.5px; line-height:1.5;
  }
  /* 카드 모양(테두리·배경·둥근 모서리)은 좁은 폭에서만.
     ★ 중간 폭은 「표 · 묶어서」다 — 카드가 아니다 (부록 G 14장-1) */
  @media (max-width:639px) {
    .rows tbody { grid-template-columns:1fr 1fr; }
    .rows tr {
      background:var(--surface); border:1px solid var(--line);
      border-radius:7px; padding:9px 11px;
    }
  }
  /* ★ 자르지 않는다.  「94…」로 잘리면 그것도 값이 사라진 것이다 (개정 278).
     칸을 넘으면 줄을 바꾼다 — 실측 08-16 스크린샷 */
  /* ★ tbody 를 끼워야 한다.  body.s-listings td (0,1,2) 가
     .rows td (0,1,1) 보다 좁아 white-space:nowrap · padding 6px 7px 이
     계속 이겼다.  그래서 카드가 화면 밖으로 밀려 ♡ 와 보증이 잘렸다
     — 배치를 몇 번 고쳐도 안 낫던 진짜 원인이다 (실측 08-18) */
  .rows tbody td { border-bottom:0; padding:0; min-width:0;
                   white-space:normal;
                   /* ★ anywhere 는 낱말 한가운데를 자른다 —
                      「KOLEOS_HE / V」 · 「청운자동차매 / 매상사」
                      (마스터 실측 08-18).  낱말은 지키고, 정 안 들어가면
                      그때만 끊는다.  한글은 keep-all 이라야 안 갈린다 */
                   word-break:keep-all; overflow-wrap:break-word; }
  .rows td::before {
    content:attr(data-label); color:var(--faint); font-size:9.5px;
    letter-spacing:.04em; margin-right:4px;
  }
  /* 사진 — 왼쪽 두 칸 · 세 줄.  ★ tr 에 position:relative 를 줘도
     격자에서 빼내지 못했다 (실측).  격자 안에 두되 딱 세 줄만 차지시킨다 */
  .rows td.photo { grid-column:1 / span 3; grid-row:1 / span 3; }
  .rows td.photo::before { content:""; margin:0; }
  /* 차종 · 트림 · 딜러 · 비고는 넓게 */
  /* ★ 여섯 칸으로 나눠 관련된 값을 한 줄에 모은다 (STEP 149o-2 카드 배치).
     기본은 세 칸(한 줄에 둘), 넓은 값만 더 준다 */
  .rows td { grid-column:span 2; }
  .rows td[data-label="차종"], .rows td[data-label="트림"],
  .rows td[data-label="딜러"] { grid-column:span 4; }
  .rows td[data-label="등급"], .rows td[data-label="순위"],
  .rows td[data-label="비율"] { grid-column:span 4; }
  /* ★ 축 7칸 — 한 줄에 셋.  값이 O · - · ? 하나뿐이라 좁아도 된다.
     긴 상태 문구가 붙는 칸만 아래에서 넓힌다 */
  .rows td.ax { grid-column:span 2; font-size:11.5px; }
  /* ★ .rows td.ax 가 뒤에 와서 이긴다 — 축 칸은 더 좁은 선택자로 덮는다.
     ★ 개정 292 로 축 이름이 바뀌었다 — 사고 · 골격 · 보험 수리비 · 용도 · 보증 */
  .rows td.ax[data-label="골격"], .rows td.ax[data-label="보증"],
  .rows td[data-label="시세"] {
    grid-column:span 3;
  }
  /* ★ 「렌트 이력 (점검부·보험·번호판)」은 한 줄을 통째로 써야 안 겹친다
     (실측 08-17 스크린샷 — 보증과 겹쳐 읽을 수 없었다) */
  .rows td.ax[data-label="용도"],
  /* 신차가는 「등급 4,560만 + 옵션 713만」 두 줄이다 (개정 301) */
  .rows td[data-label="신차가"] { grid-column:span 6; }
  .rows td[data-label="비고"] { grid-column:span 6; }

  /* ★ 시세차를 크게.  이 도구의 핵심이다.
     ★ 「싼 이유 3가지를 찾았습니다」가 붙어 한 줄을 통째로 쓴다 (개정 299) */
  .rows td.gap { grid-column:span 6; font-size:1.2em; font-weight:600; }
  .rows td[data-label="가격"] { grid-column:span 3; font-size:1.1em; }
  .rows td[data-label="비고"] { grid-column:span 6; }
  .rows td.gap::before { font-size:9.5px; font-weight:400; }
  /* 축 7칸 — 기호 + 이름으로 나란히.  카드끼리 세로로 맞는다 */
  /* 조작은 맨 아래 한 줄 */
  .rows td.act { grid-column:1 / -1; margin-top:6px; white-space:nowrap; }
  .rows td.act::before { content:""; margin:0; }
  /* 표가 아니므로 오른쪽 정렬을 풀어야 이름표와 값이 붙는다 */
  .rows tbody td.r, .rows tbody td.c { text-align:left; }
}

/* <640 — 카드 한 장씩.  ★ 마스터는 360px 로 본다 */
@media (max-width:639px) {
  .rows tbody { grid-template-columns:1fr; }
  main { padding:14px 12px 50px; }
  .top, .nav, .flash, .banner { padding-left:12px; padding-right:12px; }
  .bar { gap:6px; }
  /* ★ 조건 단추가 한 줄씩 꽉 차면 다섯 줄이 된다 — 실측 08-16 스크린샷 */
  .bar .btn { width:auto; flex:0 0 auto; padding:5px 10px; font-size:12px; }
}

/* 미리보기 (STEP 149o · 개정 277).  ★ v1 원본의 값을 그대로 옮겼다.
   행에 손대면 그 차의 사진과 강점이 뜬다 — 브라우저만 할 수 있는 일이다 */
#peek { position:fixed; z-index:200; display:none; pointer-events:none;
        width:290px; background:var(--surface); border:1px solid var(--line2);
        border-radius:8px; box-shadow:0 12px 32px rgba(0,0,0,.08);
        overflow:hidden; }
#peek img { width:100%; height:184px; object-fit:cover; display:block;
            background:var(--surface2); }
#peek .pk { padding:10px 12px; }
#peek .pk-t { font-weight:600; font-size:13.5px; margin-bottom:3px; }
#peek .pk-p { font-family:var(--mono); font-size:19px; font-weight:600;
              line-height:1.2; }
#peek .pk-r { display:flex; flex-wrap:wrap; gap:4px; margin-top:8px; }
#peek .pk-d { font-size:11px; color:var(--dim); margin-top:7px;
              padding-top:7px; border-top:1px solid var(--line); }
/* ★ 손가락으로 쓰는 폭에서는 미리보기를 띄우지 않는다 — 마우스가 없다 */
@media (max-width:639px) { #peek { display:none !important; } }

/* 시안에 대응이 없어 우리가 정한 것 — 이름을 화면과 맞춰 둔다 (V11-59) */
.notice { padding:10px 12px; background:var(--surface);
          border-left:3px solid var(--amber); margin:0 0 14px; }
.pros li { color:var(--down); }
.cons li { color:var(--up); }
.cmp-head { color:var(--dim); font-weight:600; }
.unknown { color:var(--faint); font-style:italic; }

/* 히스토그램 막대는 <a> 다 — 누르면 그 구간 매물로 간다 (시안 v2_market).
   ★ 시안은 <div> 에 JS 로 걸었다.  우리는 JS 없이 링크로 한다 (개정 248) */
.hist .b { display:block; text-decoration:none; }
.hist .b .n { text-decoration:none; }
/* 좁은 폭에서 표가 화면을 넘지 않게 — 스크롤은 그 표 안에서만 (V11-71).
   ★ 스크롤바가 흰 줄로만 보이면 무엇인지 모른다 — 스크롤바로 보이게 한다
     (실측 08-16 검토 16 — 「표 아래 흰 띠가 하나 있습니다」) */
@media (max-width:1099px) {
  /* ★ thead 와 tbody 에 각각 display:table 을 주면 둘이 따로 폭을 정해
     머리말과 값이 어긋난다 — 실측 08-16 검토 18
     (「관측·매물·출처가 빈 칸이고 오른쪽에 ] 만 보인다」).
     칸을 안 접게만 하면 안쪽 표가 스스로 넓어져 가로로 넘어간다.
     ★ 그래야 머리말과 값이 같은 표 안에서 줄을 맞춘다 */
  main table td, main table th { white-space:nowrap; word-break:keep-all; }
  main table {
    display:block; overflow-x:auto;
    scrollbar-color:var(--line2) var(--surface2);
    scrollbar-width:thin;
  }
  main table::-webkit-scrollbar { height:8px; }
  main table::-webkit-scrollbar-track {
    background:var(--surface2); border-radius:12px;
  }
  main table::-webkit-scrollbar-thumb {
    background:var(--line2); border-radius:12px;
  }
}

/* 사진 — 넓으면 더 크게 (개정 281 · V11-80) */
@media (min-width:1750px) {
  .thumb, .thumb-none { width:160px; height:107px; }
  .rows td.photo { width:170px; }
}
/* ★ 시안의 .thumb-none(56px)이 앞에 있다.  뒤에서 덮는다 —
   사진이 없는 칸도 같은 크기여야 표가 흔들리지 않는다 (V11-80) */
.thumb-none { width:128px; height:86px; font-size:11px; }

/* ── 개정 305 · 306 — 매물 화면 여섯의 공통 조작 ─────────────────────
   ★ 같은 것은 같은 자리 · 같은 모양 (STEP 148).
     ♡ 는 제목 줄에 — 훑다가 바로 담는다.  카드 끝까지 안 내려간다 */
/* ★★★★★ 08-29 (UI_REVIEW 26-1 · 시험자 119~121) — ★ 하트를 못 눌렀다.
   ★ `.heart` 가 `position:absolute` 인데 ★ 조상 다섯이 ★ 전부 `static` 이라
     ★ ★ 기준 상자가 없어 ★ 카드 밖 · 화면 최상단에 붙었다
     (하트 left 358 / 카드 right 350 — 시험자 실측).
   ★ ★ 그 자리를 ★ `header.top`(sticky · z-index 30)이 덮어
     ★ 390px 에서 ★ 「로그아웃」 단추가 클릭을 가로챘다 — 30초 재시도 끝에 실패.
   ★ 고칠 줄 셋 (마스터가 짚어 주셨다) —
     ① 여기에 `z-index:5`  ② 카드 겉 div 를 `.cardbody` 로  ③ 그 div 에 relative
   ★ `body` · `header` 는 안 건드린다 */
/* ★★★★★ 09-02 — ★ 손가락 자리는 44px 이다 (실측 09-02 — ★ 28px 이었다).
   ★ ★ **보이는 동그라미는 28px 그대로다** — ★ 안쪽 테두리로 그린다.
   ★ ★ ★ 규칙은 ★ **여기 하나뿐이다** (`S46-118` 「두 곳이면 안 된다」) */
.heart { position:absolute;top:-4px;right:-4px;width:44px;height:44px;border-radius:22px; background:transparent;border:0;color:var(--dim);cursor:pointer;font-size:14px; display:flex;align-items:center;justify-content:center; z-index:5;box-shadow:inset 0 0 0 8px var(--surface2), inset 0 0 0 9px var(--line2) }
/* ★ 하트가 기댈 ★ **기준 상자**다.  ★ 이것이 없으면 하트가 화면 꼭대기로 간다 */
.cardbody { position:relative; }
.heart:hover { color:var(--amber); }
.heart.on { color:var(--amber); }
/* 사진이 없는 자리.  ★ 빈 칸으로 두면 줄이 흔들린다 */
.nophoto {
  display:block; width:100%; aspect-ratio:4/3; border-radius:6px;
  background:var(--surface); border:1px solid var(--line);
}
/* 왜 이 순위인가 — 문장 하나 (개정 304) */
.rows td .reason { font-size:12px; color:var(--fg); white-space:normal; }

/* 시안 v2_recommend 의 진행 막대 — 한 줄에 들어가게 얇게 (개정 303) */
.rows .pbar {
  display:flex; height:4px; border-radius:2px; overflow:hidden;
  background:var(--line); margin-top:3px; width:100%;
}
.rows .pbar .got { background:var(--down); }
.rows .pbar .may { background:var(--line); opacity:.7; }

/* 트림 — Badge · BadgeDetail (개정 313).
   ★ 좁은 폭에서도 줄이지 않는다.  트림이 없으면 무슨 차인지 모른다 */
.rows td.trim { color:var(--fg); white-space:normal; }
@media (min-width:1750px) { .rows td.trim { min-width:9em; } }
.rows td.trim:empty::after { content:"—"; color:var(--dim); }

/* 뺀 것 (개정 322).  ★ 무엇을 왜 뺐는지가 보여야 한다 —
   0 아래로도 내려간다.  조용히 깎지 않는다 */
.minus { margin:6px 0 10px; display:flex; flex-wrap:wrap; gap:6px;
         align-items:center; }
.minus b { color:var(--down); margin-right:4px; }

/* ── 부록 G 0절 — 화면별 사진 크기 (개정 332) ────────────────────────
   ★ 마스터 지적 — 「추천에는 이미지 너무 커」.
     추천은 목록보다 작다.  한 화면에 여러 후보가 보여야 한다
   ★ 크기를 CSS 로 고정한다 — 이미지가 오기 전에 칸이 흔들리지 않게
   ★ 비율 4:3 을 지킨다.  찌그러뜨리지 않는다 */
.rows td.photo img, .rows td.photo .nophoto {
  width:96px; height:72px; object-fit:cover; border-radius:12px;
  display:block; background:var(--surface); border:1px solid var(--line);
}
.cand-rows td.photo img, .cand-rows td.photo .nophoto {
  width:80px; height:60px;
}
@media (max-width: 1749px) {
  .rows td.photo img, .rows td.photo .nophoto { width:88px; height:66px; }
  .cand-rows td.photo img, .cand-rows td.photo .nophoto {
    width:72px; height:54px;
  }
}
@media (max-width: 639px) {
  .rows td.photo img, .rows td.photo .nophoto { width:80px; height:60px; }
  .cand-rows td.photo img, .cand-rows td.photo .nophoto {
    width:64px; height:48px;
  }
}

/* ③ 왜 싼가 — 상세 (부록 G 상세 ③절 · 개정 299).
   ★ 「시세차 −1,100만」만 내고 끝내지 않는다.  이유를 함께 낸다 */
.why { font-size:15px; margin:10px 0 4px; }
.why-list { margin:0 0 14px 18px; padding:0; }
.why-list li { margin:3px 0; color:var(--fg); }

/* ── 칸이 쥐어짜여 글자가 세로로 떨어지는 것을 막는다 (개정 307 · G-7)
   ★ 실측 08-17 — 추천 머리말이 「10건 / — E · 미판정을 뺀 후 보」로
     한 자씩 떨어졌다.  min-width 가 없어 칸이 0 까지 줄어든 것이다 */
.cond { flex-wrap:wrap; }
.cond .q { min-width:22em; }
.cond .n { min-width:14em; }
/* ★ 표일 때만이다.  카드(<1100)에서는 칸을 격자가 정한다 —
   min-width 를 걸면 카드가 화면 밖으로 밀려 오른쪽 값이 잘린다
   (실측 08-18 — 「3년 3개월 · 92천k」에서 잘렸다.  min-width:9em 이
   격자 칸 69px 을 94px 로 벌렸다) */
@media (min-width:1750px) {
  .rows th, .rows td { min-width:3.2em; }
  .rows td.trim, .rows td[data-label="딜러"] { min-width:8em; }
  .rows td[data-label="제조사 보증"] { min-width:9em; white-space:nowrap; }
}

/* ★ 추천 이유는 문장이다.  좁은 폭에서도 한 칸을 통째로 쓴다 (개정 304 · G-7)
   실측 08-17 — 「시세보 다 740만 싸고」로 한 자씩 떨어졌다 */
.rows td[data-label="왜 이 순위인가"] { grid-column:1 / -1; }
@media (min-width:1750px) {
  .rows td[data-label="왜 이 순위인가"] { min-width:12em; }
}
.rows td[data-label="왜 이 순위인가"] .reason { white-space:normal; }

/* ══ 부록 G — 폭별 줄 수 (개정 332) ═══════════════════════════════
   넓음 ≥1100  1줄   ·  중간 640~1099  2줄  ·  좁음 <640  6줄 (추천 8줄)
   ★ 도면이 부록 G 에 있다.  거기 없는 값은 그 폭에서 접는다.
     22열이 다 나오는 것은 넓은 폭이다 — 좁은 폭은 규격이 골라 놨다
   ★ 이름표(data-label)를 좁은 폭에서 끈다.  도면에 이름표가 없다.
     「연식 2024-11」이 아니라 「2024-11 · 52,176km」이다.
     이름표가 폭을 먹어 값끼리 겹쳤다 (실측 08-18)
   ★ 격자는 12칸이다.  한 줄의 span 합이 12 를 넘으면 칸이 겹친다 */

/* ── 중간 640~1099 — 한 행 2줄 (부록 G) ──────────────────────────
   1줄  사진 ♡ 등급 차종 트림 연식 주행 가격 링크
   2줄  비율 · 시세대비 · 신차가대비 · 월 · 사고 · 골격 · 용도 · 보증
        · 옵션 · 딜러 · 경과 */
/* ── 중간 640~1749 — 표 · 한 행 2줄 (부록 G 14장-2) ─────────────
   1줄  사진 ♡ 등급 차종 트림 연식 주행 가격 링크
   2줄  비율 · 시세대비 · 신차가대비 · 월 · 사고 · 골격 · 용도 · 보증
        · 옵션 · 딜러 · 경과
   ★ 12칸에 정확히 맞춘다.  전에 act 를 grid-area:1/13/3/13 로 둬서
     13번째 칸이 생겼다 — 그 칸이 「근거 엔카에서 보기 ↗」 nowrap 폭을
     먹어 나머지 12칸이 쥐어짜였고 글자가 세로로 떨어졌다 (실측 08-18)
   ★ 이름표를 끈다.  칸이 70px 대라 「시세 대비 −14.0%」가 안 들어간다
   ★ 순위 · 상태 · 사이트 는 부록 G 2줄 배치에 없다 — 접는다.
     넓은 폭(≥1750)과 /why 에는 그대로 있다 */
@media (min-width:640px) and (max-width:1749px) {
  .car-rows td::before, .cand-rows td::before { content:""; margin:0; }
  .car-rows td[data-label="시세 대비"]::before   { content:"시세 ";
                                                  font-size:10px; }
  .car-rows td[data-label="신차가 대비"]::before { content:"신차 ";
                                                  font-size:10px; }
  /* 원값(시세 5,290만 · 신차가 6,885만 (등급 …))은 상세로.
     ★ 70px 칸에서 세로로 늘어져 한 행이 다섯 줄이 됐다 (실측 08-18) */
  .car-rows td[data-label="시세 대비"] .raw,
  .car-rows td[data-label="신차가 대비"] .raw { display:none; }
  .car-rows td[data-label="순위"],
  .car-rows td[data-label="상태"],
  .car-rows td[data-label="사이트"] { display:none; }

  .car-rows td { font-size:11.5px; }
  .car-rows td.photo            { grid-area:1 / 1 / 2 / 3; }
  .car-rows td[data-label="관심"] { grid-area:1 / 3 / 2 / 4; }
  .car-rows td[data-label="등급"] { grid-area:1 / 4 / 2 / 5; }
  /* ★ 차종은 두 칸이다.  한 칸(66px)에 「KOLEOS_HEV」가 안 들어간다 */
  /* ★ 차종·트림은 두 칸씩이다.  한 칸(66px)에 「KOLEOS_HEV」가 안 들어가고
     트림은 네 줄로 접혀 행이 통째로 높아진다 (실측 08-18) */
  .car-rows td[data-label="차종"] { grid-area:1 / 5 / 2 / 7; }
  .car-rows td.trim             { grid-area:1 / 7 / 2 / 9; }
  .car-rows td[data-label="연식"] { grid-area:1 / 9 / 2 / 10; }
  .car-rows td[data-label="주행"] { grid-area:1 / 10 / 2 / 11; }
  .car-rows td[data-label="가격"] { grid-area:1 / 11 / 2 / 12;
                                   font-weight:700; }
  /* ★ 링크는 두 칸이다.  한 칸(70px)에 넣으면 「근거 / 엔카에서 / 보기 ↗」
     세 줄로 접혀 행이 통째로 높아진다 (실측 08-18) */
  .car-rows td.act              { grid-area:1 / 12 / 2 / 13;
                                  white-space:normal; text-align:left;
                                  font-size:10px; line-height:1.35; }

  /* 2줄 — 열한 칸이 정확히 12칸을 채운다.
     ★ 보증만 두 칸이다 (「3년 3개월 · 92천km」).  합이 13이 되면
       한 칸이 밀려나 「못 놓았다」가 된다 (V11-109 실측 08-18) */
  .car-rows td[data-label="비율"]        { grid-area:2 / 1 / 3 / 2; }
  .car-rows td[data-label="시세 대비"]    { grid-area:2 / 2 / 3 / 3; }
  .car-rows td[data-label="신차가 대비"]  { grid-area:2 / 3 / 3 / 4; }
  .car-rows td[data-label="월"]          { grid-area:2 / 4 / 3 / 5; }
  .car-rows td.ax[data-label]           { grid-row:2; grid-column:span 1; }
  .car-rows td.ax[data-label="제조사 보증"] { grid-column:span 2; }
  .car-rows td[data-label="옵션"]        { grid-area:2 / 10 / 3 / 11; }
  /* ★ 상호는 띄어쓰기가 없다 — 「청운자동차매매상사」.
     칸을 아무리 줘도 갈리므로 줄임표로 줄인다.  전체는 title 에 있다
     (마스터 실측 08-18 「청운자동차매 / 매상사」) */
  .car-rows td[data-label="딜러"]        { grid-area:2 / 11 / 3 / 12;
                                          white-space:nowrap;
                                          overflow:hidden;
                                          text-overflow:ellipsis; }
  .car-rows td[data-label="경과"]        { grid-area:2 / 12 / 3 / 13; }
}

/* ── 좁음 <640 — 카드 6줄 (부록 G 도면) ─────────────────────────
   1줄  [사진]  S  G70_20T                    ♡
   2줄   80×60  가솔린 2.0T 4WD · 시그니처
   3줄          2022-11 · 52,176km
   4줄  2,670만  시세 −13.0%  신차 −49.4%      ★ 가장 크다
   5줄  무사고 · 골격이상없음 · 렌트 · 보증15개월   ★ 렌트는 빨강 (tone)
   6줄  옵션 4종 713만        근거  엔카↗
   ★ 순위 · 비율 · 월 · 상태 · 딜러 · 경과 · 사이트 는 이 폭에 없다.
     지운 것이 아니라 접은 것이다 — 넓은 폭과 상세에는 그대로 있다 */
@media (max-width:639px) {
  /* 도면에 이름표가 없다.  값이 스스로 말한다 */
  /* ★ 추천도 같다.  .rows → .car-rows 로 좁힐 때 추천을 빠뜨려
     이름표가 도로 살아나 카드가 8줄에서 11줄이 됐다 (실측 08-18) */
  .car-rows td::before, .cand-rows td::before { content:""; margin:0; }
  /* ★ 1fr 의 최소는 min-content 다.  「근거  엔카에서 보기 ↗」가
     nowrap 이라 카드가 화면 밖으로 밀려 ♡ 와 보증이 잘렸다
     (실측 08-18 스크린샷).  최소를 0 으로 내리고 줄바꿈을 푼다 */
  .car-rows tbody, .cand-rows tbody { grid-template-columns:minmax(0, 1fr); }
  .car-rows tbody td.act, .cand-rows tbody td.act { white-space:normal; }

  /* ★ 사진은 네 칸이다.  세 칸(78px)에 80px 그림을 넣으면 넘쳐
     등급 배지가 사진 위에 얹힌다 (실측 08-18 스크린샷)
     ★ 사진은 두 줄만 차지한다.  셋째 줄을 비워 트림에 폭을 통째로 준다 */
  .car-rows td.photo            { grid-area:1 / 1 / 3 / 5; }
  .car-rows td[data-label="등급"] { grid-area:1 / 5 / 2 / 7; }
  .car-rows td[data-label="차종"] { grid-area:1 / 7 / 2 / 11; }
  /* ♡ 는 16px 글자에 여백이 붙어 한 칸(21px)에 안 들어간다 */
  .car-rows td[data-label="관심"] { grid-area:1 / 11 / 2 / 13; text-align:right; }
  .car-rows td[data-label="연식"] { grid-area:2 / 5 / 3 / 8; }
  .car-rows td[data-label="주행"] { grid-area:2 / 8 / 3 / 13; }
  /* ★ 트림이 도면(「가솔린 2.0T 4WD · 시그니처」)보다 길다.
     실제 값은 「가솔린 2.5 터보 AWD · (세부등급 없음)」 26자다.
     사진 오른쪽 8칸(195px)에 넣으면 두 줄로 넘쳐 카드가 7줄이 됐다.
     ★ 줄여서 감추지 않고 (개정 278) 셋째 줄을 통째로 준다.
       부록 G 도면의 2줄·3줄이 서로 바뀐다 — 값은 하나도 안 빠진다 */
  .car-rows td.trim             { grid-area:3 / 1 / 4 / 13; }

  /* 4줄 — 값 셋.  ★ 여기가 가장 크다 (부록 G 「값이 이 화면의 핵심이다」) */
  .car-rows td[data-label="가격"]       { grid-area:4 / 1 / 5 / 5; font-size:15px;
                                     font-weight:700; }
  .car-rows td[data-label="시세 대비"]   { grid-area:4 / 5 / 5 / 9;  font-size:13px; }
  .car-rows td[data-label="신차가 대비"] { grid-area:4 / 9 / 5 / 13; font-size:13px; }
  /* 도면의 「시세 −13.0%」 · 「신차 −49.4%」 — 두 글자만 붙인다 */
  .car-rows td[data-label="시세 대비"]::before,
  .cand-rows td[data-label="시세 대비"]::before   { content:"시세 ";
                                                   font-size:10px; }
  .car-rows td[data-label="신차가 대비"]::before,
  .cand-rows td[data-label="신차가 대비"]::before { content:"신차 ";
                                                   font-size:10px; }
  /* 원값(시세 5,290만)은 상세로 — 도면에 없다 */
  .car-rows td[data-label="시세 대비"] .raw,
  .car-rows td[data-label="신차가 대비"] .raw { display:none; }

  /* 5줄 — 축 넷.  흐름에 맡기되 줄을 못박는다 (이름이 c.head 라 못 짚는다).
     ★ [data-label] 을 붙여야 한다.
       위쪽 규칙이 「용도」에 span 6 을 주는데 그게 더 좁아 이긴다.
       그것 때문에 5줄이 15칸이 되어 격자가 통째로 어긋났다
       (실측 08-18 — 칸 폭이 10.1px 아홉 · 30.3px 셋으로 갈렸다) */
  .car-rows td.ax[data-label] { grid-row:5; grid-column:span 3;
                            font-size:10px; }
  /* ★ 축마다 값 길이가 다르다.  똑같이 셋씩 주면 「3년 3개월 · 92천km」가
     두 줄로 넘쳐 카드가 7줄이 된다 (실측 08-18).  합은 정확히 12 다.
     이름은 config/labels.json 이 정한다 — 바뀌면 위 span 3 으로 돌아간다 */
  .car-rows td.ax[data-label="사고"]      { grid-column:span 2; }
  .car-rows td.ax[data-label="용도"]      { grid-column:span 2; }
  .car-rows td.ax[data-label="제조사 보증"] { grid-column:span 5; }

  .car-rows td[data-label="옵션"] { grid-area:6 / 1 / 7 / 6; font-size:10.5px; }
  .car-rows td.act              { grid-area:6 / 6 / 7 / 13; margin-top:0;
                              text-align:right; }

  /* ★ 접는 것이지 지우는 것이 아니다.  넓은 폭과 /why 에 그대로 있다 */
  .car-rows td[data-label="순위"], .car-rows td[data-label="비율"],
  .car-rows td[data-label="월"], .car-rows td[data-label="상태"],
  .car-rows td[data-label="딜러"], .car-rows td[data-label="경과"],
  .car-rows td[data-label="사이트"] { display:none; }

  /* ── 추천 카드 8줄 (부록 G 도면) ───────────────────────────
     1 [사진] 1  S  G70_20T  ♡   2 트림   3 연식·주행
     4 값 셋   5 ★ 추천 이유 한 문장   6 축 넷   7 옵션   8 근거·엔카·비교
     ★ 목록과 열이 다르다.  목록 규칙을 물려받으면 사진 칸이 눌려
       빈 상자로 보인다 (실측 08-18 — 목록은 되고 추천만 안 나왔다) */
  /* 추천 사진은 64×48 — 목록보다 작다.  세 칸이면 넉넉하다.
     ★ 사진은 두 줄만.  셋째 줄을 비워 트림에 폭을 통째로 준다
       (목록과 같은 이유 — 실제 트림이 도면 예시보다 길다) */
  .cand-rows td.photo            { grid-area:1 / 1 / 3 / 4; }
  .cand-rows td[data-label="순위"] { display:block;
                                    grid-area:1 / 4 / 2 / 6; font-size:11px; }
  .cand-rows td[data-label="등급"] { grid-area:1 / 6 / 2 / 8; }
  .cand-rows td[data-label="차종"] { grid-area:1 / 8 / 2 / 11; }
  .cand-rows td[data-label="관심"] { grid-area:1 / 11 / 2 / 13; }
  .cand-rows td[data-label="연식"] { grid-area:2 / 4 / 3 / 8; }
  .cand-rows td[data-label="주행"] { grid-area:2 / 8 / 3 / 13; }
  .cand-rows td.trim             { grid-area:3 / 1 / 4 / 13; }
  .cand-rows td[data-label="가격"]       { grid-area:4 / 1 / 5 / 5; }
  .cand-rows td[data-label="시세 대비"]   { grid-area:4 / 5 / 5 / 9; }
  .cand-rows td[data-label="신차가 대비"] { grid-area:4 / 9 / 5 / 13; }
  .cand-rows td[data-label="비율"] { display:none; }
  .cand-rows td[data-label="왜 이 순위인가"] {
    grid-area:5 / 1 / 6 / 13; font-size:11.5px; }
  .cand-rows td.ax[data-label] { grid-row:6; grid-column:span 3; }
  .cand-rows td.ax[data-label="사고"]       { grid-column:span 2; }
  .cand-rows td.ax[data-label="용도"]       { grid-column:span 2; }
  .cand-rows td.ax[data-label="제조사 보증"] { grid-column:span 5; }
  .cand-rows td[data-label="옵션"] { grid-area:7 / 1 / 8 / 13; font-size:10px; }
  .cand-rows td.act         { grid-area:8 / 1 / 9 / 13; text-align:left; }
}

/* ── 카탈로그 못 받은 조합 표 (개정 327) ─────────────────────────
   ★ 칸 셋을 똑같이 나누면 「MODEL_Y · 2025-03」이 50px 에 뭉갠다.
     이 표에만 폭을 준다 — .rows 에 걸면 관리 화면 열아홉이 같이 움직인다 */
@media (max-width:1749px) {
  /* 한 줄에 셋을 넣으면 52px 씩이라 「MODEL_Y · 2025-03」이 넉 줄로 쪼개진다.
     ★ 차종은 한 줄을 통째로 쓰고, 사유와 건수를 그 아래 한 줄에 둔다 */
  .cat-rows td[data-label="차종 · 연식"],
  .reg-rows td[data-label="경로"] {
    grid-column:1 / -1; font-weight:600;
  }
  .cat-rows td[data-label="차종 · 연식"]::before,
  .reg-rows td[data-label="경로"]::before { content:""; margin:0; }
  .cat-rows td[data-label="왜 못 받았나"],
  .reg-rows td[data-label="제안"] { grid-column:span 4; }
  .cat-rows td[data-label="걸린 매물"],
  .reg-rows td[data-label="관측"]   { grid-column:span 2; }
}

/* ── 시세 위치 (개정 340 · V11-119) ─────────────────────────────
   ★ 「3,100만 ─── ● 4,550만 ─── 6,000만」.
     퍼센트만 내면 싼 것인지 감이 안 온다 — 자리를 보여 준다 */
.pos { position:relative; height:26px; margin:6px 4px 2px; }
.pos .line { position:absolute; left:0; right:0; top:12px; height:2px;
             background:var(--line2); border-radius:1px; }
.pos .mid { position:absolute; top:6px; width:2px; height:14px;
            background:var(--dim); transform:translateX(-1px); }
.pos .me { position:absolute; top:0; transform:translateX(-50%);
           color:var(--amber); font-size:16px; line-height:26px; }
.posx { display:flex; justify-content:space-between; margin:0 4px 6px;
        font-family:var(--mono); font-size:11px; color:var(--faint); }
.posx .md { color:var(--dim); }

/* ── 감가 곡선 (개정 340 · V11-119) ─────────────────────────────
   ★ 선으로 보면 기울기가 보인다.  표로만 내면 안 보인다 */
svg.line { display:block; width:100%; height:140px; margin:6px 0 2px; }
svg.line polyline { fill:none; stroke:var(--amber); stroke-width:1.2;
                    vector-effect:non-scaling-stroke; }
svg.line circle { fill:var(--amber); }

/* ── 시세 요약 표 (개정 340 · 마스터 실측 08-18) ─────────────────
   ★ 여덟 칸이라 360px 에서 p75·최고가 화면 밖으로 잘렸다.
     넉 칸씩 두 줄로 접는다 — 값을 지우지 않는다 */
@media (max-width:1749px) {
  .mk-rows td { grid-column:span 3; font-size:11px; }
  .mk-rows td[data-label="관측일"] { grid-column:1 / -1; font-weight:600; }
}

/* ⑨ 비용 — 사이트별 구매 총액 (부록 G 상세 ⑨ · 개정 353) ─────────────
   ★ 「실제로 내는 돈」이다.  크게 낸다 (40-report 「화면에서는 크게 낸다」)
   ★ 사이트가 여럿이면 나란히 — 표시가가 싼 쪽이 실제로 싼 쪽이 아닐 수 있다 */
.buys { display:flex; flex-wrap:wrap; gap:12px; margin:8px 0 4px }
.buy { flex:1 1 260px; min-width:0; border:1px solid var(--line);
       border-radius:6px; padding:10px 12px; background:var(--surface) }
.buy-h { font-size:12px; color:var(--faint) }
.buy-t { font-size:26px; font-weight:700; line-height:1.2; margin:2px 0 6px;
         font-variant-numeric:tabular-nums }
.buy-t .dim { font-size:12px; font-weight:400 }
.buy-t.est { color:var(--ink) }
.buy-rows td { padding:2px 0 }
.buy .muted { font-size:11px; margin:4px 0 0 }
/* 미리보기의 실구매 총액 (개정 353).  ★ 표시가 아래에 붙는다 */
#peek .pk-b { font-size:12px; color:var(--faint); margin-top:2px }

/* 리포트 팝업 (개정 357).  ★ JS 없이 닫힌다 — 별도 경로다 */
.pop { border:1px solid var(--line); border-radius:6px; background:var(--surface);
       padding:10px 12px; margin:8px 0 14px }
.pop-h { display:flex; justify-content:space-between; align-items:baseline;
         gap:8px; border-bottom:1px solid var(--line); padding-bottom:6px }
.pop-x a { font-size:12px }
.rep-body { white-space:pre-wrap; word-break:break-word; font-size:12px;
            max-height:60vh; overflow:auto; margin:8px 0 0 }
.rep-list td, .rep-list th { white-space:nowrap }
.rep-list td:first-child { white-space:normal; word-break:keep-all }
.rep-rows { font-size:12px }
.rep-rows td, .rep-rows th { white-space:nowrap }

/* 진행 메모 (11장 STEP 118 · 개정 362).  ★ 계약 4단계 대신 들어온 것 */
.prog { border:1px solid var(--line); border-radius:6px; padding:8px 10px;
        margin:6px 0; background:var(--surface) }
.prog-h { font-weight:600; margin-bottom:4px }
.prog-l { margin:0 0 6px; padding-left:18px; font-size:13px }
.prog-l li { margin:2px 0 }
.prog form.inline { display:flex; flex-wrap:wrap; gap:6px; align-items:center }

/* ① 상세 사진 (개정 375 · V11-132).  ★ 상세인데 사진이 하나도 없었다.
   ★ JS 없이 갈아 끼운다 — 썸네일은 앵커이고 :target 이 큰 사진을 고른다.
     아무것도 안 눌렀을 때는 첫 장이 보인다 */
.shots { margin:8px 0 12px }
.shot-big { position:relative; width:480px; max-width:100%; aspect-ratio:4/3;
            background:var(--surface2); border:1px solid var(--line);
            border-radius:6px; overflow:hidden }
.shot-big .big { position:absolute; inset:0; display:none }
.shot-big .big:first-child { display:block }
.shot-big .big:target { display:block }
.shot-big .big:target ~ .big:first-child { display:none }
.shot-big img { width:100%; height:100%; object-fit:cover; display:block }
.shot-thumbs { display:flex; flex-wrap:wrap; gap:6px; margin-top:6px }
.shot-thumbs img { width:128px; height:96px; object-fit:cover;
                   border:1px solid var(--line); border-radius:12px;
                   display:block }
@media (max-width:639px) {
  .shot-big { width:100% }
  .shot-thumbs img { width:80px; height:60px }
}

/* 사이트별 거르기 단추 (개정 306).  ★ 사이트가 둘 이상일 때만 나온다 */
.sitebar { display:flex; flex-wrap:wrap; gap:6px; margin:6px 0 }
/* ★★ 08-30 (토스 · UI_REVIEW 29장) — ★ `--ink` 가 ★ 흰 바탕 쪽으로 뒤집혀
   ★ ★ 흰 글자가 ★ 흰 바탕에 얹혀 ★ 「전체」가 안 보였다 (사진 실측).
   ★ 눌린 것은 ★ 강조색으로 채운다 — ★ 위 `.btn.on` 과 같은 꼴 */
.sitebar .btn.on { background:var(--accent); color:var(--surface);
                   border-color:var(--accent); cursor:default }

/* 미분류 — 판단할 재료 (개정 367 · V4-28).
   ★ 경로만 내고 「사람이 봐야 합니다」라 하면 아무도 못 정한다 */
.decide { border:1px solid var(--line); border-radius:6px; padding:8px 10px;
          margin:6px 0; background:var(--surface) }
.dec-h { display:flex; flex-wrap:wrap; gap:6px; align-items:baseline;
         margin-bottom:4px }
.decide p { margin:2px 0; font-size:12px }
.decide form.inline { display:flex; flex-wrap:wrap; gap:6px; align-items:center;
                      margin-top:6px }
/* ★ 색은 토큰만 쓴다 (V11-13).  --up 이 「나쁨」이다 */
.tag.bad { background:var(--up); color:var(--bg) }

/* 받은 원문 (개정 378 · V11-134).  ★ 받아 놓고 안 보여주지 않는다 */
.rawbox { border:1px solid var(--line); border-radius:6px; padding:6px 10px;
          margin:4px 0; background:var(--surface) }
.rawbox summary { cursor:pointer; font-size:13px }
.raw-rows { font-size:12px; margin-top:6px }
.raw-rows td:first-child { white-space:nowrap; color:var(--faint) }

/* 세 값을 한 셀에 (41-view) — 표시가 · 현금 · 월.
   ★ 표시가만 보면 부대비용 차이로 순위가 뒤집힌다 */
.rows td .pay, .rows td .cash { display:block; font-size:11px; line-height:1.3 }

/* 쿼리 결과 「그대로 복사」 (개정 401 · V10-37) */
.qtools { display: flex; gap: 8px; align-items: center; margin: 6px 0; }
.qtools .muted { font-size: 12px; }
.copy { cursor: pointer; }
/* ★ 클립보드가 막혀도 쓸 수 있게 남긴다.  낮게 둬 표를 밀지 않는다 */
textarea.tsv { width: 100%; height: 44px; font-family: var(--mono);
               font-size: 11px; color: var(--dim);
               background: var(--surface2); border: 1px solid var(--line); }

/* 차종 · 가격대 · 리스 거르기 (개정 420) */
.pick { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.pick label { display: flex; gap: 4px; align-items: center; font-size: 13px; }
.pick input[type="text"], .pick input:not([type]) { width: 5em; }


/* ══ 시안 이식 — ref/screens/v2_시안_목록상세.html (개정 427) ══
   ★ 시안이 정본이다.  값을 손으로 옮겨 적지 않는다 (V11-59 · V11-60)
   ★ 아래는 시안에서 기계로 뽑아 붙인 것이다 — 손으로 고치지 않는다 */
.mono { font-family:var(--mono);font-variant-numeric:tabular-nums }
/* ★★★★ 08-29 (UI_REVIEW · 마스터 6 · 개정 850) — ★ 머리를 ★ **한 곳에서** 정한다.
   ★★ 실측 08-29 — ★ `body.s-… header` 규칙이 ★ **21곳**에 똑같이 적혀 있었다.
     ★ ★ 한 글자도 안 다른데 ★ `z-index` 만 갈렸다 — ★ 30 이 열둘 · ★ 20 이 아홉.
     ★ ★ 그래서 ★ 화면마다 ★ 머리의 위·아래가 바뀌었다.
   ★ ★ 21곳을 지우고 ★ 이 한 줄만 남긴다 — ★ 한 곳을 고치면 다 따라온다.
   ★ 틀은 이미 한 곳이다 — ★ `base.html` 이 머리·발을 갖고
     ★ `_page.html` 이 전 화면을 감싼다 (실측).  ★ 갈린 것은 ★ CSS 뿐이었다 */
header { position:sticky;top:0;z-index:50;background:var(--surface); backdrop-filter:blur(8px);border-bottom:1px solid var(--line) }
.hbar { display:flex;align-items:center;gap:14px;padding:11px 16px;max-width:1400px;margin:0 auto }
.logo { font-family:var(--mono);font-weight:700;letter-spacing:-.5px;font-size:15px }
.logo span { color:var(--accent) }
nav { display:flex;gap:2px;margin-left:auto;overflow-x:auto;scrollbar-width:none }
nav::-webkit-scrollbar { display:none }
nav button { background:none;border:0;color:var(--dim);font:inherit;font-size:13px; padding:6px 11px;border-radius:6px;cursor:pointer;white-space:nowrap }
nav button[aria-selected=true] { background:var(--accent);color:var(--ink);font-weight:600 }
nav button:focus-visible { outline:2px solid var(--accent);outline-offset:2px }
.cond { max-width:1400px;margin:0 auto;padding:12px 16px 0 }
.chips { display:flex;flex-wrap:wrap;gap:6px;align-items:center }
.chip { font-family:var(--mono);font-size:12px;padding:4px 9px;border-radius:12px; background:var(--surface2);border:1px solid var(--line);color:var(--dim) }
.chip b { color:var(--text);font-weight:600 }
.chip.on { border-color:var(--accent);color:var(--accent) }
.sentence { margin-top:9px;font-size:13px;color:var(--dim) }
.sentence b { color:var(--text) }
.sentence .n { color:var(--accent);font-family:var(--mono);font-weight:700 }
.bars { display:grid;grid-template-columns:repeat(4,1fr);gap:3px;width:104px }
.bar { height:26px;background:var(--surface2);border-radius:2px;position:relative;overflow:hidden }
.bar i { position:absolute;bottom:0;left:0;right:0;background:var(--dim);display:block }
.bar.b1 i { background:var(--api-dim) }
.bar.b2 i { background:var(--good) }
.bar.b3 i { background:var(--cool) }
.bar.b4 i { background:var(--accent) }
.bar u { position:absolute;top:2px;left:0;right:0;text-align:center;font-size:8px; font-family:var(--mono);color:var(--faint);text-decoration:none;letter-spacing:-.3px }
.barlab { display:grid;grid-template-columns:repeat(4,1fr);gap:3px;width:104px; font-size:8px;font-family:var(--mono);color:var(--faint);text-align:center;margin-top:2px }
main { max-width:1400px;margin:0 auto;padding:14px 16px 80px }
.row { display:grid;gap:12px;align-items:center;padding:12px;border-radius:9px; background:var(--surface);border:1px solid var(--line);margin-bottom:8px; grid-template-columns:44px 104px 72px minmax(150px,1.6fr) repeat(4,minmax(64px,.8fr)) 92px; transition:border-color .12s }
.row:hover { border-color:var(--api-line) }
.gr { font-family:var(--mono);font-weight:800;font-size:19px;text-align:center; border-radius:7px;padding:7px 0;line-height:1 }
.gr small { display:block;font-size:9px;font-weight:600;opacity:.75;margin-top:3px }
.gr.S { background:var(--surface2);color:var(--accent);border:1px solid var(--accent) }
.gr.A { background:var(--surface2);color:var(--good);border:1px solid var(--good) }
.gr.B { background:var(--surface2);color:var(--dim);border:1px solid var(--line) }
.thumb { width:72px;height:54px;border-radius:12px;background:linear-gradient(150deg,var(--api-surface),var(--api-bg)); display:flex;align-items:center;justify-content:center;font-size:9px;color:var(--faint); font-family:var(--mono);flex-shrink:0 }
.name { font-weight:600;font-size:14px;line-height:1.35 }
.trim { color:var(--dim);font-size:12px;margin-top:2px }
.meta { color:var(--faint);font-size:11px;font-family:var(--mono);margin-top:3px }
.cell { font-family:var(--mono);font-size:13px }
.cell b { display:block;font-size:14px;font-weight:700 }
.cell u { display:block;font-size:9px;color:var(--faint);text-decoration:none;margin-bottom:2px; letter-spacing:.4px }
.up { color:var(--bad) }
.price { text-align:right;font-family:var(--mono) }
.price b { font-size:17px;font-weight:800;display:block }
.price u { font-size:11px;text-decoration:none;display:block;margin-top:2px }
.swatch { display:inline-block;width:9px;height:9px;border-radius:2px;vertical-align:-1px; margin-right:4px;border:1px solid var(--line2) }
.desk { display:contents }
.mob { display:none }
.detail { display:none }
.detail.on { display:block }
.list.off { display:none }
.sec { background:var(--surface);border:1px solid var(--line);border-radius:10px; padding:16px;margin-bottom:10px }
.sec h3 { font-size:11px;letter-spacing:1.3px;color:var(--faint);font-weight:700; margin-bottom:12px;font-family:var(--mono) }
.verdict { display:flex;gap:16px;align-items:center;flex-wrap:wrap }
.verdict .gr { font-size:30px;padding:12px 18px;min-width:78px }
.why { flex:1;min-width:230px }
.why li { list-style:none;padding:5px 0 5px 17px;position:relative;font-size:13.5px;line-height:1.55 }
.why li::before { content:"";position:absolute;left:0;top:12px;width:6px;height:6px;border-radius:50% }
.why li.g::before { background:var(--good) }
.why li.r::before { background:var(--bad) }
.why li b { font-family:var(--mono) }
.kv { display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:1px; background:var(--line);border:1px solid var(--line);border-radius:7px;overflow:hidden }
.kv div { background:var(--surface2);padding:11px 12px }
.kv u { display:block;font-size:10px;color:var(--faint);text-decoration:none;margin-bottom:4px; letter-spacing:.4px }
.kv b { font-family:var(--mono);font-size:16px;font-weight:700 }
.gate { display:flex;flex-wrap:wrap;gap:7px }
.gate span { font-size:12px;padding:6px 11px;border-radius:6px;font-family:var(--mono); background:var(--surface2);color:var(--good);border:1px solid var(--good) }
.gate span.x { background:var(--surface2);color:var(--bad);border-color:var(--bad) }
.opts { display:grid;grid-template-columns:repeat(auto-fill,minmax(78px,1fr));gap:7px }
.opt { background:var(--surface2);border:1px solid var(--line);border-radius:7px;padding:11px 5px; text-align:center;font-size:10.5px;color:var(--dim);line-height:1.3 }
.opt.on { border-color:var(--accent);color:var(--accent);background:var(--surface2) }
.opt em { display:block;font-size:17px;font-style:normal;margin-bottom:4px }
.money { width:100%;border-collapse:collapse;font-family:var(--mono);font-size:13px }
.money td { padding:8px 0;border-bottom:1px solid var(--line) }
.money td:last-child { text-align:right }
.money tr:last-child td { border:0;padding-top:12px;font-size:16px;font-weight:800 }
.money tr:last-child td:last-child { color:var(--accent) }
.alt { display:grid;grid-template-columns:repeat(auto-fit,minmax(238px,1fr));gap:9px }
.altcard { background:var(--surface2);border:1px solid var(--line);border-radius:8px;padding:12px; display:flex;gap:11px;align-items:flex-start }
.altcard .gr { font-size:15px;padding:5px 0;min-width:36px }
.altcard .an { font-weight:600;font-size:13px }
.altcard .ap { font-family:var(--mono);font-size:15px;font-weight:700;margin-top:3px }
.altcard .ar { font-size:11.5px;color:var(--good);margin-top:5px;line-height:1.45 }
.altcard .ar.r { color:var(--bad) }
.foot { position:fixed;left:0;right:0;bottom:0;background:var(--surface); border-top:1px solid var(--line);padding:11px 16px;display:flex;gap:12px; align-items:center;backdrop-filter:blur(8px);z-index:40 }
.foot .p { font-family:var(--mono);font-size:19px;font-weight:800 }
.foot .p u { display:block;font-size:10px;color:var(--faint);text-decoration:none;font-weight:400 }
.foot a { margin-left:auto;background:var(--accent);color:var(--ink);text-decoration:none; font-weight:700;font-size:13px;padding:10px 18px;border-radius:7px }
.foot button { background:var(--surface2);border:1px solid var(--line);color:var(--text); font:inherit;font-size:13px;padding:10px 14px;border-radius:7px;cursor:pointer }
.note { font-size:11.5px;color:var(--faint);margin-top:9px;line-height:1.55 }
.prov { font-size:8px;font-family:var(--mono);color:var(--cool);letter-spacing:-.2px; display:block;margin-top:2px;font-weight:600 }
.spark { height:44px;width:100%;display:block }
.dist { position:relative;height:34px;background:var(--surface2);border-radius:12px;margin:10px 0 6px }
.dist .q { position:absolute;top:0;bottom:0;background:var(--surface2) }
.dist .t { position:absolute;top:0;bottom:0;width:1px;background:var(--faint) }
.dist .me { position:absolute;top:-4px;bottom:-4px;width:2px;background:var(--accent) }
.dist .me::after { content:"이 차";position:absolute;top:-14px;left:50%;transform:translateX(-50%); font-size:9px;font-family:var(--mono);color:var(--accent);white-space:nowrap }
.distlab { display:flex;justify-content:space-between;font-size:9.5px;font-family:var(--mono); color:var(--faint) }
.unk { display:flex;flex-direction:column;gap:1px;background:var(--line);border-radius:7px; overflow:hidden;border:1px solid var(--line) }
.unk div { background:var(--surface2);padding:9px 12px;display:flex;align-items:center; font-size:12.5px;gap:9px }
.unk b { margin-left:auto;font-family:var(--mono);color:var(--accent) }
.unk .ok b { color:var(--good) }
.quad { display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line); border:1px solid var(--line);border-radius:7px;overflow:hidden;aspect-ratio:1;max-width:170px }
.quad div { background:var(--surface2);padding:8px;font-size:9.5px;color:var(--faint); display:flex;align-items:center;justify-content:center;text-align:center;line-height:1.35 }
.quad div.on { background:var(--surface2);color:var(--good);font-weight:700;font-size:11px }
.axes { display:flex;flex-wrap:wrap;gap:5px }
.axc { font-family:var(--mono);font-size:11px;padding:5px 9px;border-radius:12px; background:var(--surface2);border:1px solid var(--line);color:var(--dim);cursor:pointer }
.axc b { color:var(--text) }
.axc.full { border-color:var(--good);color:var(--good) }
.axc.zero { border-color:var(--bad);color:var(--bad) }
.axc.na { border-style:dashed;color:var(--faint) }
details>summary { cursor:pointer;font-family:var(--mono);font-size:11px;letter-spacing:1.3px; color:var(--faint);font-weight:700;list-style:none }
details>summary::-webkit-details-marker { display:none }
details>summary::after { content:" ▾";color:var(--accent) }
details[open]>summary::after { content:" ▴" }
details>div { margin-top:12px }
.tl { display:flex;gap:0;margin:4px 0 8px }
.tl span { flex:1;height:5px;background:var(--surface2) }
.tl span.d { background:var(--good) }
.tl span.u { background:var(--bad) }

@media (max-width:1080px) {
  .row{grid-template-columns:44px 104px 1fr;grid-template-areas:
       "gr bars head" "gr bars head" "cells cells cells";row-gap:10px}
  .row>.gr{grid-area:gr;align-self:start}
  .row>.barwrap{grid-area:bars;align-self:start}
  .row>.head{grid-area:head;display:flex;gap:10px}
  .row>.cellset{grid-area:cells;display:grid;grid-template-columns:repeat(5,1fr);
                gap:8px;border-top:1px solid var(--line);padding-top:9px}
  .price{text-align:left}
}
@media (max-width:560px) {
  .row{grid-template-columns:44px 1fr;grid-template-areas:"gr head" "bars bars" "cells cells"}
  .row>.barwrap{grid-area:bars}
  .bars,.barlab{width:100%}
  .row>.cellset{grid-template-columns:repeat(3,1fr)}
  .hbar{padding:9px 12px} main{padding:12px 12px 80px}
}

/* ══ 시안이 빠뜨린 것 — 개발측이 채운다 (작업기록 여쭐 것) ══
   ★ 시안의 .row 는 넓은 폭에서 9칸 그리드다
     (44px 104px 72px minmax(150px,1.6fr) repeat(4,…) 92px)
   ★ 그런데 자식은 다섯뿐이다 — gr · barwrap · desk · head · cellset.
     .desk 만 display:contents 라 사진이 3번 칸으로 풀린다.
   ★ .cellset 은 안 풀려서 **5칸(시세차·신차대비·옵션가·경과·가격)이
     한 칸에 세로로 쌓인다** (실측 08-21 스크린샷).
   ★ 시안에 넓은 폭 .cellset 규칙이 없다.  좁은 폭(1080·560)에만 있다
   ★ 그리드가 9칸을 요구하므로 여기서 푼다.  시안 값은 안 고쳤다 */
@media (min-width:1081px) {
  .row > .cellset { display:contents }
  /* ★★★ 08-29 (#122 뒤) — ★ 사진이 ★ **글자를 덮고 있었다.**
     ★ 시안이 ★ 넓은 폭에서 사진을 ★ 240px 로 키우는데 (아래 미디어 규칙)
       ★ ★ 그리드의 사진 칸은 ★ **72px** 그대로였다 —
       ★ ★ 168px 이 ★ 옆 칸(차명·트림·판정 다섯)을 ★ 덮었다.
     ★ 실측 — ★ `사고OK` 칩의 왼쪽이 ★ 사진 뒤로 들어가 안 보였다 (1100px).
     ★ ★ 사진을 줄이지 않는다 — ★ 시안 값이다.  ★ **칸을 사진에 맞춘다** */
  .row { grid-template-columns:44px 104px 240px minmax(150px,1.6fr)
         repeat(4,minmax(64px,.8fr)) 92px; }
}

/* ══ 등급 배지 8단계 + 제외 (개정 433) ══
   ★ 시안은 S · A · B 셋만 그렸다.  ★ C~G 와 「제외」가 없다 —
     개정 433 이 컷을 8단계로 내리고 관문 배제를 등급에서 뺐기 때문이다.
   ★ 시안의 .gr.B 를 본으로 삼아 같은 결로 이어 붙인다.  시안 값은 안 고쳤다 */
.gr.C { background:var(--surface2);color:var(--dim);border:1px solid var(--line) }
.gr.D { background:var(--surface2);color:var(--faint);border:1px solid var(--line) }
.gr.E { background:var(--surface2);color:var(--faint);border:1px solid var(--line) }
.gr.F { background:transparent;color:var(--faint);border:1px solid var(--line) }
.gr.G { background:transparent;color:var(--faint);border:1px dashed var(--line) }
.gr.NO_GRADE, .gr.NOT_RATED { background:transparent;color:var(--faint);
  border:1px dashed var(--line);font-size:12px }
/* ★ 제외는 등급이 아니다 — 점수 색을 안 쓴다.  테두리로만 구분한다 */
.gr.EXCLUDED { background:transparent;color:var(--faint);
  border:1px dashed var(--bad);font-size:12px }

/* ★ 비교 — 막대 넷과 총 구매비용을 나란히 (개정 427 · V11-166) */
.cmp-bars { width:100%; border-collapse:collapse; margin-bottom:12px }
.cmp-bars th, .cmp-bars td { padding:9px 10px; border-bottom:1px solid var(--line);
  vertical-align:top; text-align:left }
.cmp-bars th:first-child { color:var(--faint); font-weight:600; white-space:nowrap }

/* ★★ v3 시안이 새로 들인 이름 (명령서 22장 ⓐ — 시안이 모양의 정본이다).
   ★ 우리 CSS 에 ★ 같은 이름이 없어 ★ 부딪히지 않는다 —
   ★ 그래서 ⓐ 로 시안 값을 그대로 넣는다.  ★ 화면이 바뀌지 않는다 (없던 것이다) */
.head { display:flex; justify-content:space-between; align-items:center;
        margin-bottom:8px }
/* ★★★★ 08-29 — ★ 위 주석의 「같은 이름이 없어 부딪히지 않는다」는 ★ 틀렸다.
   ★ `.heart` 는 ★ 이미 위에 있었다 (하트 자리 고침 · UI_REVIEW 26-1).
   ★ 두 벌로 두면 ★ 머리띠가 21곳으로 갈라진 것과 ★ 같은 일이 난다 (S46-121).
   ★ 시안이 더한 것은 ★ `display:flex` 세 줄뿐이다 — ★ 위 규칙에 합쳤다.
   ★ ★ `z-index:5` 를 잃지 않는 것이 ★ 중요하다 — ★ 그것이 없으면
   ★ ★ 하트가 ★ 카드 뒤로 들어가 ★ 안 눌린다 (검사 `S46-118`) */

/* ★★ 08-25 — ★ 새 화면이 쓰는 이름 둘 (V11-59).
   ★ `.what`  — ★ 「이 화면은 무엇을 하는 곳인가」 상자 (명령서 1-5 · 시안 주황 상자)
   ★ `.filter-body` — ★ 접은 거르개의 속 (v3_listings_시안 다섯 절).
     ★★ ★ 시안이 `.mbody` 를 먼저 쓰고 있었다 — ★ 이름이 겹쳐 ★ 내 쪽을 바꿨다 (S46-67)
   ★ 값은 ★ 이미 있는 토큰만 쓴다 — ★ 새 색을 안 만든다 (V11-13) */
.cond.what { border-color:var(--amber); margin-bottom:14px }
.cond.what h2 { font-size:13px; color:var(--dim); margin:0 0 6px }
.cond.what p { margin:4px 0; font-size:12.5px; line-height:1.7 }
.filter-body { padding:0 14px 14px }
.filter-body h3 { font-size:12px; color:var(--dim); margin:12px 0 6px }
.filter-body h3:first-child { margin-top:0 }

/* ── v4m 관심 — ★★★ 모바일이 기준이다 (ref/screens/v4m_watch_시안.html · 마스터 확정 08-25)
   ★ 「넓어지면 카드가 「옆으로 펴진다」」.  ★ 카드를 옆으로 붙이지 않는다 —
     한 줄에 늘 하나.  넓어진 만큼 카드가 넓어진다
   ★★ 세 폭(≤639 · 640~1023 · 1024~)이 담는 정보는 똑같다 — 자리만 바뀐다.
     ★ 금지 — 좁다고 글자를 줄이거나 감추는 것 (display:none 을 쓰지 않는다)
   ★ 값은 :root 토큰만 쓴다 (L-3) — 시안의 --ok/--no 는 우리 --down/--up 이다 */
.kcards { display:block; }
.kcard { background:var(--surface); border-bottom:1px solid var(--line);
         padding:12px 14px; margin:0 -12px; }
.kchg { font-size:14px; font-weight:700; margin-bottom:6px; }
.kchg.dn { color:var(--down); }
.kchg.up { color:var(--up); }
.kchg.gone { color:var(--up); }
.kchg.same { color:var(--faint); font-weight:400; font-size:13px; }
.kcardline { display:block; }
.kline { display:flex; gap:10px; }
.kthumb { width:104px; height:78px; flex:0 0 104px; border-radius:8px;
          background:var(--surface2); border:1px solid var(--line);
          display:flex; align-items:center; justify-content:center;
          overflow:hidden; font-size:11px; color:var(--faint);
          text-decoration:none; }
.kthumb img { width:100%; height:100%; object-fit:cover; }
.kmid { flex:1; min-width:0; }
.kname { font-size:14px; font-weight:600; margin-top:2px; }
.kname a { color:var(--text); text-decoration:none; }
.ktrim { font-size:12px; color:var(--dim); margin-top:1px; }
.kspec { font-size:12px; color:var(--dim); margin-top:2px; }
.kspec.dn { color:var(--down); }
.kspec.up { color:var(--up); }
.kprice { font-size:16px; font-weight:700; margin-top:4px;
          font-family:var(--mono); }
.kwas { font-size:12px; color:var(--faint); text-decoration:line-through;
        font-weight:400; }
.ksince { font-size:11px; color:var(--faint); margin-top:6px; }
.kgr { display:inline-block; background:var(--amber); color:var(--ink4);
       font-weight:700; border-radius:12px; padding:0 6px; font-size:12px;
       margin-right:5px; }
.kax { font-size:11px; color:var(--faint); font-family:var(--mono);
       margin-bottom:3px; }
.kax b { color:var(--dim); font-weight:600; }
.kheart { color:var(--amber); float:right; }
.kj { display:flex; flex-wrap:wrap; gap:3px 8px; margin-top:5px;
      font-size:11px; color:var(--faint); }
.kj a { color:var(--faint); text-decoration:none; }
.kacts { display:flex; flex-wrap:wrap; gap:8px; margin-top:10px; }
/* ★ 단추는 44px 이상 · 한 줄에 둘까지 (시안 「지켜야 하는 것」) */
.kbtn { flex:1 1 calc(50% - 4px); min-height:44px; background:var(--surface2);
        border:1px solid var(--line2); border-radius:8px; color:var(--text);
        font-size:13px; font-family:inherit; display:flex;
        align-items:center; justify-content:center; text-decoration:none; }
.kbtn.go { background:var(--amber); border-color:var(--amber);
           color:var(--ink4); font-weight:600; }
.kform { flex:1 1 calc(50% - 4px); display:flex; gap:4px; }
.kform input[name=target_price_won] { flex:1; min-width:0; width:auto;
        min-height:44px; }
.kform .kbtn { flex:0 0 auto; padding:0 12px; }
/* ★★ 비교 네모 — ★ 사진 왼쪽 위에 얹는다 (마스터 확정 17 「비교→관심」 ·
   v4m 시안 08-26 `.v4-pick`).  ★ 하트와 마주 본다.
   ★ 짚는 자리는 44px 이다 — ★ 보이는 네모는 26px 이고 ★ 둘레가 손가락 몫이다 */
.kthumbwrap { position:relative; flex:0 0 auto; }
.kpick { position:absolute; top:0; left:0; width:44px; height:44px; z-index:2;
         display:flex; align-items:center; justify-content:center; cursor:pointer; }
.kpick input { position:absolute; opacity:0; width:44px; height:44px; margin:0;
               cursor:pointer; }
.kpick span { width:26px; height:26px; border-radius:6px; background:var(--ink);
              border:1px solid var(--line2); color:var(--faint); font-size:14px;
              display:flex; align-items:center; justify-content:center; }
.kpick input:checked + span { background:var(--amber); border-color:var(--amber);
              color:var(--ink4); font-weight:700; }
/* ★ 고른 것을 들고 나가는 띠.  ★ 아래 탭 위에 붙는다 */
.kcmp { position:sticky; bottom:64px; z-index:8; display:flex; gap:10px;
        align-items:center; padding:10px 14px; margin:0 -12px;
        background:var(--surface2); border-top:1px solid var(--amber); }
.kcmp .dim { flex:1; font-size:12px; }
.kcmp .kbtn { flex:0 0 130px; }

/* ★ 640 이상 — 사진을 키우고 · 판정을 한 줄로 · 단추를 오른쪽으로 */
@media (min-width:640px) {
  .kcard { padding:16px 0; margin:0; }
  .kthumb { width:180px; height:135px; flex:0 0 180px; }
  .kname { font-size:16px; }
  .kprice { font-size:19px; }
  .kj { flex-wrap:nowrap; }
  .kcardline { display:flex; gap:18px; align-items:stretch; }
  .kcardline .kline { flex:1; min-width:0; }
  .kacts { margin-top:0; flex:0 0 200px; flex-direction:column;
           justify-content:center; }
  .kbtn, .kform { flex:0 0 auto; }
}

/* ★ 1024 이상 — 사진을 더 키우고 · 곁말을 옆에 편다 */
@media (min-width:1024px) {
  .kcard { padding:18px 0; }
  .kthumb { width:240px; height:180px; flex:0 0 240px; }
  .kname { font-size:17px; }
  .ktrim, .kspec { font-size:13px; }
  .kprice { font-size:21px; }
  .kj { gap:4px 14px; font-size:12px; }
  .kax { font-size:12px; }
  .kacts { flex:0 0 240px; }
}

/* ★ 640 이상 — ★ 아래 탭이 없으므로 ★ 띠도 바닥에 붙는다 */
@media (min-width:640px) {
  .kcmp { bottom:0; margin:0; }
}

/* ★ 340 아래에서도 안 깨진다 — 사진만 줄인다.  ★ 글자는 그대로다 */
@media (max-width:359px) {
  .kthumb { width:88px; height:66px; flex:0 0 88px; }
  .kprice { font-size:15px; }
  .kbtn { font-size:12px; }
}

/* ── 상단 메뉴를 ★ 손가락 폭에서는 ★ 아래 탭으로 (v4m 시안 · 마스터 확정 08-25).
   ★ 「모바일이 기준이다」 — ★ 엄지는 화면 위쪽에 안 닿는다.
   ★★ 메뉴 글자를 안 지운다 — ★ 자리만 아래로 옮긴다 (「정보를 빼지 않는다」).
   ★ 다섯 칸이 폭을 나눠 갖는다 — ★ 상단 메뉴 다섯이 규격이다 (config/web.json) */
@media (max-width:639px) {
  .nav { position:fixed; bottom:0; left:0; right:0; z-index:10;
         background:var(--surface); border-top:1px solid var(--line2);
         border-bottom:0; gap:0; padding:0; flex-wrap:nowrap; }
  .nav-item { flex:1; text-align:center; padding:11px 2px 13px;
              font-size:11.5px; min-height:44px; }
  .nav-item em { display:block; font-size:10px; }
  /* ★ 탭이 마지막 카드를 가리지 않게 — 그만큼 아래를 비운다 */
  main { padding-bottom:72px; }
}

/* ── v4m 비교 · 미판정 (마스터 확정 08-26 · ref/screens/v4m_compare · v4m_notready)
   ★★ 「★ 좁으면 **줄로** · 넓어지면 **칸으로** 편다.  ★ 담는 것은 같다」
   ★ 한 줄이 매물 하나다 — ★ 좁으면 세로로 쌓이고 ★ 넓으면 나란히 선다 */
.vlist { display:grid; grid-template-columns:1fr; gap:1px; background:var(--line);
         border:1px solid var(--line); border-radius:7px; overflow:hidden;
         margin-bottom:10px; }
.vline { display:flex; gap:10px; align-items:baseline; justify-content:space-between;
         background:var(--surface2); padding:10px 12px; font-size:13px; }
.vline > span { min-width:0; }
/* ★ 줄이 통째로 문일 수 있다 (관리 메뉴) — ★ 손가락으로 짚는 자리가 넓어야 한다 */
a.vline { text-decoration:none; color:var(--text); min-height:44px; }
a.vline:hover { background:var(--surface); }
a.vline b { color:var(--amber); }
.vline b { font-family:var(--mono); white-space:nowrap; }
@media (min-width:640px) {
  /* ★ 넓어지면 칸으로 — ★ 견주는 것끼리 나란히 선다 */
  .vlist { grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); }
  .vline { display:block; }
  .vline b { display:block; margin-top:4px; font-size:16px; font-weight:700; }
}
/* ★ 미판정 「여쭐 것」 — ★ 맨 위에 크게 (v4m 시안의 주황 테두리 상자) */
.ask { border:1px solid var(--amber); border-radius:10px; padding:12px 14px;
       margin-bottom:12px; background:var(--surface); }
.ask .big { text-align:left; color:var(--amber); margin-bottom:6px; }

/* ── 매물 카드의 비교 네모 (마스터 확정 08-26 · v4m_listings_시안)
   ★ 가이드 — 「★ 매물 카드에도 비교 네모를 둬라」
   ★ `.desk` 가 `display:contents` 라 ★ 자리를 잡을 상자가 하나 있어야 한다 —
     그것이 `.kthumbwrap` 이다.  ★ 「N곳」 배지도 그 안에 든다
   ★★ 사진을 시안 크기(104×78)로 키운다 — ★ 72×54 에 44px 네모를 얹으면
     ★ 사진이 거의 안 보인다 (짚는 자리는 44px 여야 한다 · 마스터 확정) */
.car-rows .kthumbwrap .thumb { width:104px; height:78px; }
.car-rows .kthumbwrap .nsite { position:absolute; top:2px; right:2px; z-index:3;
                               font-size:10px; padding:1px 5px; }
@media (min-width:1081px) {
  /* ★ 넓은 폭은 그리드 칸이 104px 다 — 그대로 맞는다 */
  .car-rows .kthumbwrap { width:104px; }
}

/* ══════════════════════════════════════════════════════════════════
   ★★★★ v4m 시안 값 — ★ 명령서 82장 (마스터 08-28)
   ★★★ 마스터 — 「★ 내가 시안대로 ★ 디자인 위치를 모두 보정하라고 한 거잖아.
     ★ ★ 내용만 있으면 시안을 왜 만들어.  ★ UX 관점도 없고
     ★ ★ 메뉴가 위에 있다가 밑으로 가버리고」
   ★★★★ ★ 이름은 ★ **우리 것 그대로** 쓴다 — ★ 마스터 확정 ㉮(08-24)가
     ★ ★ 「시안 쪽에 `.v3-` 을 붙인다.  ★ 실제 `app.css` 는 안 건드린다」이고
     ★ ★ 검사 `S46-67` 이 ★ 시안 이름이 여기 들어오는 것을 막는다.
     ★ ★ 08-28 실측 — ★ 시안 CSS 를 그대로 들였더니 ★ 289곳이 겹쳐
       ★ ★ `S46-67`·`S46-68`·`S46-75` 가 터지고 시험 셋이 깨졌다.  ★ 되돌렸다.
   ★ 그래서 ★ **값만** 옮긴다 — ★ 크기·여백·색·자리를 시안에서 재서 적었다
   ══════════════════════════════════════════════════════════════════ */

/* ★ 목록 카드 — 시안 `.v4-card` (모바일: 좌우 14px · 위아래 12px) */
@media (max-width:639px) {
  .row { display:block; padding:12px 14px; margin-bottom:0;
         border-radius:0; border:0; border-bottom:1px solid var(--line); }
  /* ★ 사진 — 시안 `.v4-thumb` 104×78 (아주 좁으면 88×66) */
  .row .desk img, .row .desk .pimg { width:104px; height:78px; border-radius:8px; }
  /* ★ 등급 배지 — 시안 `.v4-gr` 는 작은 알약이다 (19px 큰 글씨가 아니다) */
  .gr { font-size:12px; font-weight:700; border-radius:12px; padding:0 6px;
        line-height:1.6; text-align:left; display:inline-block; }
  /* ★ 값 — 시안 `.pickprice` 16px/700 */
  .row .price b { font-size:16px; font-weight:700; }
  /* ★ 칸 글씨 — 시안 `.pickspec` 12px */
  .row .cell { font-size:12px; }
  /* ★ 단추 — 시안 `.v4-btn` 은 ★ 손가락이 닿게 44px 다 */
  .row .btn, .cellset .btn { min-height:44px; border-radius:8px; font-size:13px; }
}
@media (min-width:340px) and (max-width:479px) {
  .row .desk img, .row .desk .pimg { width:88px; height:66px; }
  .row .price b { font-size:15px; }
  .row .btn { font-size:12px; }
}
/* ★ 넓은 폭 — 시안은 사진이 180 → 240 으로 커진다 */
@media (min-width:640px) and (max-width:1023px) {
  .row .desk img, .row .desk .pimg { width:180px; height:135px; }
}
@media (min-width:1024px) {
  .row .desk img, .row .desk .pimg { width:240px; height:180px; }
}

/* ★ 거르개 상자 — 시안 `.v4-fil` : 아래 줄 하나 · 고르개는 40px 에 8px 둥글게 */
.chips { padding:8px 0; border-bottom:1px solid var(--line); }
@media (max-width:639px) {
  .chips select, .chips input { min-height:40px; border-radius:8px;
                                font-size:13px; padding:0 10px; }
}

/* ★ 절 상자 — 시안 `.v4-sec` · `.v4-kv` · `.v4-box` */
.vline { display:flex; justify-content:space-between; padding:5px 0;
         font-size:13px; border-bottom:1px solid var(--line); }
.vline:last-child { border-bottom:0; }
.cond.what { border:1px solid var(--amber); border-radius:10px;
             background:var(--surface); padding:11px 12px; }

/* ★★★★ 22-1 · 22-4 (개정 826) — ★ 홈의 「엔카 받기」.
   ★ 마스터는 휴대폰뿐이다 — ★ 손가락에 닿아야 한다.
   ★ 22-4 필수 — ★ 340~639 에서 ★ **44px 이상** · ★ 아래 탭(bottom:0)에 안 가리게 */
.getencar { margin:10px 0 14px; display:flex; flex-wrap:wrap; gap:10px;
            align-items:center; }
.getencar-btn { min-height:44px; display:inline-flex; align-items:center;
                padding:0 18px; font-size:15px; font-weight:700;
                border-radius:8px; white-space:nowrap; }
@media (max-width:639px) {
  .getencar { flex-direction:column; align-items:stretch; }
  /* ★ 한 손으로 누르시게 ★ 폭을 꽉 채운다 */
  .getencar-btn { width:100%; justify-content:center; min-height:48px; }
}

/* ★★★★ 22-1 — ★ `auto=1` 로 들어오면 ★ 「고르는 자리」를 안 보인다.
   ★ 지우는 것이 아니다 — ★ 주소에서 `auto=1` 을 빼면 ★ 그대로 다 보인다.
   ★ 진행과 결과는 ★ 그대로 낸다 — ★ 받은 것을 감추지 않는다 (STEP 136c 의 뜻) */
body.auto #saveform,
body.auto .auto-hide { display:none; }
body.auto #progress { font-size:15px; line-height:1.7; }

/* ★★★ 08-29 (마스터 3번) — ★ 팔린 것을 ★ 목록에 두고 ★ **흐리게** 낸다.
   ★ 지우지 않는다 — ★ 「얼마에 팔렸나」가 ★ 다음 판단의 재료다 (v281 답).
   ★ 정렬은 SQL 이 맨 뒤로 보낸다 (`ORDER_SOLD`).
   ★ 새 색을 안 만든다 — ★ 이미 있는 토큰만 쓴다 (V11-13) */
.row.sold { opacity:.55; }
.row.sold:hover { opacity:.8; }
.sold-tag { color:var(--faint); border-color:var(--line2); }

/* 「약 N시간 걸립니다」 — 누르기 전에 눈에 들어와야 한다 (UI_REVIEW 25-2) */
.run-hours { color:var(--accent) }


/* ══════════════════════════════════════════════════════════════════
   ★★★★★ 09-01 — ★ 추천 화면 (시안 `ref/screens/v4m_recommend_시안.html`)
   ★ 마스터 — 「★ 시안을 꼭 보라는데 왜 안 보고 네 마음대로 하지?」
   ★★ 값은 ★ **시안에서 재서 적었다** — ★ 시안 CSS 를 통째로 들이지 않는다
     (08-28 실측 — 그렇게 했다가 289곳이 겹쳐 검사 셋이 터졌다.  위 2425줄 참고)
   ★★★ 이름은 ★ **우리 것**(`pick*`)이다 — ★ 시안 이름(`rc-*`·`v4-*`)을 쓰면
     ★ ★ `S46-67`(시안 이름이 app.css 와 겹치면 안 된다)이 문다.
     ★ ★ 위 2425줄이 적어 둔 그대로다 — ★ **값만** 옮긴다
   ★ 색은 ★ **`:root` 토큰만** 쓴다 — ★ 값을 박으면 `V11-13`·`S46-123` 이 문다
   ★ 브라우저(playwright chromium)로 ★ 시안과 우리 화면을 나란히 열어 맞췄다 (09-01)
   ══════════════════════════════════════════════════════════════════ */

/* ★ 시안 `.picktabs` — 탭 셋.  ★ 눌린 것은 호박색 밑줄 */
.picktabs { display:flex; gap:0; border-bottom:1px solid var(--line);
           margin:0 0 0; }
.picktabs .btn { flex:1; text-align:center; padding:11px 0; font-size:13px;
                border:0; border-bottom:2px solid transparent;
                border-radius:0; background:none; }
.picktabs .btn.on { color:var(--amber); font-weight:600;
                   border-bottom-color:var(--amber); }

/* ★ 시안 `.pickhead` — 무엇으로 세우는지 두 줄 */
.pickhead { font-size:12px; line-height:1.6; }

/* ★ 시안 `.pickscore` — ★ 합이 카드 맨 위다 (13px/700 · 호박색) */
.pickscore { font-size:13px; font-weight:700; color:var(--amber);
            margin-bottom:6px; }
.pickgrade { font-size:11px; color:var(--faint); margin-left:6px;
            font-weight:400; }

/* ★★★★★ 09-01 — ★ `V11-94` 「추천 조건이 화면에 적혀 있음」이 부른 두 줄.
   ★ 시안에는 없다 — ★ 규격(개정 304)이 요구해 ★ **덧붙인** 것이다.
   ★ ★ 시안의 글자와 자리는 ★ 하나도 안 건드렸다 */
.pickwhyall { color:var(--dim); }

/* ★★★★★ 09-01 — ★ `V11-69` 로 되살린 조작들.
   ★ 시안의 자리와 크기는 ★ 안 건드렸다 — ★ 카드 안에 ★ 줄을 하나 더했을 뿐이다.
   ★ ★ 손가락 자리는 ★ 44px 이다 (`V11-76` · 모바일 대조 09-01) */
.pickorder { margin:8px 0 0; }
.pickcmp { font-size:11px; color:var(--dim); margin-right:6px; }
.pickcmp input { width:16px; height:16px; vertical-align:-2px; }
.pickfoot { display:flex; gap:8px; align-items:center; flex-wrap:wrap;
            margin-top:8px; }
.pickbuy { font-size:11px; color:var(--dim); }
.pickbuy b { color:var(--text); font-weight:600; }
.pickfoot .btn { min-height:44px; display:inline-flex; align-items:center; }
.cmpbar { margin:12px 0; }
.pickwhy { font-size:11px; color:var(--dim); margin-top:8px;
           letter-spacing:.02em; }

/* ★ 시안 `.pickaxes` · `.pickax` — ★ 네 축을 알약으로.  ★ 만점이면 호박색 */
.pickaxes { display:flex; gap:6px; flex-wrap:wrap; margin-top:6px; }
.pickax { font-size:11px; color:var(--dim);
         background:var(--surface2); border:1px solid var(--line);
         border-radius:4px; padding:2px 6px;
         font-family:ui-monospace,monospace; }
.pickax b { color:var(--text); font-weight:600; }
.pickax.hi, .pickax.hi b { color:var(--amber); }
.pickax.hi { border-color:var(--amber); }

/* ★ 시안 `.pickbar` — ★ 막대는 비율이다 (부록 G · A-3).  4px */
/* ★★★★★ 09-01 — ★ `.pbar` 를 ★ 함께 단다 (`V11-77`).
   ★ 위쪽 `.pbar` 는 ★ `display:flex` 라 ★ 시안 꼴이 깨진다 —
   ★ ★ 여기서 ★ **되돌린다** (`.pbar.pickbar` 가 ★ 더 좁아 이긴다) */
.pbar.pickbar { display:block; height:4px; background:var(--surface2);
          border:0; border-radius:2px; margin-top:6px; overflow:hidden; }
.pbar.pickbar i { display:block; height:100%; background:var(--amber); }

/* ★ 시안 `.pickempty` — 빈 탭 (탭 2·3) */
.pickempty { padding:60px 20px; text-align:center;
            color:var(--faint); font-size:13px; }

/* ★ 시안 `.pickrow` · `.pickmid` · `.v4-thumb` 104×78 · 이름·제원·값 */
.pickrow { display:flex; gap:10px; }
.pickmid { flex:1; min-width:0; }
.pickname { font-size:14px; font-weight:600; }
.pickspec { font-size:12px; color:var(--dim); margin-top:2px; }
.pickprice { font-size:16px; font-weight:700; margin-top:4px; }
.pickthumb { width:104px; height:78px; flex:0 0 104px; border-radius:8px;
            background:var(--surface2); border:1px solid var(--line);
            display:flex; align-items:center; justify-content:center;
            font-size:11px; color:var(--faint); overflow:hidden; }
.pickthumb img { width:100%; height:100%; object-fit:cover; }
/* ★ 시안 `.v4-cards` — 카드가 줄줄이 붙는다 (사이 여백 없음 · 아래 선으로 가른다) */
.pickcards { display:block; }
.pickcard { display:block; border-bottom:1px solid var(--line); }
@media (max-width:479px) {
  /* ★ 시안 — ★ 아주 좁으면 사진이 88×66 이다 (목록과 같은 결) */
  .pickthumb { width:88px; height:66px; flex:0 0 88px; }
  .pickprice { font-size:15px; }
}


/* ══════════════════════════════════════════════════════════════════
   ★★★★★ 09-01 — ★ **브라우저로 재서 고친 둘** (`tools/browser_diff.py`).
   ★ 마스터 지시 — 「★ 모바일용 태블릿용으로 나누어서 ★ 제대로 되는지 확인해」
   ══════════════════════════════════════════════════════════════════ */

/* ★ ① 누르는 자리는 ★ **44px** 이다 (`UI_REVIEW` · 시안 `.v4-btn`).
     ★ 실측 09-01 — ★ 상단 메뉴가 ★ **24px** 이었다 (여덟 화면 전부).
     ★ ★ 손가락이 닿는 크기가 아니다 — ★ 글씨는 그대로 두고 ★ 닿는 자리만 넓힌다 */
.brand, .nav-item, header button {
  display:inline-flex; align-items:center; min-height:44px;
}
/* ★ 카드 안의 이름·값 링크도 ★ 손가락이 닿아야 한다.
     ★ 실측 09-01 — ★ 추천 카드의 차종 이름이 ★ 20~42px 이었다.
     ★ ★ 글씨는 그대로 두고 ★ 닿는 자리만 넓힌다 (줄 높이로) */
.pickname a, .pickprice a { display:inline-block; min-height:44px;
  line-height:44px; }

/* ★ ② 넓은 표는 ★ **가로로만 스크롤한다** — ★ 쪽 전체가 밀리면 안 된다.
     ★ 실측 09-01 — ★ `/admin` 이 모바일에서 ★ 문서 폭 **584px** 였다 (뷰포트 390).
     ★ ★ 표 하나 때문에 ★ 쪽 전체가 옆으로 밀렸다 */
@media (max-width:639px) {
  main { max-width:100%; overflow-x:hidden; }
  main > table.rows,
  main > .tablewrap { display:block; max-width:100%; overflow-x:auto; }
}

/* ★★★★★ 09-02 — ★ **손가락이 닿는 자리는 44px 이다** (UI_REVIEW · 시안 `.v4-btn`).
   ★ 브라우저로 모바일(390×844)·태블릿(820×1180)을 대조해 찾았다 [실측 09-02] —
   ★ ★ 여덟 화면 전부에서 ★ 단추가 19~33px 이었다:
   ★ ★ ★ 「미판정 보기」33 · 「가기」**19** · 「함께 보기」19 · ♡ 28 · 「원문 ↗」31
   ★★ 눈에 보이는 크기는 ★ 안 바꾼다 — ★ 글자와 테두리는 그대로다.
     ★ ★ **닿는 자리만** 늘린다 (`min-height` ＋ 가운데 맞춤).
     ★ ★ ★ 그래야 ★ 시안의 촘촘함을 잃지 않으면서 ★ 손가락이 빗나가지 않는다 */
.btn,
button[type="submit"],
input[type="submit"] {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* ★ 표 안이나 곁말 속 작은 문 — 「가기」·「함께 보기」가 19px 이었다 */
td .btn.mini, .chips .btn, .sitebar .btn, .cellset .btn {
  min-height: 44px;
}

/* ★ 곁말 속 「가기」·「함께 보기」·「따로 보기」·「전부 지우기」 — ★ 이것들도 문이다 */
.note a, .dim a, .muted a, .cond a, nav a, footer a,
a.mini, a.clear, .sub a {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
}

/* ★★ 값 링크는 다르다 — 「A」「2,300km」「게시중」은 ★ **글 속의 값**이다
   ★ (`V11-61` 「값을 누르면 그 조건으로 걸러진다」).  ★ 44px 상자로 만들면
   ★ ★ 카드가 통째로 벌어져 ★ 시안이 깨진다.
   ★★ 그래서 ★ **보이는 크기는 그대로 두고 ★ 닿는 자리만 넓힌다** —
     ★ ★ 위아래로 패딩을 주고 ★ 같은 만큼 여백을 뺀다.  ★ 줄 높이가 안 변한다 */
/* ★★★★★ 09-02 정정 — ★ `p a` 가 ★ **단추까지 물었다**.
   ★ 실측 09-02 — ★ 알약 단추에 ★ `margin:-14px 0` 이 붙어
   ★ ★ 줄 높이가 ★ 51px 자식에 ★ **24px** 로 잡히고 ★ 다음 줄과 겹쳤다
   ★ ★ ★ (300·360·600·900px 전 폭 · 여섯 쌍).
   ★★ 값 링크만 물린다 — ★ 단추(`.btn`·`.mb`·`.nav-item`·`.heart`)는 뺀다 */
/* ★★★★★ 09-03 — ★ 배지(`.gr`) 안 글자는 ★ **뺀다.**
   ★ 값 링크에 준 ★ `padding:14px 0` 이 ★ 배지 글자까지 물어
   ★ ★ 「A」가 50px 이 되어 ★ 아래 「1위」와 겹쳤다 [실측 09-03] */
.row a:not(.btn):not(.heart):not(.mb):not(.gr *):not(.pickname *):not(.name *),
td a:not(.btn):not(.mb),
li a:not(.btn):not(.mb):not(.nav-item),
p a:not(.btn):not(.mb):not(.nav-item),
.notice a:not(.btn):not(.mb),
/* ★★★★★ 09-02 실측 — ★ `.pickname a` 를 ★ **뺐다.**
   ★ 앞 회차에 ★ `.pickname a { padding:0 }` 으로 막았다고 적었으나
   ★ ★ 이 줄이 ★ `:not(.btn)` 으로 ★ **더 세서** ★ 그 뒤에도 이겼다 —
   ★ ★ ★ 이름 상자가 위아래로 28px 커져 ★ 순위·제원 줄과 겹쳤다
   ★ ★ ★ (900px 진짜 겹침 3 — 「1 / 그랑 콜레오스」·「그랑 콜레오스 / (2년)」).
   ★★ 이름 줄은 ★ **글**이지 ★ 값 링크가 아니다 —
     ★ ★ 손가락 자리는 ★ 카드 전체가 받는다 (`data-href`).  ★ 안 잃는다 */
.pickspec a, .cellset a:not(.btn) {
  padding-top: 14px;
  padding-bottom: 14px;
  margin-top: -14px;
  margin-bottom: -14px;
}

/* ★ 「가기」가 ★ 43px 이었다 — ★ 한 픽셀이 모자랐다.  ★ 재서 맞춘다 */
a.mini, .note a, .dim a, .muted a { line-height: 1.5; }

/* ★ 좁은 폭에서 표가 화면을 넘겼다 — ★ 실측 09-02 (모바일 390).
   ★ 「좁으니 뺀다」가 아니라 ★ **「좁으니 그 표만 옆으로 민다」**다 (`V11-70`·`V11-71`).
   ★ ★ 몸통은 안 밀린다 — ★ 표 안에서만 민다 */
@media (max-width: 820px) {
  /* ★ `main` 밖의 표도 있다 — ★ 관심 화면이 그렇다 [실측 09-02].
     ★ ★ 자리를 가리지 않고 ★ **표라면 다 민다** */
  table { display: block; max-width: 100%; overflow-x: auto; }
}

/* ★ 쪽 번호 — ★ 29px 이었다 [실측 09-02].  ★ 목록에서 **가장 자주 누르는 자리**다.
   ★ 여기서 빗나가면 ★ 엉뚱한 쪽으로 간다 */
.page a { min-height: 44px; min-width: 44px;
          display: inline-flex; align-items: center; justify-content: center; }

/* ★★★★★ 09-02 — ★ 시안 `.rc-models` — ★ **차종 고르개**.
   ★ 시안 이름(`rc-models`·`mb`)은 못 쓴다 (`S46-67`) — ★ 값만 옮긴다.
   ★ 시안 — 알약 · 옆으로 밀린다 · 0 건은 흐리게 · 고른 것은 호박색 */
.pickmodels { display:flex; gap:6px; overflow-x:auto; padding:10px 0;
              flex-wrap:nowrap; -webkit-overflow-scrolling:touch; }
.pickmodels::-webkit-scrollbar { display:none; }
/* ★★★★★ 09-03 시험자 「칩 잘림 33/225 — 더 나빠졌다」 —
   ★ `white-space:nowrap` 이라 ★ 긴 차종 이름이 ★ **잘렸다**
   ★ ★ (「그랑 콜레오스 1.5 E-TECH」·「볼보 XC40 리차지 (전기)」).
   ★★ 명령서 ② — 「★ 단추 안 글자가 넘치면 ★ **두 줄로** ·
     ★ ★ `white-space:normal` · `word-break:keep-all` · ★ **…로 줄이지 마라**」
   ★ 차종이 32종이라 ★ 한 줄에 다 못 들어간다 — ★ 줄이 접히면 된다 */
.pickmodels .mb { flex:0 1 auto; font-size:12px;
                  white-space:normal; word-break:keep-all;
                  overflow-wrap:anywhere; max-width:100%;
                  border-radius:16px; padding:7px 12px; }
.pickmodels .mb b { font-weight:600; color:var(--text); font-size:11px; }
.pickmodels .mb.on { border-color:var(--amber); color:var(--amber); }
.pickmodels .mb.on b { color:var(--amber); }
/* ★ 0 건 — ★ 흐리게.  ★ **누를 수는 있다** (「없다」가 아니라 「지금 없다」) */
.pickmodels .mb.off { opacity:.45; }

/* ★★★★★ 09-02 마스터 지시 — ★ 시안 `.v4-tabs` 대로.
   ★ 「★ 시안 `v4m_recommend_시안.html` 에 맞추어서 빨리 작업해」
   ★★ 넓은 화면 — ★ 기호를 이름 앞에 둔다 (자리는 안 옮긴다) */
.nav-item b { font-weight: 400; margin-right: 4px; }

/* ★★ 좁은 화면 — ★ **시안 그대로 아래에 붙인다.**
   ★ 시안은 ★ 기호가 **위**, 이름이 **아래**, 여섯 칸이 ★ 화면을 나눠 갖는다.
   ★ ★ 손가락은 아래에 있다 — ★ 위쪽 메뉴는 엄지가 안 닿는다 */
@media (max-width: 820px) {
  .nav {
    position: fixed; bottom: 0; left: 0; right: 0;
    max-width: 1180px; margin: 0 auto;
    display: flex; flex-wrap: nowrap; gap: 0; padding: 0;
    background: var(--surface); border-top: 1px solid var(--line2);
    border-bottom: 0; z-index: 10;
  }
  .nav-item {
    flex: 1; text-align: center; padding: 9px 0 11px;
    font-size: 11px; min-height: 44px;
    display: flex; flex-direction: column; align-items: center;
    justify-content: center;
  }
  .nav-item b { display: block; font-size: 17px; line-height: 1.2;
                margin: 0; }
  /* ★ 아래 띠가 마지막 줄을 가리지 않게 ★ 자리를 비운다.
     ★★★★★ 09-02 실측 — ★ 300px 에서 ★ 띠가 **두 줄**이 되어 138px 이었다.
       ★ ★ 64px 로는 ★ **74px 이 가려졌다.**  ★ 넉넉히 둔다 */
  /* ★ `body.s-listings{padding:0}` 같은 규칙이 ★ 이것을 되돌린다 —
     ★ ★ 실측 09-02 — ★ `padding-bottom` 이 ★ **0px** 이었다.
     ★ ★ ★ 그래서 ★ `body[class]` 로 ★ 한 칸 더 좁게 쓴다 */
  body, body[class] { padding-bottom: 150px; }
}

/* ═══════════════════════════════════════════════════════════════════
   ★★★★★ 09-02 명령서 ①② — ★ 시안 `ref/screens/v4m_*.html` 그대로.
   ★ 마스터 — 「★ 전 화면을 시안에 맞게 · ★ 단추 겹침 0」
   ═══════════════════════════════════════════════════════════════════ */

/* ★★★★★ 09-02 (1부 1-2 · **7회차째**) — ★ 추천만 ★ **104×78 에 갇혀 있었다.**
   ★ 실측 09-02 — ★ 목록·추적은 ★ 360:104 · 900:180 · 1200:240 으로 커지는데
   ★ ★ 추천은 ★ 셋 다 ★ **104×78** 이었다.
   ★★ 까닭 — ★ 추천 카드는 ★ `<div class="desk pickthumb">` 다.
     ★ ★ 아래 `.row .desk`(클래스 둘)가 ★ 폭 규칙의 `.pickthumb`(클래스 하나)보다
     ★ ★ ★ **더 세서** ★ 104px 로 되돌렸다.
     ★ ★ ★ ★ 폭 규칙에 ★ `.row .desk` 를 함께 적어 ★ 같이 커지게 했다

   ★★★ ① 사진은 **float** 다.  ★ flex 가 아니다 (명령서 ①).
   ★ 까닭 — ★ flex 는 **칸을 나눈다**.  ★ 글이 사진 밑으로 안 흐른다.
   ★ ★ 실측 — 300px 에서 ★ **사진 밑 1,840px 이 비어 있었다**
   ★★ `clear:both` 를 꼭 붙인다 — ★ 없으면 다음 카드가 사진 옆으로 파고든다 */
.pickrow, .row .cardbody, .cardbody {
  display: block;
}
.pickrow::after, .cardbody::after {
  content: ''; display: block; clear: both;
}
.pickthumb, .row .desk, .thumb {
  float: left;
  width: 104px;
  height: 78px;
  margin: 0 10px 6px 0;
  flex: 0 0 auto;
}
.pickmid, .row .mid, .cardbody > div:not(.desk):not(.thumb) {
  min-width: 0;
}

/* ★★ ② 단추 — ★ 글자가 넘치면 **두 줄**로.  ★ 「…」로 줄이지 않는다 (명령서 ②) */
.btn, .nav-item, .mb, button, input[type="submit"] {
  white-space: normal;
  word-break: keep-all;
  overflow-wrap: anywhere;
  /* ★★★★★ 09-02 실측 — ★ `min-height` 만으로는 ★ **줄 높이가 안 큰다.**
     ★ 알약이 44px 인데 ★ 줄은 27.5px 로 잡혀 ★ 두 줄이 12px 씩 겹쳤다
     ★ ★ (600·900px · 여섯 쌍).  ★ `min-height` 는 ★ 칸 안에서만 늘린다.
     ★★ 그래서 ★ **속 높이 자체를 44 로 만든다** — ★ 여백과 줄간으로.
       ★ ★ 12.5px × 1.5 = 19 ＋ 위아래 12 ＋ 테두리 2 = ★ 45 */
  padding-top: 12px;
  padding-bottom: 12px;
  line-height: 1.5;
  min-height: 44px;
  box-sizing: border-box;
}

/* ★★ ② 단추 줄이 모자라면 ★ **두 줄로 접는다**.
   ★ ★ **가로 스크롤 금지** — ★ 밀어 보게 하면 ★ 뒤에 무엇이 있는지 모르신다 */
/* ★★★★★ 09-02 정정 — ★ `.chips` 를 통째로 물면 ★ **거르개 판을 감싼 `<form>`**
   ★ 까지 `flex` 가 되어 ★ 판이 눌리고 ★ 목록이 그 위로 올라탄다
   ★ ★ [실측 09-02 — 600·900px · 「덮은 것: MAIN.rows car-rows」].
   ★★ 알약 줄만 문다 — ★ `p`·`span` 만.  ★ 판을 감싼 것은 안 건드린다 */
.sitebar, p.chips, span.chips, .picktabs, .pickmodels, .pickorder,
/* ★ 시안 이름(`v4-*`)은 ★ app.css 에 쓰지 않는다 (`S46-67`) —
   ★ 우리 이름만 쓴다.  ★ 값만 시안에서 옮긴다 */
.cmpbar, .seg, .bar {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  overflow-x: visible;
  /* ★★★★★ 09-02 실측 — ★ 늘림(`stretch`)이면 ★ 칸 높이가 ★ **글줄 높이**로 잡히고
     ★ ★ `min-height:44px` 인 단추가 ★ 그 밖으로 **삐져나온다**.
     ★ ★ ★ 그래서 ★ 다음 줄과 ★ 겹쳤다 (300~900px 전 폭).
     ★★ 시안도 `.v4-row{align-items:flex-start}` 다 — ★ 그대로 간다 */
  align-items: flex-start;
  align-content: flex-start;
  height: auto;
}

/* ★★★ ① `listings` 카드 — ★ 시안 `v4m_listings_시안.html` 의 `.v4-card` 다.
   ★ 전에는 ★ **9칸 grid** 였다 — ★ 좁아지면 칸이 아래로 쌓여
   ★ ★ 실측 09-02 — 300px 에서 ★ **한 줄이 1,820px** 이 되고
   ★ ★ ★ 사진 밑이 통째로 비었다 (글이 옆 칸에 갇혀 안 흐른다).
   ★★ 시안대로 ★ **`display:block` ＋ 사진 `float:left`** 로 간다.
     ★ ★ 칸은 하나도 안 없앤다 (`V11-68` 「v1 이 낸 열이 v2 에도 있음」) —
     ★ ★ ★ 놓는 법만 바꾼다 (`V11-70` 「좁으니 다르게 놓는다」) */
main.car-rows .row {
  /* ★★★★★ 09-02 — ★ `flow-root` 는 ★ **띄운 사진을 제 안에 가둔다**.
     ★ `block` 이면 ★ 카드 밖으로 새어 ★ 다음 덩이와 겹친다
     ★ ★ (실측 09-02 — ★ 축 알약이 ★ 사이트 거르개 단추를 덮었다) */
  display: flow-root;
  grid-template-columns: none;
  padding: 12px 14px;
}
main.car-rows .row::after { content: ''; display: block; clear: both; }
main.car-rows .row .kthumbwrap,
main.car-rows .row .thumb {
  float: left; width: 104px; margin: 0 10px 6px 0;
}
main.car-rows .row .gr { float: left; margin: 0 8px 6px 0; min-width: 44px; }
main.car-rows .row .cellset {
  display: flex; flex-wrap: wrap; gap: 8px 14px; clear: both;
  padding-top: 8px;
}
/* ★ 카드 안의 알약 줄도 ★ 띄운 사진 밑에서 ★ **새 줄로 시작한다** */
main.car-rows .row .chips, main.car-rows .row .axis-chips { clear: both; }

/* ★★★★★ 09-02 — ★ `<details class="chip">` 는 ★ **알약이 아니라 판**이다.
   ★ `.chip` 은 ★ `display:inline-flex` 라 ★ 속이 옆으로만 늘어나
   ★ ★ 실측 09-02 — ★ 거르개 판이 ★ **화면을 넘치고** ★ 아래 줄 단추를 덮었다
   ★ ★ ★ (300·600px · 겹침 두 쌍 · 「넘치는 칸 DETAILS.chip」).
   ★★ `<details>` 일 때만 ★ 판으로 되돌린다 — ★ 진짜 알약은 안 건드린다 */
details.chip {
  display: block;
  width: 100%;
  max-width: 100%;
  padding: 0;
  border-radius: 9px;
  overflow: hidden;
}
details.chip > summary {
  display: block;
  padding: 10px 12px;
  min-height: 44px;
  cursor: pointer;
}
details.chip .filter-body { max-width: 100%; overflow-x: auto; }

/* ★★★★★ 09-02 — ★ 거르개를 감싼 `<form class="chips">` 는 ★ **판**이다.
   ★ `flex` 로 두면 ★ 접힌 `<details>` 와 알약 줄이 ★ 한 줄에 눌려
   ★ ★ 실측 09-02 — ★ 매물 목록(`main.car-rows`)이 ★ 그 위로 올라타
   ★ ★ ★ 사이트 단추를 ★ **덮었다** (600·900px · 여섯 쌍).
   ★★ 시안은 ★ 거르개가 ★ **한 판**이고 ★ 그 안에서 알약이 접힌다 */
form.chips { display: block; }
form.chips > * { max-width: 100%; }

/* ★★★★★ 09-02 — ★ 추적 카드의 사진 (시안 `v4m_track_시안` `.v4-thumb` · `S46-98`).
   ★ 사진은 ★ **float** 다 — ★ 글이 그 밑으로 흐른다 (명령서 ①) */
.thumb.ktrack {
  float: left; width: 104px; height: 78px; margin: 0 10px 6px 0;
  border-radius: 8px; background: var(--surface2);
  border: 1px solid var(--line); overflow: hidden;
  display: flex; align-items: center; justify-content: center;
  font-size: 11px; color: var(--faint);
}
.thumb.ktrack img { width: 100%; height: 100%; object-fit: cover; }
.kcardline { display: flow-root; }
.kcardline::after { content: ''; display: block; clear: both; }

/* ★★★★★ 09-02 마스터 확정 — ★ 판매지역 딱지 (`S46-225`).
   ★ 사이트 딱지 옆이다 — 「엔카 · 게시중 · ★ 강서구」 */
.tag.region { color: var(--dim); }

/* ★★★★★ 09-02 마스터 확정 — ★ 감점 까닭 (접었다 편다).
   ★ 「감점 -40 (렌트 이력 -22) ▾」 — ★ 누르면 다 펴진다 */
details.pen > summary { list-style: none; cursor: pointer; }
details.pen > summary::-webkit-details-marker { display: none; }
.penlist { margin: 6px 0 0; padding-left: 16px; font-size: 11px;
           color: var(--dim); }
.penlist b { color: var(--up); font-weight: 600; }

/* ★★★★★ 09-02 마스터 확정 — ★ 시안 `.v4-plate`·`.v4-vin` (추적).
   ★ 차량번호 ＋ VIN 딱지 — ★ 「VIN ○」는 ★ 차대번호로 짝지었다는 뜻이다 */
.kplate { font-size: 12px; color: var(--text); font-weight: 600;
          letter-spacing: .3px; margin-bottom: 2px; }
.kvin { font-size: 10px; font-weight: 400; color: var(--ok);
        border: 1px solid var(--line); border-radius: 3px;
        padding: 1px 4px; margin-left: 4px; }
.kvin.na { color: var(--faint); }

/* ★★★★★ 09-03 시험자 4회차 #121 — ★ **현황 하트가 안 눌린다** (x=346 · y=−4).
   ★ `.heart` 는 ★ `position:absolute` 다 — ★ 카드에서는 `.cardbody` 가 기준이다.
   ★ ★ 그런데 ★ 현황은 ★ **표**라 ★ 기준 상자가 없어 ★ 화면 밖(y=−4)으로 나갔다.
   ★ ★ ★ 표 안에서는 ★ **제자리에 둔다** — ★ 자리를 안 띄운다 */
td .heart, th .heart {
  position: static;
  width: 44px; height: 44px;
  margin: 0 auto;
}

/* ★★★★★ 09-03 시험자 #22 — ★ 카드에 ★ 점수를 겉으로 낸다 (툴팁에만 있었다) */
.gr .grscore { display: block; font-size: 9px; font-weight: 500;
               opacity: .7; margin-top: 2px; letter-spacing: -.02em; }

/* ★★★★★ 09-03 시험자 #60 (6회차째) — ★ 「★ 사진 크기 ★ **104×78 고정**」.
   ★ 시안(`v4m_listings_시안`)은 ★ **네 단**이다 [실측 09-03] —
   ★ ★ 359px 아래 88×66 · 기본 104×78 · ★ 640 이상 **180×135** ·
   ★ ★ ★ 1024 이상 **240×180**.
   ★ 우리는 ★ 128×86 하나에 ★ 1750px 에서만 160 이었다 — ★ 시안과 다르다.
   ★★ 시안 그대로 간다.  ★ 사진은 ★ `float` 라 ★ 글이 그 밑으로 흐른다 */
@media (max-width: 359px) {
  .thumb, .thumb-none, .pickthumb, .thumb.ktrack, .row .desk,
  main.car-rows .row .kthumbwrap, main.car-rows .row .thumb {
    width: 88px; height: 66px;
  }
}
@media (min-width: 640px) {
  .thumb, .thumb-none, .pickthumb, .thumb.ktrack, .row .desk,
  main.car-rows .row .kthumbwrap, main.car-rows .row .thumb {
    width: 180px; height: 135px;
  }
}
@media (min-width: 1024px) {
  .thumb, .thumb-none, .pickthumb, .thumb.ktrack, .row .desk,
  main.car-rows .row .kthumbwrap, main.car-rows .row .thumb {
    width: 240px; height: 180px;
  }
}

/* ★★★★★ 09-03 브라우저 실측 — ★ 넓은 폭에서 ★ **글자가 겹쳤다**.
   ★ ① 등급 배지 — 「A / 1위 / 637.5/910」 셋이 ★ 한 상자에 쌓이는데
   ★ ★ 상자 높이가 모자라 ★ 서로 물렸다.  ★ 줄을 세로로 세운다.
   ★ ② 추천 카드 — ★ 내가 넣은 「(2년)」·「(연 0.5만)」이 ★ 이름 줄과 물렸다.
   ★ ★ 제원 줄이 ★ 한 줄에 안 들어가면 ★ **접히게** 한다 (명령서 ②) */
.gr {
  display: flex; flex-direction: column; align-items: center;
  justify-content: center; gap: 1px; height: auto; min-height: 44px;
}
.gr small, .gr .grscore { position: static; }
/* ★★★★★ 09-03 실측 — ★ 등급 글자(`<a>`)가 ★ `min-height:44px` 를 받아
   ★ ★ **제 상자를 넘어** ★ 아래 「1위」와 겹쳤다 (888~935 vs 925~934).
   ★ ★ ★ 그 44px 은 ★ **손가락 자리**로 준 것이다 (`.btn` 계열) —
   ★ ★ ★ ★ 배지 안 글자에는 ★ 안 맞는다.  ★ 여기서 되돌린다.
   ★ 손가락 자리는 ★ 배지 **전체**(`.gr`)가 44px 로 받는다 — ★ 안 잃는다 */
.gr > a { min-height: 0; line-height: 1.15; display: block;
          padding: 0; margin: 0; }
.pickspec {
  display: block; white-space: normal; word-break: keep-all;
  overflow-wrap: anywhere; line-height: 1.6;
}
.pickname { white-space: normal; word-break: keep-all; }

/* ★★★★★ 09-03 — ★ 배지(`.gr`) 안 글자는 ★ 여백을 안 받는다.
   ★ 값 링크에 준 `padding:14px 0` 이 ★ 「A」를 50px 로 만들어
   ★ ★ 아래 「1위」와 겹쳤다 [실측 09-03].  ★ 손가락 자리는 ★ 배지 전체가 44px 로 받는다 */
.gr a { padding: 0; margin: 0; min-height: 0; line-height: 1.15; }

/* ★★★★★ 09-03 실측 — ★ 막대의 숫자(`<u>`)와 ★ 이름 줄(`.barlab`)이 겹쳤다
   ★ (「77 / 차량」·「70 / 값」).  ★ 막대는 ★ **104px 짜리 작은 그림**인데
   ★ ★ 사진을 240px 로 키우자 ★ 그 칸이 눌려 ★ 둘이 물렸다.
   ★★ 숫자는 ★ 막대 **안**에 둔다 — ★ 이름 줄과 자리를 안 다툰다 */
.bars .bar { position: relative; overflow: hidden; }
.bars .bar u { position: absolute; left: 0; right: 0; bottom: 1px;
               text-decoration: none; font-size: 8px; line-height: 1;
               text-align: center; }
.barlab { clear: both; }

/* ★★★★★ 09-03 실측 — ★ 추천 카드 이름(`.pickname a`)이
   ★ 값 링크 여백(`padding:14px`)을 받아 ★ **72px 상자**가 되어
   ★ ★ 아래 제원 줄(「(2년)」·「(연 0.5만)」)과 ★ 겹쳤다 (664~736 vs 724~743).
   ★★ 배지와 같은 자리다 — ★ 이름 줄은 ★ **글**이지 ★ 값 링크가 아니다.
   ★ 손가락 자리는 ★ 카드 전체가 받는다 (`data-href`) — ★ 안 잃는다 */
.pickname a { padding: 0; margin: 0; min-height: 0; line-height: 1.35; }

/* ★★★★★ 09-03 실측 — ★ 좁은 폭에서 ★ 추천 이름이 **두 줄**이 되면
   ★ 그 상자가 ★ 아래 제원 줄과 물린다.  ★ `inline-block` 이라 ★ 줄 높이를 안 민다.
   ★★ 이름 줄을 ★ **덩이**로 만든다 — ★ 두 줄이 되어도 ★ 아래를 밀어낸다 */
.pickname { display: block; }
/* ★★★★★ 09-02 실측 — ★ `display:block` 이 ★ **겹침의 뿌리**였다.
   ★ 덩이 상자는 ★ **폭을 다 먹는다** — ★ 앞에 선 ★ 순위(`1`)와
   ★ ★ 자리를 뜬 하트(`♡`, `position:absolute`) ★ 위로 올라앉는다
   ★ ★ (`browser_diff` 진짜 겹침 4 — 「1 / 그랑 콜레오스」·「♡ / 그랑 콜레오스」).
   ★★ `inline-block` 은 ★ **제 글자만큼만** 먹는다 —
     ★ ★ 두 줄이 되어도 ★ 아래를 밀어낸다 (그때 `block` 으로 바꾼 까닭을 지킨다) */
.pickname a { display: inline; }

/* ★★★★★ 09-03 — ★ 관심 화면의 고르개(`<label><input>`)가 ★ 화면을 넘쳤다.
   ★ 좁은 폭에서 ★ 이름이 안 접혀서다 (명령서 ② 「넘치면 두 줄로」) */
.rows label, main label { max-width: 100%; white-space: normal;
                          word-break: keep-all; }
main input[type="text"], main input[type="number"],
main input[type="search"] { max-width: 100%; box-sizing: border-box; }

/* ★ 순위 번호의 꾸밈은 ★ **아래 한 군데**에만 둔다 — ★ 여기 있던 `float:left` 판이
   ★ 아래 `display:inline` 판을 ★ **덮고 있었다** (앞이 뒤보다 셀 순 없으나
   ★ ★ `float` 이 `display` 를 덩이로 바꾼다 — ★ 실측 09-02 `display:block`).
   ★★ 같은 것을 두 군데 적으면 ★ 한 군데만 고치는 일이 생긴다 (`S14`) */

/* ★★★★★ 09-02 명령서 14 (`S46-243`) — ★ **비는 자리가 까닭을 낸다**.
   ★ 「우리가 못 쟀다」와 「그 매물에 없다」를 가른다.
   ★ 단추가 아니다 — ★ 글이다.  ★ 손가락 자리(44px)를 안 먹는다 */
.lst-why-empty, .rc-why-empty {
  display: inline-block; font-size: 11px; line-height: 1.4;
  padding: 0; margin: 0; min-height: 0;
}

/* ★★★★★ 09-02 명령서 11·14 (`V11-59`·`V11-60` · `S46-98`) —
   ★ 시안의 축 점수 줄.  ★ **시안 규칙을 그대로 옮긴다** — 손으로 새로 짓지 않는다.
   ★ 시안 `v4m_recommend_시안.html` — `.rc-axes{display:flex;gap:5px;
   ★ ★ flex-wrap:wrap;margin-top:5px}`.
   ★★ 목록의 `.lst-axes` 는 ★ 시안에 규칙이 없다 — ★ 같은 꼴로 맞춘다.
     ★ ★ `flex-wrap` 이라 ★ 좁은 폭에서 ★ **두 줄로 접힌다** (명령서 ②) */
/* ★★★★★ 09-02 (`S46-67` · 마스터 확정 ㉮) — ★ **`.rc-axes` 를 뺐다.**
   ★ 시안이 ★ 제 `<style>` 안에 ★ `.rc-axes` 를 갖고 있다 —
   ★ ★ 같은 이름을 `app.css` 에도 두면 ★ **이름이 겹친다**.
   ★ ★ ★ 추천 화면은 ★ 이미 `.pickaxes` 로 축을 내고 있었다 (내가 겹쳐 만들었다).
   ★★ 목록의 `.lst-axes` 만 남긴다 — ★ 시안에 꾸밈 규칙이 없어 겹치지 않는다 */
.lst-axes {
  display: flex; gap: 5px; flex-wrap: wrap; margin-top: 5px;
  font-size: 11px; color: var(--dim); line-height: 1.5;
}
.lst-axes b { color: var(--text); font-weight: 700; }
/* ★ 사이 점(`·`)을 ★ **틀에서 안 찍는다** — ★ 이 틀 엔진에 ★ `loop.first` 가 없다
   ★ (`V11-38` 이 「loop 를 아무도 안 넘긴다」로 잡았다 · 실측 09-02).
   ★★ `flex` 의 `gap` 이 ★ 그 일을 한다 — ★ 접혀도 점이 줄 끝에 안 남는다 */
.lst-axes .ax1 { white-space: nowrap; }

/* ★★★★★ 09-02 실측 — ★ 순위 번호를 ★ **띄우지 않는다**.
   ★ 처음엔 ★ `float:left` 로 뒀다 — ★ 추천에서 ★ **진짜 겹침 4**가 났다
   ★ (「1 / 그랑 콜레오스 1.5 E-」 · `tools/browser_diff.py` 300~900px).
   ★★ `.pickmid` 에 `overflow:hidden`(BFC)을 줘 봤더니 ★ 겹침은 4→3 이 됐으나
     ★ ★ **사진 밑 183px 이 비었다** — ★ 명령서 ① 이 막은 바로 그것이다.
     ★ ★ ★ 되돌렸다.  ★ 사진 띄우기를 깨는 고침은 고침이 아니다.
   ★ 시안(`v4m_recommend_시안.html:143`)은 ★ `<span>` 이다 — ★ 꾸밈 규칙이 없다.
     ★ ★ 곧 ★ **인라인**이다.  ★ 띄운 사진 **앞**에 ★ 글줄로 선다 */
/* ★★★★★ 09-02 실측 — ★ 순위를 ★ **이름 줄 안**으로 옮겼다.
   ★ 밖에 두면 ★ 띄운 것이든 덩이든 ★ 이름 상자가 그 위로 올라앉는다
   ★ ★ (`float` → 겹침 4 · `overflow:hidden` → 사진 밑 183px 빔).
   ★★ 흐름 안 인라인이면 ★ **겹칠 수가 없다** — ★ 같은 줄 상자에 선다 */
.lst-rank, .rc-rank {
  display: inline; margin-right: 6px;
  font-size: 12px; font-weight: 700; color: var(--faint);
}
.lst-rank.dim, .rc-rank.dim { font-weight: 400; }

/* ★★★★★ 09-02 실측 — ★ 하트는 ★ 카드 오른쪽 위에 ★ **자리를 뜬 채**(absolute)
   ★ 44×44 로 앉는다.  ★ 그래서 ★ **자리를 안 먹는다** —
   ★ ★ 이름이 그 밑으로 뻗어 ★ 겹쳤다 (「♡ / 그랑 콜레오스 1.5 E-」).
   ★★ 하트 몫을 ★ **비워 둔다**.  ★ 하트를 흐름에 넣으면 ★ 시안 자리가 틀어진다 */
.pickname, .row .name, .cardbody > .name { padding-right: 48px; }

/* ★★★★★ 09-02 (1부 1-4 · `RULES.md` 2) — ★ **빈 자리의 까닭**.
   ★ 「사진 없음」 자리에 ★ 한 줄이 들어간다 — ★ 넘치면 두 줄로 접는다 (명령서 ②).
   ★ 사진 자리와 ★ **같은 크기**여야 ★ 줄이 안 흔들린다 (`.thumb-none` 이 그 몫) */
.photo-why {
  display: flex; align-items: center; justify-content: center;
  padding: 4px; font-size: 10.5px; line-height: 1.35;
  text-align: center; white-space: normal; word-break: keep-all;
  color: var(--dim);
}
