/* 바이크 닥터 — 앱 시안 웹 클릭 목업 공용 스타일
 * 외부 폰트/이미지/CDN 없음. 순수 CSS.
 *
 * 2026-08-31 개정 — yellow flavor 디자인 언어 이식
 * 정본: android/app/src/yellow/ui/theme/Color.kt · Theme.kt · components/YellowUi.kt
 *   Paper #FFFFFF · Ink #172331 · Signal #F9CA12 · Cream #FDEDB9
 *   Muted #61666D · AccessibleAmber #765800 · Error #B3261E
 * 번안 규칙
 *   - 브리프 §3.0의 "다크 기본"은 그대로 둔다. yellow 팔레트는 다크 배경 위에서
 *     강조(Signal)·소프트 면(Cream 틴트)·CTA·배지로 옮긴다.
 *   - 시안별 정체성(배경·위험색)은 유지하고 강조색 체계만 Signal로 통일한다.
 *     덕분에 시안 C의 "강조=위험=레드" 충돌이 사라진다(강조 Signal / 위험 레드).
 *   - 라이트 변형이 있는 시안 C는 라이트에서 Paper/Cream/Ink를 그대로 쓴다.
 *   - Signal은 흰 배경 위 본문 대비가 1.6:1이라 라이트에서는 절대 글자색으로 쓰지 않는다.
 *     글자용 강조는 AccessibleAmber(#765800, 흰 배경 7.0:1)를 쓴다 → --accent-ink
 *   - 밀도 규약(YellowUi.kt): 카드 안쪽 12px(히어로 16px), 카드 사이 12px, 반경 20/28/999.
 */

/* ---------- 스테이지(브라우저 바깥 영역) ---------- */
:root{
  --stage-bg:#0B0D11;
  --stage-panel:#151920;
  --stage-line:#252B35;
  --stage-text:#E6EAF0;
  --stage-muted:#93A0B2;
  --signal:#F9CA12;
  --cream:#FDEDB9;
  --ink:#172331;
}
*{ box-sizing:border-box; }
html,body{ margin:0; padding:0; }
body{
  background:var(--stage-bg);
  color:var(--stage-text);
  font-family:-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Malgun Gothic","Noto Sans KR",sans-serif;
  -webkit-font-smoothing:antialiased;
  min-height:100vh;
}
a{ color:inherit; }

.stage-head{
  display:flex; align-items:center; gap:14px; flex-wrap:wrap;
  padding:18px 24px; border-bottom:1px solid var(--stage-line);
  background:linear-gradient(180deg,#12161D,#0B0D11);
  position:sticky; top:0; z-index:20;
}
.bd-mark{
  width:34px; height:34px; display:block; flex:none; object-fit:contain;
}
.stage-head h1{ font-size:16px; margin:0; font-weight:700; }
.stage-head .sub{ font-size:12.5px; color:var(--stage-muted); }
.stage-head .spacer{ flex:1; }
.stage-link{
  font-size:12.5px; color:var(--stage-muted); text-decoration:none;
  border:1px solid var(--stage-line); border-radius:999px; padding:7px 13px;
}
.stage-link:hover{ color:var(--stage-text); border-color:#3B4453; }

.stage{
  display:flex; gap:28px; align-items:flex-start; justify-content:center;
  padding:28px 24px 56px; flex-wrap:wrap;
}
.stage-note{ max-width:340px; font-size:13px; line-height:1.75; color:var(--stage-muted); }
.stage-note h2{ font-size:14px; color:var(--stage-text); margin:0 0 8px; }
.stage-note ul{ margin:6px 0 18px; padding-left:18px; }
.stage-note li{ margin-bottom:5px; }
.stage-note code{ background:#1C222C; padding:1px 5px; border-radius:5px; font-size:12px; }

/* ---------- 폰 프레임 옆 컨트롤 ---------- */
.frame-col{ display:flex; flex-direction:column; align-items:center; gap:12px; }
.side-controls{ display:flex; flex-direction:column; gap:10px; width:196px; }
.ctrl{
  appearance:none; border:1px solid var(--stage-line); background:var(--stage-panel);
  color:var(--stage-text); border-radius:14px; padding:12px 14px; font-size:13px;
  font-weight:600; cursor:pointer; text-align:left; line-height:1.4;
  font-family:inherit; min-height:48px;
}
.ctrl:hover{ border-color:#3B4453; }
.ctrl[aria-pressed="true"]{ background:var(--signal); border-color:var(--signal); color:var(--ink); }
.ctrl small{ display:block; font-weight:500; opacity:.72; font-size:11.5px; margin-top:2px; }
.ctrl-hint{ font-size:11.5px; color:var(--stage-muted); line-height:1.6; }

/* ---------- 폰 프레임 ---------- */
.device{
  padding:10px; border-radius:44px;
  background:linear-gradient(160deg,#2A303B,#12151B);
  box-shadow:0 24px 60px rgba(0,0,0,.55), inset 0 0 0 1px rgba(255,255,255,.06);
}
.device-label{ font-size:11.5px; color:var(--stage-muted); text-align:center; }

.phone{
  --fs:1;
  --fs-xs:calc(11px * var(--fs));
  --fs-sm:calc(12.5px * var(--fs));
  --fs-md:calc(14px * var(--fs));
  --fs-lg:calc(16px * var(--fs));
  --fs-xl:calc(20px * var(--fs));
  --fs-2xl:calc(26px * var(--fs));
  --fs-huge:calc(42px * var(--fs));

  width:360px; height:780px; border-radius:34px; overflow:hidden;
  position:relative; display:flex; flex-direction:column;
  background:var(--bg); color:var(--text);
  font-size:var(--fs-md); line-height:1.45;
}

/* 상태바 */
.statusbar{
  height:26px; flex:0 0 26px; display:flex; align-items:center; justify-content:space-between;
  padding:0 16px; font-size:calc(10.5px * var(--fs)); font-weight:600;
  color:var(--text); background:var(--bg); letter-spacing:.2px;
}
.statusbar .sb-right{ display:flex; align-items:center; gap:5px; }
.sig{ display:inline-flex; align-items:flex-end; gap:1.5px; height:9px; }
.sig i{ width:2.5px; background:currentColor; border-radius:1px; display:block; }
.sig i:nth-child(1){ height:3px; } .sig i:nth-child(2){ height:5px; }
.sig i:nth-child(3){ height:7px; } .sig i:nth-child(4){ height:9px; }
.batt{ width:20px; height:10px; border:1.4px solid currentColor; border-radius:3px; position:relative; display:inline-block; }
.batt::after{ content:''; position:absolute; right:-3.5px; top:2.5px; width:2px; height:4px; background:currentColor; border-radius:0 1px 1px 0; }
.batt i{ position:absolute; left:1.5px; top:1.5px; bottom:1.5px; width:64%; background:currentColor; border-radius:1px; display:block; }

/* 화면 영역 */
.viewport{ flex:1; overflow-y:auto; overflow-x:hidden; scrollbar-width:thin; }
.viewport::-webkit-scrollbar{ width:5px; }
.viewport::-webkit-scrollbar-thumb{ background:rgba(140,150,170,.35); border-radius:3px; }
.screen{ display:none; padding:12px 14px 22px; }
.screen.on{ display:block; animation:fade .18s ease-out; }
@keyframes fade{ from{ opacity:0; transform:translateY(4px);} to{ opacity:1; transform:none;} }

/* 하단 네비 */
.navbar{
  flex:0 0 auto; display:grid; grid-template-columns:repeat(4,1fr);
  background:var(--surface); border-top:1px solid var(--line);
}
.navbtn{
  appearance:none; border:0; background:transparent; cursor:pointer; font-family:inherit;
  min-height:58px; padding:8px 4px; display:flex; flex-direction:column; align-items:center;
  justify-content:center; gap:3px; color:var(--muted); font-size:var(--fs-xs); font-weight:600;
  word-break:keep-all; line-height:1.2; text-align:center;
}
.navbtn .ico{ width:20px; height:20px; display:block; }
.navbtn .ico svg{ width:100%; height:100%; display:block; }
.navbtn[aria-selected="true"]{ color:var(--accent-ink); font-weight:800; }
.navbtn[aria-selected="true"] .ico{ filter:drop-shadow(0 0 6px color-mix(in srgb, var(--accent) 45%, transparent)); }

/* 제스처 바 */
.gesture{ flex:0 0 18px; display:grid; place-items:center; background:var(--surface); }
.gesture i{ width:118px; height:4px; border-radius:2px; background:var(--muted); opacity:.6; display:block; }

/* ---------- 200% 글꼴 모드 ---------- */
.phone.big{ --fs:2; }
/* 2열 버튼/그리드가 1열로 접힌다 */
.phone.big .grid-2,
.phone.big .grid-3,
.phone.big .grid-4,
.phone.big .presets,
.phone.big .badgegrid{ grid-template-columns:1fr; }
/* 하단 네비는 4열 → 2열 2행. 라벨이 잘리지 않는다 */
.phone.big .navbar{ grid-template-columns:repeat(2,1fr); }
.phone.big .navbtn{ flex-direction:row; gap:8px; min-height:56px; }
.phone.big .navbtn .ico{ width:24px; height:24px; flex:0 0 24px; }
.phone.big .strip{ grid-template-columns:1fr; }
/* 좁은 폭에서 라벨이 잘리지 않도록 한 줄 배치를 풀어 준다 */
.phone.big .row.between{ flex-wrap:wrap; }
.phone.big .vhead{ flex-direction:column; align-items:flex-start; }
.phone.big .vhead-right{ text-align:left !important; }
.phone.big .kv{ flex-direction:column; align-items:flex-start; gap:2px; }
.phone.big .kv .v{ text-align:left; }
.phone.big .chiprow{ flex-wrap:wrap; }
.phone.big .carousel-dots{ display:none; }
.phone.big .monthnav{ flex-wrap:wrap; }
.phone.big .monthnav .mn-btn{ flex:1 0 100%; }
.phone.big .monthnav .mn-label{ order:-1; flex:1 0 100%; text-align:left; }
.phone.big .sharebar{ height:22px; }
.phone.big .legend li{ flex-wrap:wrap; }
.phone.big .barchart{ height:150px; }
.phone.big .topbar{ flex-wrap:wrap; }

/* ---------- 공용 컴포넌트 ---------- */
.sec{ margin-bottom:16px; }
.sec-head{ display:flex; align-items:center; justify-content:space-between; gap:8px; margin:0 2px 8px; }
/* yellow의 YellowSectionTitle — 굵고 짧게, 본문보다 한 단 작게 */
.sec-title{ font-size:var(--fs-sm); font-weight:800; color:var(--muted); letter-spacing:.3px; }
/* 링크형 버튼도 터치 타깃은 48dp를 지킨다. 헤더 높이가 불어나지 않게 음수 마진으로 되돌린다. */
.sec-more{ font-size:var(--fs-sm); color:var(--accent-ink); font-weight:800; background:none; border:0;
  cursor:pointer; font-family:inherit; min-height:48px; padding:0 6px; margin:-12px -6px -12px 0;
  display:inline-flex; align-items:center; }

/* yellow 카드 규약: 반경 large(20px 상당) · 안쪽 12px · 카드 사이 12px */
.card{
  background:var(--surface); border:1px solid var(--line); border-radius:20px;
  padding:12px; margin-bottom:12px;
}
.card.tap{ cursor:pointer; }
.card.flat{ padding:12px; }
/* 히어로(큰 수치) 카드만 16px */
.card.hero{ padding:16px; border-radius:24px; }
/* Signal 테두리 — yellow flavor의 YellowOutlinedCard */
.card.signal{ border-color:var(--accent); }
/* Cream 카드 — 규칙·근거 설명용. 다크에서는 Signal 틴트 면 + Cream 글자 */
.card.cream{ background:var(--soft); border-color:var(--accent); color:var(--cream-ink); }
.card.cream .muted{ color:var(--cream-dim); }

/* yellow 표시 서체 역할(BM Jua) 번안 — 굵고 자간을 좁혀 표제로 읽히게 한다 */
.disp{ font-weight:800; letter-spacing:-.4px; line-height:1.25; }
.muted{ color:var(--muted); }
.small{ font-size:var(--fs-sm); }
.xs{ font-size:var(--fs-xs); }
/* Gmarket Bold 수치 역할 번안 — 자릿수 폭 고정 */
.num{ font-variant-numeric:tabular-nums; font-weight:800; }
.big-num{ font-size:var(--fs-huge); font-weight:800; letter-spacing:-1.5px; line-height:1.05; font-variant-numeric:tabular-nums; }
.strong{ font-weight:700; }
.row{ display:flex; align-items:center; gap:10px; }
.row.between{ justify-content:space-between; }
.wrap{ flex-wrap:wrap; }
.grid-2{ display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.grid-3{ display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
.grid-4{ display:grid; grid-template-columns:repeat(2,1fr); gap:8px; }
.mt{ margin-top:10px; } .mt-s{ margin-top:6px; } .mb{ margin-bottom:10px; }

/* 버튼 — 최소 타깃 48dp, 주요 CTA 56dp. yellow는 extraLarge(40dp) 반경 */
.btn{
  appearance:none; font-family:inherit; cursor:pointer; width:100%;
  min-height:48px; border-radius:18px; border:1px solid var(--line);
  background:var(--surface2); color:var(--text);
  font-size:var(--fs-md); font-weight:800; padding:10px 14px;
  display:flex; align-items:center; justify-content:center; gap:8px;
  word-break:keep-all; text-align:center; line-height:1.3;
}
.btn.cta{ min-height:56px; font-size:var(--fs-lg); border-radius:999px; }
.btn.primary{ background:var(--accent); border-color:var(--accent); color:var(--on-accent); }
.btn.danger{ background:var(--danger); border-color:var(--danger); color:var(--on-danger); }
.btn.ghost{ background:transparent; }
.btn:active{ transform:translateY(1px); }
.btn:disabled{ opacity:.45; cursor:default; }

.chiprow{ display:flex; gap:7px; margin-bottom:12px; }
.chip{
  appearance:none; font-family:inherit; cursor:pointer;
  min-height:48px; padding:8px 14px; border-radius:999px;
  border:1px solid var(--line); background:transparent; color:var(--muted);
  font-size:var(--fs-sm); font-weight:800; white-space:nowrap;
}
.chip[aria-pressed="true"]{ background:var(--accent); border-color:var(--accent); color:var(--on-accent); }

.badge{
  display:inline-flex; align-items:center; gap:4px; border-radius:999px;
  padding:4px 10px; font-size:var(--fs-xs); font-weight:800; white-space:nowrap;
  border:1px solid transparent; line-height:1.35;
}
.badge.over{ background:color-mix(in srgb, var(--danger) 18%, transparent); color:var(--danger-ink); border-color:color-mix(in srgb, var(--danger) 45%, transparent); }
.badge.soon{ background:color-mix(in srgb, var(--accent) 20%, transparent); color:var(--accent-ink); border-color:var(--accent); }
.badge.ok{ background:color-mix(in srgb, var(--safe) 16%, transparent); color:var(--safe-ink); border-color:color-mix(in srgb, var(--safe) 40%, transparent); }
.badge.info{ background:color-mix(in srgb, var(--info) 16%, transparent); color:var(--info); border-color:color-mix(in srgb, var(--info) 42%, transparent); }
.badge.neutral{ background:var(--surface2); color:var(--muted); border-color:var(--hair); }
/* 채운 Signal 배지 — 달성/강조 */
.badge.signal{ background:var(--accent); color:var(--on-accent); border-color:var(--accent); }
/* 고객 입력 vs 센터 확인 — 대비를 뚜렷하게 */
.badge.center{ background:var(--safe); color:var(--on-safe); border-color:var(--safe); }
.badge.user{ background:transparent; color:var(--muted); border-color:var(--muted); border-style:dashed; }

.gauge{ height:10px; border-radius:999px; background:var(--surface2); overflow:hidden; }
.gauge i{ display:block; height:100%; border-radius:999px; background:var(--accent); }
.gauge.over i{ background:var(--danger); }
.gauge.ok i{ background:var(--safe); }

.strip{ display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
.strip .cell{
  background:var(--surface); border:1px solid var(--line); border-radius:18px;
  padding:10px 9px; text-align:center;
}
.strip .cell .lbl{ font-size:var(--fs-xs); color:var(--muted); font-weight:800; }
.strip .cell .val{ font-size:var(--fs-lg); font-weight:800; margin-top:3px; font-variant-numeric:tabular-nums; }
.strip .cell.soon{ border-color:var(--accent); }
.strip .cell.soon .val{ color:var(--accent-ink); }
.strip .cell.over{ border-color:var(--danger); }
.strip .cell.over .val{ color:var(--danger-ink); }

.listitem{
  display:flex; gap:11px; align-items:flex-start; padding:11px 0;
  border-bottom:1px solid var(--hair);
}
.listitem:last-child{ border-bottom:0; }
.listitem .body{ flex:1; min-width:0; }
.listitem .ttl{ font-size:var(--fs-md); font-weight:700; }
.dot{ width:9px; height:9px; border-radius:50%; margin-top:6px; flex:0 0 9px; background:var(--muted); }
.dot.over{ background:var(--danger); } .dot.soon{ background:var(--accent); } .dot.ok{ background:var(--safe); }

.kv{ display:flex; justify-content:space-between; gap:10px; padding:7px 0; font-size:var(--fs-sm); }
.kv + .kv{ border-top:1px solid var(--hair); }
.kv .k{ color:var(--muted); }
.kv .v{ font-weight:700; text-align:right; font-variant-numeric:tabular-nums; }
.kv.hi .v{ color:var(--accent-ink); font-weight:800; }

/* 펼침(AnimatedVisibility 흉내) */
.expand{ display:grid; grid-template-rows:0fr; transition:grid-template-rows .26s ease; }
.expand > div{ overflow:hidden; min-height:0; }
.expand.open{ grid-template-rows:1fr; }
.caret{ transition:transform .26s ease; display:inline-block; }
.caret.open{ transform:rotate(180deg); }

/* 상세 화면 상단 바 (탭에 없는 하위 화면용) */
.topbar{ display:flex; align-items:center; gap:10px; margin:0 0 12px; }
.topbar .back{
  appearance:none; font-family:inherit; cursor:pointer; flex:0 0 48px;
  width:48px; height:48px; border-radius:16px; border:1px solid var(--line);
  background:var(--surface); color:var(--text); display:grid; place-items:center;
  font-size:var(--fs-lg); font-weight:800;
}
.topbar h2{ margin:0; font-size:var(--fs-xl); font-weight:800; letter-spacing:-.4px; }
.topbar .sub{ font-size:var(--fs-xs); color:var(--muted); font-weight:600; }

/* 월 이동 (월간 수익 요약) */
.monthnav{ display:flex; align-items:center; gap:8px; margin-bottom:12px; }
.monthnav .mn-btn{
  appearance:none; font-family:inherit; cursor:pointer;
  min-width:48px; min-height:48px; border-radius:16px; border:1px solid var(--line);
  background:var(--surface); color:var(--text); font-size:var(--fs-lg); font-weight:800;
}
.monthnav .mn-btn:disabled{ opacity:.35; cursor:default; }
.monthnav .mn-label{ flex:1; text-align:center; font-size:var(--fs-lg); font-weight:800; letter-spacing:-.3px; }

/* 목표 프리셋 */
.presets{ display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
.preset{
  appearance:none; font-family:inherit; cursor:pointer;
  min-height:48px; border-radius:16px; border:1px solid var(--line);
  background:var(--surface2); color:var(--text); font-size:var(--fs-sm); font-weight:800;
  font-variant-numeric:tabular-nums; padding:8px 4px; word-break:keep-all;
}
.preset[aria-pressed="true"]{ background:var(--accent); border-color:var(--accent); color:var(--on-accent); }

/* 일별 수익 막대 + 목표 기준선 (YellowDailyGoalBarChart 번안) */
.barchart{ position:relative; height:112px; }
.barchart .bars{ display:flex; align-items:flex-end; gap:4px; height:100%; }
.barchart.dense .bars{ gap:2px; }
.barchart.dense .bar b{ border-radius:3px 3px 1px 1px; }
.barchart .bar{ flex:1; display:flex; flex-direction:column; justify-content:flex-end; height:100%; }
.barchart .bar b{ display:block; width:100%; border-radius:6px 6px 3px 3px; min-height:2px; }
/* 넘긴 날 = Signal 채움, 못 넘긴 날 = 회색 채움 */
.barchart .bar b.hit{ background:var(--accent); }
.barchart .bar b.miss{ background:var(--surface2); border:1px solid var(--hair); }
/* 기록 없는 날은 점선 외곽선만 — 높이 0이나 회색 채움은 "0원 벌었다"로 읽힌다 */
.barchart .bar b.none{ background:transparent; border:1px dashed var(--muted); opacity:.55; }
.barchart .goalline{
  position:absolute; left:0; right:0; height:0;
  border-top:2px dashed var(--accent); pointer-events:none;
}
.barchart .goaltag{
  position:absolute; right:0; transform:translateY(-100%);
  font-size:var(--fs-xs); font-weight:800; color:var(--accent-ink);
  background:var(--surface); padding:0 4px; border-radius:6px;
}
.barlabels{ display:flex; gap:4px; margin-top:6px; }
.barlabels span{ flex:1; text-align:center; font-size:var(--fs-xs); color:var(--muted); font-weight:700; }
.barlegend{ display:flex; gap:12px; flex-wrap:wrap; margin-top:10px; font-size:var(--fs-xs); color:var(--muted); font-weight:700; }
.barlegend i{ width:12px; height:12px; border-radius:4px; display:inline-block; vertical-align:-2px; margin-right:5px; }

/* 100% 가로 스택바 (YellowShareBar 번안 — 파이 대신 스택바) */
.sharebar{ display:flex; height:16px; border-radius:999px; overflow:hidden; border:1px solid var(--hair); }
.sharebar i{ display:block; height:100%; }
.legend{ list-style:none; margin:10px 0 0; padding:0; }
.legend li{ display:flex; align-items:center; gap:8px; padding:7px 0; font-size:var(--fs-sm); }
.legend li + li{ border-top:1px solid var(--hair); }
.legend .sw{ width:12px; height:12px; border-radius:4px; flex:0 0 12px; }
.legend .nm{ flex:1; min-width:0; }
.legend .amt{ font-weight:800; font-variant-numeric:tabular-nums; }
.legend .pct{ color:var(--muted); font-weight:700; font-variant-numeric:tabular-nums; min-width:44px; text-align:right; }

/* 배지 (RiderBadges 번안) */
.badgegrid{ display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.badgeitem{
  border:1px solid var(--line); border-radius:16px; padding:10px;
  background:var(--surface); text-align:left;
}
.badgeitem.earned{ border-color:var(--accent); background:var(--soft); }
.badgeitem .bk{ font-size:var(--fs-xs); font-weight:800; color:var(--muted); }
.badgeitem.earned .bk{ color:var(--accent-ink); }
.badgeitem .bl{ font-size:var(--fs-md); font-weight:800; margin-top:3px; letter-spacing:-.2px; }
.badgeitem .be{ font-size:var(--fs-xs); color:var(--muted); margin-top:4px; line-height:1.5; }
.badgeitem.locked{ opacity:.62; }

/* 사진 자리 (원격 이미지 금지 → CSS 그라디언트 플레이스홀더) */
.photo{
  border-radius:16px; position:relative; overflow:hidden;
  background:
    radial-gradient(120% 90% at 22% 12%, hsl(var(--hue) 60% 42% / .85), transparent 62%),
    linear-gradient(150deg, #2B3340, #171C24);
  display:grid; place-items:center;
}
.photo::after{
  content:''; position:absolute; inset:auto -22% -46% -22%; height:76%;
  background:linear-gradient(0deg, rgba(0,0,0,.42), transparent);
}
.photo .plate{
  position:relative; z-index:1; font-size:var(--fs-sm); font-weight:800; letter-spacing:.4px;
  background:rgba(0,0,0,.42); padding:5px 11px; border-radius:8px; backdrop-filter:blur(2px);
  color:#FFFFFF;
}

/* 토스트 */
.toast{
  position:absolute; left:16px; right:16px; bottom:88px; z-index:30;
  background:var(--toast-bg); color:var(--toast-fg); border-radius:16px;
  padding:13px 15px; font-size:var(--fs-sm); font-weight:800; line-height:1.4;
  opacity:0; transform:translateY(10px); transition:opacity .2s ease, transform .2s ease;
  pointer-events:none; box-shadow:0 10px 30px rgba(0,0,0,.5);
}
.toast.on{ opacity:1; transform:none; }

/* 캐러셀 (시안 C) */
.carousel{ overflow:hidden; margin:0 -14px 12px; padding:0 14px; touch-action:pan-y; }
.track{ display:flex; gap:12px; transition:transform .3s cubic-bezier(.22,.8,.3,1); will-change:transform; }
.vcard{ flex:0 0 306px; background:var(--surface); border:1px solid var(--line); border-radius:24px; padding:12px; user-select:none; }
.vcard.on{ border-color:var(--accent); }
.carousel-dots{ display:flex; gap:6px; justify-content:center; margin:-4px 0 12px; }
.carousel-dots i{ width:7px; height:7px; border-radius:50%; background:var(--hair); display:block; }
.carousel-dots i.on{ background:var(--accent); width:20px; border-radius:4px; }

/* ---------- 시안별 팔레트 ----------
 * 배경·위험색은 브리프 §3.1~3.3의 시안 정체성을 유지하고,
 * 강조 체계(accent / soft / cream)만 yellow flavor의 Signal·Cream으로 통일한다.
 */
.phone[data-variant="a"]{
  --bg:#0E1116; --surface:#171C24; --surface2:#212936; --line:#2A3341; --hair:#242C38;
  --text:#E6EAF0; --muted:#9AA6B8;
  --accent:#F9CA12; --on-accent:#172331; --accent-ink:#F9CA12;
  --soft:#241F14; --cream-ink:#FDEDB9; --cream-dim:#C9BC8E;
  --danger:#FF5A5F; --danger-ink:#FF8B8E; --on-danger:#0E1116;
  --safe:#3DDC84; --safe-ink:#3DDC84; --on-safe:#0E1116; --info:#7FB2FF;
  --toast-bg:#FDEDB9; --toast-fg:#172331;
}
.phone[data-variant="b"]{
  --bg:#08090B; --surface:#14161A; --surface2:#1E2228; --line:#2A2E36; --hair:#22262D;
  --text:#F2F4F7; --muted:#8B95A5;
  --accent:#F9CA12; --on-accent:#172331; --accent-ink:#F9CA12;
  --soft:#211D12; --cream-ink:#FDEDB9; --cream-dim:#C4B98F;
  --danger:#FF4D4D; --danger-ink:#FF8080; --on-danger:#08090B;
  --safe:#5BD98A; --safe-ink:#5BD98A; --on-safe:#08090B; --info:#4DA3FF;
  --toast-bg:#FDEDB9; --toast-fg:#172331;
}
.phone[data-variant="c"]{
  --bg:#101214; --surface:#1A1E22; --surface2:#262B31; --line:#2F353D; --hair:#282D34;
  --text:#F2F3F5; --muted:#9BA3AE;
  --accent:#F9CA12; --on-accent:#172331; --accent-ink:#F9CA12;
  --soft:#241F13; --cream-ink:#FDEDB9; --cream-dim:#C6BA8E;
  --danger:#E23D28; --danger-ink:#F2836F; --on-danger:#FFFFFF;
  --safe:#2E9E5B; --safe-ink:#4FC77F; --on-safe:#FFFFFF; --info:#5B9DF5;
  --toast-bg:#FDEDB9; --toast-fg:#172331;
}

/* 시안 C 라이트 테마 — yellow flavor의 Paper/Cream/Ink를 그대로 쓴다.
 * Signal(#F9CA12)은 흰 배경 위 1.6:1이라 글자색으로 쓰지 않고 면·테두리로만 쓴다.
 * 글자용 강조는 AccessibleAmber #765800 (흰 배경 7.0:1). */
.phone[data-variant="c"][data-theme="light"]{
  --bg:#FFFFFF; --surface:#FFFFFF; --surface2:#FDEDB9; --line:#F9CA12; --hair:#E7DEC2;
  --text:#172331; --muted:#5A5F66;
  --accent:#F9CA12; --on-accent:#172331; --accent-ink:#765800;
  --soft:#FDEDB9; --cream-ink:#172331; --cream-dim:#5A5F66;
  --danger:#B3261E; --danger-ink:#B3261E; --on-danger:#FFFFFF;
  --safe:#1F7A44; --safe-ink:#1F7A44; --on-safe:#FFFFFF; --info:#1D4ED8;
  --toast-bg:#172331; --toast-fg:#FDEDB9;
}
.phone[data-variant="c"][data-theme="light"] .card.cream{ background:#FDEDB9; }
.phone[data-variant="c"][data-theme="light"] .badgeitem.earned{ background:#FDEDB9; }
.phone[data-variant="c"][data-theme="light"] .barchart .bar b.miss{ background:#EFEFEF; border-color:#DCD6C2; }
.phone[data-variant="c"][data-theme="light"] .gauge{ background:#F1EAD3; }
.phone[data-variant="c"][data-theme="light"] .photo{
  background:
    radial-gradient(120% 90% at 22% 12%, hsl(var(--hue) 55% 55% / .8), transparent 62%),
    linear-gradient(150deg,#D8DDE5,#B9C1CC);
  color:#172331;
}
.phone[data-variant="c"][data-theme="light"] .photo .plate{ background:rgba(255,255,255,.78); color:#172331; }
.phone[data-variant="c"][data-theme="light"] .toast{ box-shadow:0 10px 30px rgba(23,35,49,.28); }

/* 시안 B 업무 상태 블록 — 상태별 색/레이아웃 전환 */
.workblock{
  border-radius:24px; padding:16px; margin-bottom:16px; border:1px solid var(--line);
  background:var(--surface); transition:background .25s ease, border-color .25s ease;
}
.workblock[data-state="off"]{ background:var(--surface); }
.workblock[data-state="on"]{
  background:linear-gradient(160deg, color-mix(in srgb, var(--accent) 20%, var(--surface)), var(--surface));
  border-color:var(--accent);
}
.workblock[data-state="rest"]{
  background:linear-gradient(160deg, color-mix(in srgb, var(--info) 20%, var(--surface)), var(--surface));
  border-color:var(--info);
}
.workblock[data-state="done"]{
  background:linear-gradient(160deg, color-mix(in srgb, var(--info) 8%, var(--surface)), var(--surface));
  border-color:var(--line);
}
.workblock[data-state="on"] .big-num{ color:var(--accent-ink); }
.workblock[data-state="rest"] .big-num{ color:var(--info); }
.pulse{ width:9px; height:9px; border-radius:50%; background:var(--accent); animation:pulse 1.4s infinite; }
@keyframes pulse{ 0%,100%{ opacity:1; transform:scale(1);} 50%{ opacity:.35; transform:scale(.8);} }

/* ---------- 갤러리(index.html) ---------- */
.gallery{ max-width:1180px; margin:0 auto; padding:30px 24px 70px; }
.gallery .lead{ color:var(--stage-muted); font-size:13.5px; line-height:1.8; max-width:760px; margin:0 0 26px; }
.gcards{ display:grid; grid-template-columns:repeat(auto-fit,minmax(320px,1fr)); gap:18px; }
.gcard{
  display:block; text-decoration:none; color:inherit;
  background:var(--stage-panel); border:1px solid var(--stage-line);
  border-radius:22px; padding:18px; transition:transform .18s ease, border-color .18s ease;
}
.gcard:hover{ transform:translateY(-3px); border-color:var(--signal); }
.gcard .tagline{ font-size:12px; font-weight:800; letter-spacing:.6px; color:var(--stage-muted); }
.gcard h3{ margin:6px 0 4px; font-size:19px; letter-spacing:-.4px; }
.gcard .flavor{ font-size:12px; color:var(--stage-muted); font-family:ui-monospace,SFMono-Regular,Menlo,monospace; }
.gcard .concept{ font-size:13.5px; line-height:1.7; margin:12px 0 14px; min-height:72px; }
.gcard .swatches{ display:flex; gap:6px; flex-wrap:wrap; margin-bottom:12px; }
.sw{ display:flex; flex-direction:column; align-items:center; gap:4px; width:58px; }
.sw i{ width:100%; height:26px; border-radius:8px; border:1px solid rgba(255,255,255,.14); display:block; }
.sw span{ font-size:9.5px; color:var(--stage-muted); font-family:ui-monospace,SFMono-Regular,Menlo,monospace; }
.gcard .meta{ font-size:12.5px; color:var(--stage-muted); line-height:1.75; border-top:1px solid var(--stage-line); padding-top:12px; }
.gcard .meta b{ color:var(--stage-text); font-weight:700; }
.gcard .go{ margin-top:14px; font-size:13px; font-weight:800; color:var(--signal); }
.mini{ height:132px; border-radius:16px; overflow:hidden; position:relative; margin-bottom:14px; border:1px solid rgba(255,255,255,.08); }
.mini .fake{ position:absolute; border-radius:5px; }
.foot{ margin-top:34px; font-size:12px; color:var(--stage-muted); line-height:1.8; border-top:1px solid var(--stage-line); padding-top:16px; }
.panel{
  background:var(--stage-panel); border:1px solid var(--stage-line); border-radius:20px;
  padding:18px 20px; margin:0 0 26px;
}
.panel h2{ margin:0 0 10px; font-size:15px; }
.panel p, .panel li{ font-size:13px; line-height:1.8; color:var(--stage-muted); }
.panel ul{ margin:8px 0 0; padding-left:18px; }
.panel code{ background:#1C222C; padding:1px 5px; border-radius:5px; font-size:12px; }
.panel b{ color:var(--stage-text); }

@media (max-width:900px){
  .stage{ padding:20px 14px 40px; }
  .stage-note{ max-width:none; }
}
/* 375px 기준 — 폰 프레임(360px)이 잘리지 않게 바깥 여백을 걷어낸다 (360+10=370px) */
@media (max-width:420px){
  .stage{ padding:14px 0 40px; gap:18px; }
  .stage-head{ padding:14px 12px; }
  .device{ padding:5px; border-radius:34px; }
  .side-controls{ width:340px; max-width:100%; }
  .stage-note{ padding:0 12px; }
  .gallery{ padding:20px 12px 50px; }
  .gcards{ grid-template-columns:1fr; }
}
