/* ===== PERSONAL COLOR STUDIO — v3.1 "Soft Spectrum" =====
   UI 크롬은 여전히 무채색이다(색 판단 영역). 계절 색은 첫 화면 오라·로고·히어로에만 은은하게 쓴다.
   색을 판단하는 화면이라 배경은 무채색이다. 어두운 배경은 파스텔을 과장하고
   딥 컬러를 묻어 버린다(동시대비). 진단샵이 흰 케이프와 회색 벽을 쓰는 이유와 같다. */
:root{
  --bg:#F2F2F2; --paper:#FFFFFF; --soft:#F7F7F7; --soft2:#EDEDED;
  --ink:#141414; --ink2:#5C5C5C; --ink3:#999999;
  --line:#E5E5E5; --line2:#D3D3D3;
  --tc:#141414; --tc2:#141414;
  --good:#16865A; --ok:#B7791F; --bad:#C9443A;
  --r:20px; --rm:16px; --rs:12px;
  --tap:44px; --ease:cubic-bezier(.2,.8,.2,1);
  --sans:'Pretendard Variable',Pretendard,-apple-system,BlinkMacSystemFont,'Apple SD Gothic Neo',system-ui,sans-serif;
  /* 한글 제목은 산세리프로 — 명조는 이 앱의 톤과 맞지 않는다. 영문 포인트만 에디토리얼 세리프 */
  --serif:var(--sans);
  --display:'Instrument Serif',Georgia,'Times New Roman',serif;
  --spring:#F7B7A3; --summer:#B9C6EE; --autumn:#D9B48C; --winter:#6F6AA8;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{font-family:var(--sans);background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;line-height:1.55;overflow-x:hidden}
button{font-family:inherit;cursor:pointer;border:0;background:none;color:inherit;padding:0}
img,canvas{max-width:100%;display:block}
.hidden{display:none!important}
.wrap{max-width:560px;margin:0 auto;padding:0 16px 110px}

/* ---------- 헤더 ---------- */
.top{position:sticky;top:0;z-index:40;background:rgba(242,242,242,.97);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.top-in{max-width:560px;margin:0 auto;padding:12px 16px;display:flex;align-items:center;justify-content:space-between;gap:10px}
.brand{display:flex;align-items:center;gap:9px;font-weight:800;font-size:13px;letter-spacing:.08em}
.brand .mark{width:22px;height:22px;border-radius:50%;
  background:conic-gradient(#F6A58B 0 25%,#9FB7E0 0 50%,#B8864E 0 75%,#3D3A6E 0)}
.brand small{display:block;font-size:9px;font-weight:600;color:var(--ink3);letter-spacing:.2em;margin-top:1px}
.top-actions{display:flex;gap:6px}
.pill-btn{position:relative;display:inline-flex;align-items:center;min-height:36px;font-size:12.5px;font-weight:700;padding:0 14px;border-radius:99px;background:var(--paper);border:1px solid var(--line)}
.pill-btn::before{content:'';position:absolute;inset:-4px -3px}
.pill-btn.dark{background:var(--ink);color:#fff;border-color:var(--ink)}

/* 결과 탭 */
.tabs{max-width:560px;margin:0 auto;padding:0 12px 10px;display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tabs button{position:relative;flex:1 0 auto;min-height:40px;padding:0 14px;border-radius:99px;font-size:13px;font-weight:700;color:var(--ink2);white-space:nowrap}
.tabs button.on{background:var(--ink);color:#fff}

/* ---------- 공통 ---------- */
.card{background:var(--paper);border-radius:var(--r);padding:20px;margin-top:12px;border:1px solid var(--line)}
.card.flush{padding:0;overflow:hidden}
.eyebrow{font-size:10.5px;letter-spacing:.18em;font-weight:800;color:var(--ink3);text-transform:uppercase}
.h2{font-family:var(--serif);font-size:21px;font-weight:700;letter-spacing:-.02em;margin:6px 0 4px;line-height:1.3}
.h3{font-size:15px;font-weight:800;letter-spacing:-.02em;margin:0 0 3px}
.sub{color:var(--ink2);font-size:13px;line-height:1.6;margin:0 0 14px}
.fine{color:var(--ink3);font-size:11.5px;line-height:1.6}
.sec{margin:40px 4px 0}
.sec .sub{margin:2px 0 0}
.sec + .card{margin-top:14px}
.row{display:flex;gap:8px;align-items:center}
.grow{flex:1}
.btn{display:flex;align-items:center;justify-content:center;gap:6px;min-height:52px;padding:12px 16px;border-radius:14px;font-weight:800;font-size:14.5px;line-height:1.3;text-align:center;text-wrap:balance;background:var(--ink);color:#fff;width:100%;transition:transform .12s,background-color .15s}
.btn:active{transform:scale(.985)}
.btn.line{background:var(--paper);color:var(--ink);border:1px solid var(--line2)}
@media (hover:hover){.btn:hover{background:#2A2A2A}.btn.line:hover,.btn.soft:hover{background:var(--soft)}}
.btn.soft{background:var(--soft2);color:var(--ink)}
.btn:disabled{opacity:.4;cursor:default}
.btn-row{display:flex;gap:8px;margin-top:14px}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{min-height:38px;font-size:12.5px;font-weight:700;padding:0 13px;border-radius:99px;background:var(--soft);border:1px solid var(--line);color:var(--ink2)}
.chip.on{background:var(--ink);border-color:var(--ink);color:#fff}
.tag{display:inline-block;font-size:11.5px;font-weight:700;padding:4px 10px;border-radius:99px;background:var(--soft2);color:var(--ink2)}
.seg{display:flex;background:var(--soft2);border-radius:12px;padding:3px;gap:2px}
.seg button{flex:1;min-height:38px;padding:0 6px;border-radius:9px;font-size:12.5px;font-weight:700;color:var(--ink2);white-space:nowrap}
.seg button.on{background:var(--paper);color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.lock-i{font-size:10px;margin-right:2px}
.toast{position:fixed;left:50%;transform:translate(-50%,16px);opacity:0;background:var(--ink);color:#fff;
  padding:12px 18px;border-radius:99px;font-size:13px;font-weight:700;z-index:200;transition:.25s;pointer-events:none;white-space:nowrap;
  bottom:calc(20px + env(safe-area-inset-bottom));box-shadow:0 6px 20px rgba(0,0,0,.18)}
.toast.on{opacity:1;transform:translate(-50%,0)}
.fade{animation:fade .5s var(--ease) both}
@keyframes fade{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* ---------- 인트로 ---------- */
.intro-hero{padding:18px 4px 0}
.intro-hero h1{font-family:var(--serif);font-size:clamp(30px,8.6vw,40px);line-height:1.18;letter-spacing:-.035em;margin:8px 0 10px;font-weight:700}
.intro-hero p{color:var(--ink2);font-size:14px;line-height:1.6;margin:0;max-width:420px;word-break:keep-all}
.tones-h{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.tones-h .fine{font-size:11.5px}
.tone-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:5px}
.tone-chip{border-radius:10px;overflow:hidden;background:var(--soft);border:1px solid var(--line);min-width:0}
.tone-chip .bars{display:flex;height:24px}
.tone-chip .bars i{flex:1}
.tone-chip b{display:block;font-size:10.5px;font-weight:800;padding:4px 0 5px;text-align:center;letter-spacing:-.04em;white-space:nowrap;overflow:hidden}
.card.upload{padding:16px}
.drop{display:flex;align-items:center;gap:14px;border:1.5px dashed var(--line2);border-radius:var(--rm);padding:16px;text-align:left;background:var(--soft);transition:border-color .2s,background-color .2s;cursor:pointer}
.drop.over{border-color:var(--ink);background:#EAEAEA}
.drop .ico{width:44px;height:44px;border-radius:50%;background:var(--ink);color:#fff;display:grid;place-items:center;flex:none;font-size:20px}
.drop-tx{min-width:0}
.drop b{display:block;font-size:16px;letter-spacing:-.02em;margin-bottom:1px}
.drop span{display:block;color:var(--ink2);font-size:12.5px;line-height:1.45;word-break:keep-all}
.card.upload .btn-row{margin-top:10px}
.makeup-pick{margin-top:12px}
.mk-ask{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px}
.mk-ask .btn{min-height:76px}
.mk-ask .btn small{display:block;font-size:11.5px;font-weight:500;opacity:.7;margin-top:4px;word-break:keep-all}
.pr-ask{margin-top:10px}
.pr-ask .btn{min-height:56px}
.pr-ask .btn.on{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.pr-seasons{margin-top:8px}
.pr-row{display:grid;grid-template-columns:40px 1fr;align-items:center;gap:8px;margin-top:6px}
.pr-s{font-size:13px;font-weight:700;color:var(--ink2)}
.pr-row .type-pick{margin-top:0;grid-template-columns:repeat(auto-fit,minmax(118px,1fr))}
.makeup-pick .mk-h{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:6px;font-size:12.5px}
.makeup-pick .mk-h span{color:var(--ink2);font-size:11.5px;text-align:right;word-break:keep-all}
.guide{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:10px}
.guide div{display:flex;gap:8px;align-items:center;min-width:0;font-size:12px;line-height:1.35;color:var(--ink2);background:var(--soft);border-radius:var(--rs);padding:10px 11px}
.guide i{font-style:normal;display:grid;place-items:center;flex:none;color:var(--ink)}
.why{display:flex;flex-direction:column;gap:16px;margin-top:14px}
.why div{display:flex;gap:12px}
.why .n{font-family:var(--serif);font-size:20px;font-weight:700;width:22px;flex:0 0 22px;line-height:1.15}
.why b{display:block;font-size:14px;line-height:1.45;margin-bottom:2px}
.why span{display:block;font-size:12.5px;line-height:1.55;color:var(--ink2);word-break:keep-all}
.saved{display:flex;gap:14px;align-items:center}
.saved .grow{min-width:0}
.saved .sw3{display:grid;grid-template-columns:1fr 1fr;width:52px;height:52px;border-radius:14px;overflow:hidden;flex:0 0 52px}
.saved b{display:block;font-family:var(--serif);font-size:19px;letter-spacing:-.02em;line-height:1.3;margin-top:1px}
.saved span{font-size:12px;color:var(--ink3)}
.link{display:inline-flex;align-items:center;min-height:32px;font-size:13px;font-weight:700;text-decoration:underline;text-underline-offset:3px;color:var(--ink2)}

/* ---------- 촬영 ---------- */
.cam-stage{position:relative;border-radius:16px;overflow:hidden;background:#000;aspect-ratio:3/4}
.cam-stage video{width:100%;height:100%;object-fit:cover;display:block;transform:scaleX(-1)}
.cam-stage video.rear{transform:none}
.cam-stage{--hud:#7DF9D2;--hud-warn:#FFC46B;--hold:0}
.cam-stage::after{content:'';position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse 34% 30% at 50% 41%,transparent 92%,rgba(4,8,12,.38) 100%)}
.cam-guide{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1;overflow:visible}
.cam-guide ellipse{fill:none}
.cam-guide .base{stroke:rgba(255,255,255,.32);stroke-width:.32}
.cam-guide .scan{stroke:var(--hud);stroke-width:.65;stroke-linecap:round;stroke-dasharray:16 84;filter:drop-shadow(0 0 4px var(--hud));animation:cam-scan 2.4s linear infinite;transition:opacity .3s}
.cam-guide .hold{stroke:var(--hud);stroke-width:.95;stroke-linecap:round;stroke-dasharray:calc(var(--hold) * 100) 100;opacity:0;filter:drop-shadow(0 0 6px var(--hud));transition:stroke-dasharray .25s linear,opacity .3s}
.cam-guide .corner{fill:none;stroke:rgba(255,255,255,.7);stroke-width:.5;stroke-linecap:round;transition:stroke .3s}
.cam-stage.ready .cam-guide .scan{opacity:0}
.cam-stage.ready .cam-guide .hold{opacity:1}
.cam-stage.ready .cam-guide .base{stroke:rgba(125,249,210,.45)}
.cam-stage.ready .cam-guide .corner{stroke:var(--hud)}
@keyframes cam-scan{to{stroke-dashoffset:-100}}
.cam-meter{position:absolute;left:50%;top:10px;z-index:2;transform:translateX(-50%);display:flex;gap:9px;justify-content:center;max-width:calc(100% - 20px);padding:6px 12px;border-radius:99px;background:rgba(10,14,20,.42);border:1px solid rgba(255,255,255,.14);backdrop-filter:blur(12px) saturate(1.4);-webkit-backdrop-filter:blur(12px) saturate(1.4)}
.cam-meter:empty{display:none}
.cam-meter span{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:600;color:rgba(255,255,255,.55);white-space:nowrap;transition:color .3s}
.cam-meter span i{width:5px;height:5px;border-radius:50%;background:var(--hud-warn);box-shadow:0 0 6px var(--hud-warn)}
.cam-meter span.bad{color:#fff}
.cam-meter span.good i{background:var(--hud);box-shadow:0 0 7px var(--hud)}
.cam-meter span.bad i{animation:cam-blink 1.2s ease-in-out infinite}
@keyframes cam-blink{50%{opacity:.35}}
.cam-radar{position:absolute;right:12px;bottom:74px;z-index:2;width:96px;height:96px;border-radius:50%;overflow:hidden;color:var(--hud-warn);
  background:radial-gradient(circle,rgba(12,18,26,.25),rgba(8,12,18,.62));border:1px solid rgba(255,255,255,.16);
  box-shadow:inset 0 0 18px rgba(125,249,210,.10),0 6px 24px rgba(0,0,0,.35);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.cam-radar .sweep{position:absolute;inset:0;border-radius:50%;background:conic-gradient(from 0deg,transparent 0 290deg,rgba(125,249,210,.05) 300deg,rgba(125,249,210,.32) 360deg);animation:cam-sweep 3s linear infinite}
@keyframes cam-sweep{to{transform:rotate(1turn)}}
.cam-radar svg{position:relative;width:100%;height:100%;display:block;overflow:visible}
.cam-radar .ring{fill:none;stroke:rgba(255,255,255,.14);stroke-width:.7}
.cam-radar .ring.outer{stroke:rgba(255,255,255,.28)}
.cam-radar .ticks line{stroke:rgba(255,255,255,.55);stroke-width:1.1}
.cam-radar .axis{stroke:rgba(255,255,255,.12);stroke-width:.6;stroke-dasharray:1.5 2.5}
.cam-radar .goal{fill:rgba(125,249,210,.08);stroke:rgba(125,249,210,.7);stroke-width:.9;stroke-dasharray:2.5 2}
.cam-radar text{fill:rgba(255,255,255,.55);font-size:6.5px;text-anchor:middle;font-weight:600;letter-spacing:.08em}
.cam-radar .dot{transition:transform .3s cubic-bezier(.2,.8,.2,1)}
.cam-radar .dot .core{fill:currentColor;stroke:#fff;stroke-width:1}
.cam-radar .dot .halo{animation:cam-pulse 1.6s ease-in-out infinite;transform-origin:center;transform-box:fill-box}
.cam-radar:has(.dot.ok){color:var(--hud);border-color:rgba(125,249,210,.45)}
.cam-radar:has(.dot.ok) .goal{fill:rgba(125,249,210,.2)}
@keyframes cam-pulse{50%{transform:scale(1.35);opacity:.55}}
.cam-count{position:absolute;inset:0;z-index:3;display:flex;align-items:center;justify-content:center;font-size:96px;font-weight:200;color:#fff;text-shadow:0 0 28px rgba(125,249,210,.8),0 2px 18px rgba(0,0,0,.5);pointer-events:none;font-variant-numeric:tabular-nums}
@media (prefers-reduced-motion:reduce){.cam-guide .scan,.cam-radar .sweep,.cam-radar .dot .halo,.cam-meter span.bad i{animation:none}.cam-radar .dot{transition:none}}
.cam-tip{position:absolute;left:50%;bottom:12px;z-index:2;transform:translateX(-50%);max-width:calc(100% - 24px);width:max-content;text-align:center;font-size:12px;line-height:1.4;color:#fff;font-weight:600;padding:7px 14px;border-radius:99px;background:rgba(10,14,20,.5);border:1px solid rgba(255,255,255,.14);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}

/* ---------- 분석 ---------- */
.scan{position:relative;border-radius:16px;overflow:hidden;background:#000}
.scan canvas{width:100%;max-height:42vh;object-fit:cover;object-position:50% 30%}
.scan .beam{position:absolute;left:0;right:0;height:110px;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(255,255,255,.32),transparent);animation:beam 1.8s ease-in-out infinite}
@keyframes beam{0%{top:-110px}100%{top:100%}}
.steps{margin-top:14px;display:flex;flex-direction:column;gap:8px}
.step{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--ink3)}
.step.on{color:var(--ink);font-weight:700}
.step.done{color:var(--good)}
.step .b{width:18px;height:18px;border-radius:50%;border:1.5px solid currentColor;flex:0 0 18px;display:grid;place-items:center;font-size:10px}
.step.on .b{animation:pulse 1s infinite}
@keyframes pulse{50%{opacity:.3}}
.qs{display:flex;flex-direction:column;gap:14px}
.q b{display:block;font-size:13.5px;margin-bottom:7px}
.q b small{font-weight:500;color:var(--ink3);margin-left:6px;font-size:11.5px}

/* ---------- 결과 히어로 ---------- */
.hero-r{position:relative;border-radius:24px;overflow:hidden;background:var(--paper);border:1px solid var(--line);margin-top:6px}
.hero-r .ph{position:relative;aspect-ratio:20/21;background:var(--soft2)}
.hero-r .ph canvas{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 32%}
.hero-r .ph .grad{position:absolute;inset:0}
.hero-r .ph .badge{position:absolute;left:14px;top:14px;font-size:11px;font-weight:800;letter-spacing:.12em;line-height:1;color:var(--ink);
  background:#fff;padding:8px 12px;border-radius:99px;box-shadow:0 2px 10px rgba(0,0,0,.14)}
.hero-r .tx{padding:18px 20px 20px}
.hero-r .tx .eyebrow{letter-spacing:.12em}
.type-ko{font-family:var(--serif);font-size:clamp(34px,10vw,44px);font-weight:700;letter-spacing:-.04em;line-height:1.1;margin:6px 0 8px;word-break:keep-all}
.type-sub{font-size:13px;color:var(--ink2);font-weight:600;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.type-sub .short{background:var(--tc);color:#fff;padding:4px 10px;border-radius:99px;font-weight:800;font-size:11.5px;line-height:1.2}
.tagline{font-family:var(--serif);font-size:16px;color:var(--ink2);margin:10px 0 0;line-height:1.5}
.aka{font-size:12px;color:var(--ink3);margin-top:8px}
.kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:16px}
.kpis div{display:flex;flex-direction:column;align-items:center;gap:2px;padding:12px 4px 11px;border-radius:var(--rs);background:var(--soft);text-align:center}
.kpis b{display:block;font-size:26px;font-weight:800;letter-spacing:-.035em;line-height:1.1;font-variant-numeric:tabular-nums}
.kpis span{font-size:11.5px;color:var(--ink2);font-weight:700;white-space:nowrap}
.kpi-note{margin:8px 2px 0;font-size:11px;line-height:1.5;color:var(--ink3);word-break:keep-all;text-wrap:balance}
.hero-r .kw{margin-top:14px}
.second-tone{margin-top:12px;display:flex;align-items:center;gap:10px;background:var(--soft);border-radius:var(--rs);padding:11px 13px;font-size:12.5px}
.second-tone b{font-weight:800}
.second-tone .dots{display:flex;margin-left:auto}
.second-tone .dots i{width:16px;height:16px;border-radius:50%;margin-left:-4px;border:2px solid var(--soft)}
.kw{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}

/* 근거 */
.reasons{display:flex;flex-direction:column;gap:10px}
.reason{display:flex;gap:12px;align-items:flex-start}
.reason .ax{flex:0 0 58px;font-size:11px;font-weight:800;color:var(--ink3);padding-top:2px;letter-spacing:.02em}
.reason p{margin:0;font-size:13.5px;line-height:1.6}
.reason p b{font-weight:800}

/* 계절 막대 */
.season-bar{display:flex;height:12px;border-radius:99px;overflow:hidden;margin:4px 0 10px}
.season-legend{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.season-legend div{font-size:11.5px;color:var(--ink2);display:flex;align-items:center;gap:5px;white-space:nowrap}
.season-legend i{width:9px;height:9px;border-radius:50%}
.season-legend b{font-weight:800;color:var(--ink)}

/* 톤 맵 */
.tone-map{width:100%;height:auto;display:block;margin-top:4px}
.tone-map text{font-family:var(--sans)}

/* 4축 */
.axis{margin-top:14px}
.axis .lab{display:flex;justify-content:space-between;align-items:baseline;font-size:11.5px;color:var(--ink3);margin-bottom:6px}
.axis .lab b{color:var(--ink);font-size:13px;font-weight:800}
.axis .lab em{font-style:normal;font-weight:700;color:var(--ink2)}
.bar{position:relative;height:6px;border-radius:99px;background:var(--soft2)}
.bar .knob{position:absolute;top:50%;width:16px;height:16px;border-radius:50%;background:var(--ink);transform:translate(-50%,-50%);border:3px solid var(--paper);box-shadow:0 1px 4px rgba(0,0,0,.25)}
.bar .mid{position:absolute;left:50%;top:-3px;bottom:-3px;width:1px;background:var(--line2)}
.bar .ghost{position:absolute;top:50%;width:10px;height:10px;border-radius:50%;background:var(--line2);transform:translate(-50%,-50%)}

/* 측정 */
.probe-wrap{border-radius:14px;overflow:hidden;background:#000}
.swatches{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-top:14px}
.swatches.four{grid-template-columns:repeat(4,1fr)}
.mswatch{text-align:center}
.mswatch .c{aspect-ratio:1;border-radius:12px;border:1px solid rgba(0,0,0,.1);margin-bottom:6px}
.mswatch b{display:block;font-size:11.5px}
.mswatch span{font-size:9.5px;color:var(--ink3);letter-spacing:.02em}
.gauge{margin-top:14px}
.gauge .lab{display:flex;justify-content:space-between;font-size:12px;margin-bottom:6px}
.gauge .lab b{font-weight:800}
.gauge .lab span{color:var(--ink3)}
.gauge .track{position:relative;height:8px;border-radius:99px}
.gauge .me{position:absolute;top:50%;width:14px;height:14px;border-radius:50%;background:var(--paper);border:3px solid var(--ink);transform:translate(-50%,-50%)}
.gauge .avg{position:absolute;top:-4px;bottom:-4px;width:2px;background:var(--ink);opacity:.35}
.gauge .avg::after{content:'평균';position:absolute;top:14px;left:50%;transform:translateX(-50%);font-size:9.5px;color:var(--ink3);white-space:nowrap}

/* 비교 슬라이더 */
.compare{position:relative;border-radius:14px;overflow:hidden;background:#000;touch-action:pan-y;user-select:none}
.compare canvas{width:100%}
.compare .after{position:absolute;inset:0;overflow:hidden}
.compare .after canvas{position:absolute;inset:0;width:100%;height:100%}
.compare .handle{position:absolute;top:0;bottom:0;width:2px;background:#fff;transform:translateX(-1px)}
.compare .handle::after{content:'⇆';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:34px;height:34px;border-radius:50%;
  background:#fff;color:#111;display:grid;place-items:center;font-size:15px;box-shadow:0 2px 8px rgba(0,0,0,.3)}
.compare .lbl{position:absolute;top:10px;font-size:10.5px;font-weight:800;color:#fff;background:rgba(0,0,0,.5);padding:4px 9px;border-radius:99px}

/* 경고 */
.notice{display:flex;gap:10px;padding:12px 13px;border-radius:var(--rs);background:#FFF7E8;color:#6B4A0E;font-size:12.5px;line-height:1.55}
.notice.info{background:var(--soft);color:var(--ink2);border:1px solid var(--line)}
.notice i{font-style:normal;filter:grayscale(1);flex:none}
.notice + .notice{margin-top:8px}

/* 사진별 결과 */
.members{display:flex;gap:8px;margin-top:12px;overflow-x:auto;scrollbar-width:none}
.member{flex:0 0 96px;border-radius:12px;overflow:hidden;background:var(--soft);border:1px solid var(--line)}
.member canvas{width:96px;height:96px;object-fit:cover}
.member b{display:block;font-size:11px;padding:6px 7px 1px;font-weight:800}
.member span{display:block;font-size:10px;color:var(--ink3);padding:0 7px 7px}
.member.on{border-color:var(--ink)}
.member.add{display:grid;place-items:center;min-height:132px;color:var(--ink2);font-size:12px;font-weight:700;border-style:dashed;text-align:center}

/* ---------- 팔레트 ---------- */
.sig{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.sig .p{border-radius:14px;overflow:hidden;background:var(--soft);cursor:pointer}
.sig .p i{display:block;aspect-ratio:1.1;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06)}
.sig .p b{display:block;font-size:11px;font-weight:700;padding:6px 8px 1px;letter-spacing:-.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sig .p span{display:block;font-size:9.5px;color:var(--ink3);padding:0 8px 7px}
.basics{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.basic{text-align:center}
.basic i{display:block;aspect-ratio:1;border-radius:50%;border:1px solid rgba(0,0,0,.12);position:relative}
.basic i::after{position:absolute;right:-2px;bottom:-2px;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;
  font-style:normal;font-size:11px;font-weight:900;color:#fff;border:2px solid var(--paper)}
.basic.good i::after{content:'○';background:var(--good)}
.basic.ok i::after{content:'△';background:var(--ok)}
.basic.bad i::after{content:'✕';background:var(--bad)}
.basic b{display:block;font-size:11.5px;margin-top:7px}
.book-row{margin-top:16px}
.book-row .fam{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
.book-row .fam b{font-size:13px;font-weight:800}
.book-row .fam span{font-size:11px;color:var(--ink3)}
.book-strip{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
.book-strip::-webkit-scrollbar{display:none}
.book-strip .p{flex:0 0 76px;cursor:pointer}
.book-strip .p i{display:block;height:64px;border-radius:12px;border:1px solid rgba(0,0,0,.1)}
.book-strip .p b{display:block;font-size:10.5px;font-weight:700;margin-top:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.book-strip .none{font-size:12px;color:var(--ink3);padding:10px 0}
.worst{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.worst .w{display:flex;gap:10px;align-items:center;background:var(--soft);border-radius:12px;padding:8px;cursor:pointer}
.worst .w i{width:40px;height:40px;border-radius:10px;flex:0 0 40px;position:relative}
.worst .w i::after{content:'';position:absolute;inset:0;background:linear-gradient(45deg,transparent 47%,rgba(255,255,255,.85) 48%,rgba(255,255,255,.85) 52%,transparent 53%)}
.worst .w b{display:block;font-size:12px}
.worst .w span{font-size:10.5px;color:var(--bad);font-weight:700}
.outfits{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.outfit{background:var(--soft);border-radius:14px;padding:10px 8px 10px;text-align:center}
.outfit svg{width:100%;height:auto;display:block}
.outfit b{display:block;font-size:12px;margin-top:4px}
.outfit span{display:block;font-size:10.5px;color:var(--ink3);line-height:1.4;margin-top:2px}

/* ---------- 체험 ---------- */
.stage{position:relative;border-radius:16px;overflow:hidden;background:#111}
.stage canvas{width:100%}
.stage .tl,.stage .tr,.stage .bl,.stage .br{position:absolute;font-size:11px;font-weight:800;color:#111;background:rgba(255,255,255,.9);padding:5px 10px;border-radius:99px}
.stage .tl{left:10px;top:10px}.stage .tr{right:10px;top:10px}
.stage .bl{left:10px;bottom:10px}.stage .br{right:10px;bottom:10px}
.stage .busy{position:absolute;inset:0;display:grid;place-items:center;background:rgba(0,0,0,.25);color:#fff;font-size:13px;font-weight:700}
.pairs{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin-top:10px}
.pairs::-webkit-scrollbar{display:none}
.pairs button{flex:0 0 auto;display:flex;align-items:center;gap:6px;min-height:38px;padding:0 12px 0 8px;border-radius:99px;background:var(--soft);border:1px solid var(--line);font-size:12px;font-weight:700;color:var(--ink2)}
.pairs button .dd{display:flex}
.pairs button .dd i{width:16px;height:16px;border-radius:50%;border:1.5px solid var(--paper)}
.pairs button .dd i+i{margin-left:-5px}
.pairs button.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.verdict{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.verdict > div{background:var(--soft);border-radius:12px;padding:11px 12px;border:1.5px solid transparent}
.verdict > div.win{border-color:var(--ink);background:var(--paper)}
.verdict .sc{font-size:22px;font-weight:800;letter-spacing:-.03em}
.verdict .nm{font-size:11.5px;color:var(--ink2);font-weight:600}
.verdict .rs{font-size:11px;color:var(--ink3);margin-top:2px}
.toggle{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700;color:var(--ink2)}
.toggle .sw{width:36px;height:22px;border-radius:99px;background:var(--line2);position:relative;transition:.2s}
.toggle .sw::after{content:'';position:absolute;left:3px;top:3px;width:16px;height:16px;border-radius:50%;background:#fff;transition:.2s}
.toggle.on .sw{background:var(--ink)}
.toggle.on .sw::after{left:17px}
.layer-tabs{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;margin-top:12px}
.layer-tabs button{min-height:40px;padding:0 2px;border-radius:10px;font-size:12px;font-weight:700;color:var(--ink2);background:var(--soft);position:relative}
.layer-tabs button.on{background:var(--ink);color:#fff}
.layer-tabs button.set::after{content:'';position:absolute;top:5px;right:6px;width:6px;height:6px;border-radius:50%;background:var(--good)}
.swatch-row{display:flex;gap:7px;overflow-x:auto;scrollbar-width:none;padding:12px 0 2px}
.swatch-row::-webkit-scrollbar{display:none}
.swatch-row button{flex:0 0 auto;width:44px;text-align:center}
.swatch-row button i{display:block;width:40px;height:40px;border-radius:50%;margin:0 auto;border:2px solid var(--paper);box-shadow:0 0 0 1px var(--line2)}
.swatch-row button span{display:block;font-size:9.5px;color:var(--ink3);margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.swatch-row button.on i{box-shadow:0 0 0 2px var(--ink)}
.swatch-row button.off i{background:repeating-linear-gradient(45deg,#fff 0 4px,#e5e5e5 4px 8px)}
.swatch-row .lock{opacity:.35}
.slider{display:flex;align-items:center;gap:10px;margin-top:10px;font-size:12px;color:var(--ink2);font-weight:700}
.slider input{flex:1;accent-color:var(--ink)}

/* ---------- 스타일 ---------- */
.rules{display:flex;flex-direction:column;gap:12px}
.rules div{display:flex;gap:12px;align-items:baseline}
.rules .n{font-family:var(--serif);font-size:26px;font-weight:700;line-height:1;width:24px}
.rules p{margin:0;font-size:15px;font-weight:700;letter-spacing:-.02em;line-height:1.45}
.mk{display:flex;flex-direction:column;gap:16px}
.mk-row .lab{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
.mk-row .lab b{font-size:13px;font-weight:800}
.mk-row .lab span{font-size:11.5px;color:var(--ink3)}
.dots{display:flex;gap:10px;flex-wrap:wrap}
.dot{text-align:center;width:62px;cursor:pointer}
.dot i{display:block;width:46px;height:46px;border-radius:50%;margin:0 auto;border:1px solid rgba(0,0,0,.12);position:relative}
.dot.lip i{border-radius:46% 46% 50% 50% / 38% 38% 62% 62%;height:30px;width:52px;margin-top:8px;margin-bottom:8px}
.dot.no i::after{content:'✕';position:absolute;right:-4px;top:-4px;width:18px;height:18px;border-radius:50%;background:var(--bad);color:#fff;font-size:10px;font-style:normal;font-weight:900;display:grid;place-items:center}
.dot b{display:block;font-size:11px;margin-top:5px;line-height:1.3}
.dot span{display:block;font-size:10px;color:var(--ink3)}
.shadow-pal{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;background:#1b1b1b;padding:8px;border-radius:14px}
.shadow-pal i{display:block;aspect-ratio:1;border-radius:8px}
.shadow-names{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin-top:6px}
.shadow-names span{font-size:10.5px;color:var(--ink2);text-align:center}
.kv{display:flex;flex-direction:column}
.kv div{display:flex;gap:12px;padding:11px 0;border-top:1px solid var(--line);font-size:13px}
.kv div:first-child{border-top:0;padding-top:2px}
.kv b{flex:0 0 62px;font-size:12px;color:var(--ink3);font-weight:700;padding-top:1px}
.kv p{margin:0;line-height:1.55}
.metals{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.metal{border-radius:14px;padding:12px;text-align:center;background:var(--soft)}
.metal i{display:block;width:52px;height:52px;border-radius:50%;margin:0 auto 8px}
.metal b{display:block;font-size:12.5px}
.metal span{font-size:11px;font-weight:800}
.metal span.good{color:var(--good)}.metal span.ok{color:var(--ok)}.metal span.bad{color:var(--bad)}

/* ---------- 쇼핑 · 체커 ---------- */
.checker{position:relative;border-radius:16px;overflow:hidden;background:#111;min-height:120px}
.checker canvas,.checker video{width:100%;display:block}
.checker .reticle{position:absolute;width:44px;height:44px;border-radius:50%;border:3px solid #fff;box-shadow:0 0 0 2px rgba(0,0,0,.4);transform:translate(-50%,-50%);pointer-events:none}
.checker .hint{position:absolute;left:0;right:0;bottom:10px;text-align:center;color:#fff;font-size:12px;font-weight:700;text-shadow:0 1px 6px rgba(0,0,0,.8)}
.judge{display:flex;gap:14px;align-items:center;margin-top:12px}
.judge .c{width:68px;height:68px;border-radius:16px;flex:0 0 68px;border:1px solid rgba(0,0,0,.08)}
.judge .v{font-family:var(--serif);font-size:22px;font-weight:700;line-height:1.2}
.judge .v.good,.judge .v.best{color:var(--good)} .judge .v.ok{color:var(--ok)} .judge .v.avoid{color:var(--bad)}
.judge .d{font-size:12.5px;color:var(--ink2);margin-top:2px}
.judge .sc{margin-left:auto;text-align:right}
.judge .sc b{display:block;font-size:26px;font-weight:800;letter-spacing:-.03em}
.judge .sc span{font-size:10.5px;color:var(--ink3);white-space:nowrap}
.judge>div:not(.c):not(.sc){min-width:0}
.alts{display:flex;gap:8px;margin-top:10px;align-items:center;font-size:12px;color:var(--ink2)}
.alts i{width:24px;height:24px;border-radius:7px;display:inline-block;vertical-align:middle;margin-right:4px}
.pouch-g{margin-top:14px}
.pouch-g h4{margin:0 0 8px;font-size:12.5px;display:flex;align-items:center;gap:6px}
.pouch-g h4 em{font-style:normal;font-size:11px;color:var(--ink3);font-weight:600}
.pouch-items{display:flex;flex-direction:column;gap:6px}
.pouch-item{display:flex;align-items:center;gap:10px;background:var(--soft);border-radius:12px;padding:8px 10px}
.pouch-item i{width:30px;height:30px;border-radius:8px;flex:0 0 30px}
.pouch-item b{font-size:12.5px;display:block}
.pouch-item span{font-size:11px;color:var(--ink3)}
.pouch-item button{margin-left:auto;font-size:11.5px;color:var(--ink3);min-width:40px;min-height:40px;margin-top:-6px;margin-bottom:-6px}
.shop-list{display:flex;flex-direction:column;border-top:1px solid var(--line)}
.shop-item{display:flex;align-items:center;gap:12px;padding:12px 2px;border-bottom:1px solid var(--line);text-decoration:none;color:var(--ink)}
.shop-item i{width:32px;height:32px;border-radius:9px;flex:0 0 32px}
.shop-item .t{flex:1}
.shop-item .t b{display:block;font-size:11.5px;color:var(--ink3);font-weight:700}
.shop-item .t span{font-size:13.5px;font-weight:600}
.shop-item .go{color:var(--ink3);font-size:18px}
.disclosure{font-size:11px;color:var(--ink3);margin:10px 0 0;line-height:1.6}
.cta{margin-top:12px;border-radius:var(--r);padding:22px 20px;background:var(--ink);color:#fff}
.cta h3{font-family:var(--serif);font-size:20px;margin:0 0 6px;font-weight:700}
.cta p{font-size:13px;color:rgba(255,255,255,.72);margin:0 0 16px}
.cta .btn{background:#fff;color:var(--ink)}
.cta.light{background:var(--paper);color:var(--ink);border:1px solid var(--line)}
.cta.light p{color:var(--ink2)}
.cta.light .btn{background:var(--ink);color:#fff}
.perks{display:flex;flex-direction:column;gap:6px;margin:0 0 16px}
.perks div{display:flex;gap:9px;align-items:center;font-size:13px;color:rgba(255,255,255,.85)}
.perks i{font-style:normal}

/* ---------- 시트 ---------- */
.sheet-bg{position:fixed;inset:0;z-index:100;background:rgba(10,10,10,.45);display:flex;align-items:flex-end;justify-content:center;opacity:0;transition:.22s}
.sheet-bg.on{opacity:1}
.sheet{width:100%;max-width:560px;background:var(--paper);border-radius:24px 24px 0 0;padding:12px 20px 28px;transform:translateY(24px);transition:.26s cubic-bezier(.2,.8,.2,1);max-height:88vh;overflow-y:auto}
.sheet-bg.on .sheet{transform:none}
.sheet .grab{width:38px;height:4px;border-radius:99px;background:var(--line2);margin:0 auto 16px}
.sheet .big-sw{height:130px;border-radius:16px;margin-bottom:14px;border:1px solid rgba(0,0,0,.06)}
.type-pick{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:10px}
.type-pick button{text-align:left;min-height:44px;padding:8px 12px;border-radius:12px;background:var(--soft);border:1px solid var(--line);font-size:13px;font-weight:700;display:flex;align-items:center;gap:8px}
.type-pick button i{width:14px;height:14px;border-radius:50%}
.type-pick button.on{border-color:var(--ink);background:var(--paper)}
.cards-prev{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.cards-prev canvas{width:100%;border-radius:12px;border:1px solid var(--line)}
@media (min-width:620px){
  .sheet-bg{align-items:center}
  .sheet{border-radius:24px}
}
.foot{text-align:center;color:var(--ink3);font-size:11px;margin-top:30px;line-height:1.7}

/* ===== v3 =====
   v2와 같은 스케일: 카드 20 · 패널 16 · 블록 12 / 본문 13 · 보조 11.5 · 미세 10.5 */
/* 프라이버시 배지 */
.privacy{display:flex;gap:11px;align-items:center;margin:14px 0 0;padding:11px 14px 11px 11px;border-radius:var(--rm);background:var(--paper);border:1px solid var(--line);text-align:left}
.privacy i{font-style:normal;width:34px;height:34px;border-radius:50%;background:var(--soft2);color:var(--ink);display:grid;place-items:center;flex:none}
.privacy span{font-size:11.5px;color:var(--ink2);line-height:1.45;min-width:0}
.privacy b{display:block;font-size:13px;color:var(--ink);letter-spacing:-.01em;margin-bottom:1px}


/* 진단 기록 */
.hist{display:flex;align-items:center;gap:10px;margin-top:14px;padding:10px 12px;border-radius:var(--rs);background:var(--soft);font-size:12px;line-height:1.45;color:var(--ink2)}
.hist b{color:var(--ink)}
.hist-dots{display:flex;gap:4px;flex:none}
.hist-dots i{width:9px;height:9px;border-radius:50%;opacity:.4}
.hist-dots i.on{opacity:1;box-shadow:0 0 0 1.5px #fff,0 0 0 2.5px var(--ink)}

/* 경계형 */
.boundary{margin-top:10px;padding:13px 14px 12px;border-radius:var(--rs);background:var(--paper);border:1px solid var(--line2)}
.bd-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.bd-h b{font-size:11px;font-weight:800;letter-spacing:.04em;line-height:1.2;padding:4px 9px;border-radius:99px;background:var(--ink);color:#fff}
.bd-h span{font-size:12px;line-height:1.45;color:var(--ink2)}
.bd-bar{display:flex;gap:2px;height:8px;border-radius:99px;overflow:hidden;margin:11px 0 8px;background:var(--soft2)}
.bd-bar i{display:block;height:100%}
.bd-l{display:flex;justify-content:space-between;gap:4px 10px;font-size:12px;color:var(--ink2);flex-wrap:wrap}
.bd-l span{display:flex;align-items:center;gap:5px;white-space:nowrap}
.bd-l i{width:9px;height:9px;border-radius:50%}
.bd-l b{color:var(--ink);font-weight:800}

/* 주의 카드 */
.card.attn{border-color:var(--ink);box-shadow:0 0 0 3px rgba(20,20,20,.06)}

/* 결과 비교 */
.cmp-res{margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}
.cmp-h>b{display:block;font-family:var(--serif);font-size:20px;line-height:1.3;letter-spacing:-.02em}
.cmp-h em{font-style:normal;font-weight:800;color:var(--ink)}
.cmp-h span{display:block;font-size:13px;line-height:1.55;color:var(--ink2);margin-top:4px}
.cmp-res.same .cmp-h>b{color:var(--good)}
.cmp-res.far .cmp-h>b{color:var(--bad)}
.cmp-diffs{margin:4px 0 0;padding:0 0 0 18px;font-size:13px;line-height:1.7}
.cmp-diffs li::marker{color:var(--ink3)}
.cmp-causes{margin-top:12px}
.cmp-causes .notice{margin-top:6px}
.cmp-res .book-strip{margin-top:8px}

/* 촬영 배경 추천 */
.bd-picks{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.bd-pick{text-align:center;padding:0 0 2px;background:none;border-radius:var(--rs);min-width:0}
.bd-pick:focus:not(:focus-visible){outline:none}
.bd-pick i{display:block;height:72px;border-radius:var(--rs);border:1px solid rgba(0,0,0,.08);position:relative;transition:transform .12s}
.bd-pick:active i{transform:scale(.97)}
.bd-pick.top i::after{content:'BEST';position:absolute;left:6px;top:6px;font-size:9px;font-weight:800;letter-spacing:.1em;line-height:1;padding:4px 6px;border-radius:99px;background:var(--ink);color:#fff;font-style:normal}
.bd-pick.avoid i::after{content:'';position:absolute;inset:4px;border:1.5px dashed var(--bad);border-radius:8px}
.bd-pick.avoid b::before{content:'✕ ';color:var(--bad)}
.bd-pick b{display:block;font-size:12.5px;line-height:1.35;margin-top:7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bd-pick span{display:block;font-size:10.5px;color:var(--ink3)}

/* 체커 자동 추출 */
.auto-cols{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.auto-cols button{padding:6px 6px 8px;border-radius:var(--rs);border:1px solid var(--line);background:var(--paper);text-align:center;min-width:0}
.auto-cols button.on{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.auto-cols i{display:block;height:40px;border-radius:8px;border:1px solid rgba(0,0,0,.06)}
.auto-cols b{display:block;font-size:12px;margin-top:6px}
.auto-cols b.best,.auto-cols b.good{color:var(--good)}
.auto-cols b.ok{color:var(--ok)}
.auto-cols b.avoid{color:var(--bad)}
.auto-cols span{display:block;font-size:10px;color:var(--ink3);white-space:nowrap}
@media (max-width:360px){ .auto-cols{grid-template-columns:repeat(2,1fr)} }
@media (max-width:380px){ .tabs button{padding:0 11px} .kpis b{font-size:23px} .tone-chip b{font-size:10px} }

/* ===== 접근성 ===== */
:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.btn:focus-visible{outline-offset:3px}
.tabs button:focus-visible,.pill-btn:focus-visible,.chip:focus-visible{outline-offset:2px}
input[type=range]:focus-visible{outline-offset:4px}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
  .scan .beam{display:none}
  .btn:active,.bd-pick:active i{transform:none}
}


/* =====================================================================
   v3.1 테마 — 미니멀 · 소프트 스펙트럼
   ===================================================================== */
:root{
  --bg:#F5F5F4; --paper:#FFFFFF; --soft:#F4F4F3; --soft2:#ECECEA;
  --ink:#111111; --ink2:#5F5F5D; --ink3:#9B9B98;
  --line:#EBEBE9; --line2:#DADAD7;
  --r:28px; --rm:20px; --rs:14px;
  --shadow:0 1px 2px rgba(17,17,17,.04),0 12px 32px -12px rgba(17,17,17,.08);
}
body{background:var(--bg);letter-spacing:-.011em;font-feature-settings:"ss01","tnum" 0}
::selection{background:#E7E3F6}

/* 헤더 */
.top{background:rgba(245,245,244,.55);backdrop-filter:saturate(1.4) blur(22px);-webkit-backdrop-filter:saturate(1.4) blur(22px)}
#view-intro{position:relative}
body:has(#view-intro:not(.hidden)) .top{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}
.wrap{overflow-x:clip}
.top-in{padding:14px 18px}
.brand{gap:10px;letter-spacing:0;font-weight:600}
.brand .mark{width:26px;height:26px;background:conic-gradient(from 210deg,var(--spring),var(--autumn),var(--winter),var(--summer),var(--spring));filter:saturate(1.1);box-shadow:inset 0 0 0 5px rgba(255,255,255,.55)}
.logo{font-size:17px;font-weight:700;letter-spacing:-.03em;line-height:1}
.logo em{font-family:var(--display);font-style:italic;font-weight:400;font-size:21px;letter-spacing:-.01em}
.pill-btn{min-height:36px;padding:0 15px;font-weight:600;font-size:13px;border:0;background:rgba(255,255,255,.9);box-shadow:0 0 0 1px var(--line)}
.tabs{padding:0 14px 12px;gap:2px}
.tabs button{min-height:38px;font-weight:600;font-size:13.5px;color:var(--ink3);padding:0 15px}
.tabs button.on{background:var(--paper);color:var(--ink);box-shadow:0 0 0 1px var(--line),0 2px 8px rgba(17,17,17,.06)}

/* 공통 */
.card{border:0;box-shadow:var(--shadow);padding:22px;margin-top:14px}
.eyebrow{font-family:var(--display);font-style:italic;font-weight:400;text-transform:none;letter-spacing:-.005em;font-size:17px;line-height:1.2;color:var(--ink2)}
.eyebrow em{font-style:normal}
.h2{font-size:23px;font-weight:700;letter-spacing:-.04em;line-height:1.28;margin:4px 0 6px}
.h3{font-size:15.5px;font-weight:700;letter-spacing:-.03em}
.sub{color:var(--ink2);font-size:13.5px}
.sec{margin:48px 6px 0}
.btn{min-height:54px;border-radius:999px;font-weight:700;font-size:15px;letter-spacing:-.02em}
@media (hover:hover){.btn:hover{background:#2B2B2B}}
.btn.line{border:0;box-shadow:inset 0 0 0 1px var(--line2)}
.btn.soft{background:var(--soft)}
.chip{border:0;background:var(--soft);font-weight:600;color:var(--ink2);box-shadow:inset 0 0 0 1px var(--line)}
.chip.on{background:var(--ink);box-shadow:none}
.tag{background:var(--soft);font-weight:600}
.seg{background:var(--soft);border-radius:999px;padding:4px}
.seg button{border-radius:999px;font-weight:600}
.seg button.on{box-shadow:0 1px 2px rgba(17,17,17,.06),0 0 0 1px var(--line)}
.notice{border-radius:var(--rs)}
.notice.info{border:0;background:var(--soft)}
.toast{background:rgba(17,17,17,.92);backdrop-filter:blur(8px);font-weight:600}
.link{font-weight:600;text-decoration-color:var(--line2)}

/* 인트로 — 계절 오라 */
.intro-hero{position:relative;padding:34px 6px 4px;isolation:isolate}
.aura{position:absolute;z-index:-1;inset:-150px -80px auto -80px;height:560px;pointer-events:none;filter:blur(46px);opacity:.75;overflow:hidden}
.aura i{position:absolute;width:210px;height:210px;border-radius:50%;animation:drift 18s ease-in-out infinite alternate}
.aura i:nth-child(1){background:var(--spring);left:4%;top:18%}
.aura i:nth-child(2){background:var(--summer);left:44%;top:0;animation-delay:-4s}
.aura i:nth-child(3){background:var(--autumn);left:18%;top:52%;opacity:.8;animation-delay:-9s}
.aura i:nth-child(4){background:var(--winter);left:62%;top:44%;opacity:.45;animation-delay:-13s}
@keyframes drift{from{transform:translate(0,0) scale(1)}to{transform:translate(24px,-18px) scale(1.12)}}
.intro-hero .eyebrow{font-size:20px;color:var(--ink)}
.intro-hero h1{font-family:var(--sans);font-weight:800;font-size:clamp(36px,10.4vw,48px);line-height:1.12;letter-spacing:-.055em;margin:10px 0 14px}
.intro-hero p{font-size:15px;color:#4A4A48;line-height:1.62}
.privacy{border:0;background:rgba(255,255,255,.72);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 0 0 1px rgba(255,255,255,.9),var(--shadow);border-radius:var(--rm);margin-top:20px}
.privacy i{background:var(--ink);color:#fff;width:32px;height:32px}
.card.upload{padding:18px}
.drop{border:0;background:var(--soft);border-radius:var(--rm);padding:18px;box-shadow:inset 0 0 0 1.5px var(--line2);box-shadow:none;background-image:linear-gradient(var(--soft),var(--soft)),linear-gradient(120deg,var(--spring),var(--summer),var(--autumn),var(--winter));background-origin:border-box;background-clip:padding-box,border-box;border:1.5px solid transparent}
.drop.over{background-image:linear-gradient(#EEEEEC,#EEEEEC),linear-gradient(120deg,var(--spring),var(--summer),var(--autumn),var(--winter))}
.drop .ico{width:46px;height:46px;font-size:22px;font-weight:300;background:var(--ink)}
.drop b{font-size:16.5px;font-weight:700;letter-spacing:-.03em}
.guide div{background:transparent;box-shadow:inset 0 0 0 1px var(--line);border-radius:999px;padding:9px 12px}
.guide{gap:6px}
.card.tones{padding:20px 18px}
.tone-grid{gap:10px 6px}
.tone-chip{background:transparent;border:0;border-radius:0;overflow:visible;text-align:center}
.tone-chip .bars{height:auto;aspect-ratio:1;border-radius:50%;overflow:hidden;box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}
.tone-chip b{font-weight:600;font-size:11px;color:var(--ink2);padding:6px 0 0;letter-spacing:-.04em}
.why .n{font-family:var(--display);font-style:italic;font-weight:400;font-size:26px;line-height:1;width:22px;color:var(--ink3)}
.why b{font-weight:700;letter-spacing:-.03em}
.saved b{font-family:var(--sans);font-weight:800;letter-spacing:-.04em;font-size:20px}
.saved .sw3{border-radius:50%}

/* 분석 */
.scan{border-radius:var(--rm)}
.scan .beam{background:linear-gradient(180deg,transparent,rgba(247,183,163,.35),rgba(185,198,238,.35),transparent)}
.step.done{color:var(--ink)}
.step.done .b{background:var(--ink);color:#fff;border-color:var(--ink)}

/* 결과 히어로 */
.hero-r{border:0;border-radius:32px;box-shadow:var(--shadow)}
.hero-r .ph .badge{font-family:var(--sans);font-style:normal;font-weight:700;font-size:10.5px;letter-spacing:.16em;padding:8px 12px;background:rgba(255,255,255,.82);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:none}
.hero-r .tx{padding:22px 22px 22px}
.hero-r .tx .eyebrow{font-family:var(--sans);font-style:normal;font-size:12px;font-weight:600;letter-spacing:0;color:var(--ink3)}
.type-ko{font-family:var(--sans);font-weight:800;letter-spacing:-.06em;font-size:clamp(38px,11vw,50px);line-height:1.06;margin:6px 0 10px}
.type-sub{font-size:14px;gap:10px}
.type-sub .short{font-weight:700;padding:5px 11px}
.type-sub span:not(.short){font-family:var(--display);font-style:italic;font-weight:400;font-size:22px;color:var(--ink);letter-spacing:-.01em}
.tagline{font-family:var(--sans);font-size:15.5px;font-weight:500;color:var(--ink2);letter-spacing:-.03em}
.kpis{gap:0;background:var(--soft);border-radius:var(--rm);padding:6px 0;margin-top:18px}
.kpis div{background:transparent;border-radius:0;padding:10px 4px 8px;position:relative}
.kpis div+div::before{content:'';position:absolute;left:0;top:22%;bottom:22%;width:1px;background:var(--line2)}
.kpis b{font-family:var(--display);font-weight:400;font-size:40px;letter-spacing:-.02em;line-height:1}
.kpis span{font-weight:600;font-size:11.5px;color:var(--ink3);margin-top:4px}
.second-tone{background:transparent;box-shadow:inset 0 0 0 1px var(--line);border-radius:999px;padding:10px 14px}
.second-tone .dots i{border-color:var(--paper)}
.boundary{border:0;background:var(--soft);border-radius:var(--rm)}
.bd-h b{border-radius:999px;font-weight:700;letter-spacing:0}

/* 본문 블록 */
.reason .ax{font-weight:600;color:var(--ink3)}
.season-bar{height:10px}
.bar{height:4px}
.mswatch .c,.sig .p i,.book-strip .p i{border-radius:var(--rs)}
.sig .p{background:transparent;border-radius:0}
.sig .p i{border-radius:var(--rm);aspect-ratio:1}
.sig .p b{padding:7px 2px 0;font-weight:600}
.sig .p span{padding:0 2px 4px}
.worst .w,.outfit,.metal,.pouch-item{background:var(--soft);border-radius:var(--rm)}
.member{border:0;box-shadow:inset 0 0 0 1px var(--line);border-radius:var(--rs)}
.member.on{box-shadow:inset 0 0 0 2px var(--ink)}
.stage,.checker,.probe-wrap,.compare{border-radius:var(--rm)}
.stage .tl,.stage .tr{font-family:var(--display);font-style:italic;font-weight:400;font-size:14px;background:rgba(255,255,255,.85);backdrop-filter:blur(8px)}
.pairs button,.layer-tabs button{border:0;box-shadow:inset 0 0 0 1px var(--line);background:var(--paper);font-weight:600}
.pairs button.on,.layer-tabs button.on{box-shadow:none}
.layer-tabs button{border-radius:999px}
.verdict>div{background:var(--soft);border-radius:var(--rm)}
.verdict .sc,.judge .sc b{font-family:var(--display);font-weight:400;font-size:32px;letter-spacing:-.01em}
.judge .v{font-family:var(--sans);font-weight:800;letter-spacing:-.04em}
.rules .n{font-family:var(--display);font-style:italic;font-weight:400;font-size:30px;color:var(--ink3)}
.cta{border-radius:var(--r);background:#111 radial-gradient(120% 90% at 100% 0%,rgba(185,198,238,.28),transparent 60%)}
.cta h3{font-family:var(--sans);font-weight:800;letter-spacing:-.04em}
.cta.light{border:0;box-shadow:var(--shadow);background:var(--paper)}
.shop-list{border-top:0}
.shop-item{border-bottom-color:var(--line)}
.shop-item i{border-radius:50%}
.sheet{border-radius:32px 32px 0 0}
.type-pick button{border:0;box-shadow:inset 0 0 0 1px var(--line);background:var(--paper);border-radius:999px;font-weight:600}
.type-pick button.on{box-shadow:inset 0 0 0 2px var(--ink)}
.cmp-h>b{font-family:var(--sans);font-weight:800;letter-spacing:-.04em}
.hist{border-radius:999px;background:var(--soft)}
.auto-cols button{border:0;box-shadow:inset 0 0 0 1px var(--line);border-radius:var(--rm)}
.auto-cols button.on{box-shadow:inset 0 0 0 2px var(--ink)}
.bd-pick i{border-radius:var(--rm)}
.foot{font-size:11.5px}
@media (prefers-reduced-motion:reduce){ .aura i{animation:none} }
@media (max-width:380px){ .kpis b{font-size:34px} .tabs button{padding:0 12px} }

/* 워스트 경고 · 립/헤어 색 코드 · 사진관 예약 */
.card.warn{box-shadow:inset 0 0 0 1.5px rgba(201,68,58,.38),var(--shadow)}
.card.warn .notice{background:#FDF0EE;color:#8A2A22}
.card.warn .notice i{filter:none;color:var(--bad);font-weight:800}
.warn-i{color:var(--bad)}
.worst.rows{grid-template-columns:1fr;margin-top:10px}
.worst .w b em{font-style:normal;font-weight:500;font-size:10.5px;color:var(--ink3);margin-left:4px}
.hexchips{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.hexchip{display:flex;align-items:center;gap:10px;min-width:0;padding:8px;border-radius:var(--rm);background:var(--soft);text-align:left;cursor:pointer}
.hexchip:active{transform:scale(.985)}
.hexchip i{width:40px;height:40px;flex:0 0 40px;border-radius:var(--rs);box-shadow:inset 0 0 0 1px rgba(0,0,0,.06)}
.hexchip b{display:block;min-width:0;font-size:12.5px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hexchip b em{font-style:normal;font-weight:500;font-size:10px;color:var(--ink3);margin-left:4px}
.hexchip span{display:block;font-size:11px;color:var(--ink2);font-variant-numeric:tabular-nums;text-decoration:underline dotted var(--line2);text-underline-offset:3px}
.hexchip>div{min-width:0}
.book-picks{margin:10px 0 0}
.book-picks.last{margin-bottom:16px}
.card.book .btn + .btn{margin-top:8px}
.card.book .btn small{display:block;font-size:11.5px;font-weight:500;opacity:.72;margin-top:2px}
.book-mini{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.book-mini .btn{min-height:44px;font-size:13px}
@media (max-width:360px){ .hexchips{grid-template-columns:1fr} }

/* v3.8 저장 전 설문 · 동의 */
.consent{padding:12px 14px;border-radius:14px;background:var(--soft);border:1px solid var(--line);display:grid;gap:8px}
.consent .ck{display:flex;align-items:flex-start;gap:8px;font-size:13px;font-weight:600;color:var(--ink);line-height:1.45}
.consent .ck input{width:18px;height:18px;margin:1px 0 0;flex:none;accent-color:var(--ink)}
.consent .ck.yr{align-items:center;flex-wrap:wrap}
.consent .ck .fine{white-space:nowrap}
.consent .ck.yr select{font:inherit;padding:6px 10px;border-radius:10px;border:1px solid var(--line);background:var(--paper);color:var(--ink)}
.consent details summary{cursor:pointer}


/* ---------------- 매장 키오스크 (관리자 전용) ---------------- */
.adm-f{display:flex;flex-direction:column;gap:6px;margin-top:14px;font-size:13px;font-weight:700;color:var(--ink)}
.adm-f select,.adm-f input{font:inherit;font-weight:500;font-size:16px;padding:12px 14px;border-radius:12px;border:1px solid var(--line);background:var(--paper);color:var(--ink)}
.adm-msg{min-height:1.4em;margin:10px 0 0}
body.kiosk .brand::after{content:'매장 체험';margin-left:8px;padding:3px 8px;border-radius:999px;background:var(--ink);color:var(--paper);font-size:11px;font-weight:700;letter-spacing:.02em;white-space:nowrap}
.brand{user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}

/* ---------------- 매장 키오스크 시작 화면 (전체 화면) ----------------
   메인 화면 위 팝업이 아니라 앱을 켜면 가장 먼저 보이는 화면. '진단 시작하기'를 눌러야 메인으로 넘어간다 */
body.ks-on{overflow:hidden}
.ks-screen{position:fixed;inset:0;z-index:90;background:var(--bg);display:flex;flex-direction:column;overflow-y:auto;isolation:isolate;
  opacity:0;transition:opacity .26s ease;-webkit-overflow-scrolling:touch}
.ks-screen.on{opacity:1}
.ks-aura{position:absolute;z-index:-1;inset:-12% -10% auto -10%;height:80%;pointer-events:none;filter:blur(64px);opacity:.8;overflow:hidden}
.ks-aura i{position:absolute;width:38vmax;height:38vmax;border-radius:50%;animation:drift 18s ease-in-out infinite alternate}
.ks-aura i:nth-child(1){background:var(--spring);left:0;top:10%}
.ks-aura i:nth-child(2){background:var(--summer);left:38%;top:-6%;animation-delay:-4s}
.ks-aura i:nth-child(3){background:var(--autumn);left:12%;top:46%;opacity:.8;animation-delay:-9s}
.ks-aura i:nth-child(4){background:var(--winter);left:60%;top:38%;opacity:.45;animation-delay:-13s}
.ks-top{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:max(18px,env(safe-area-inset-top)) clamp(16px,4vw,48px) 0}
.ks-brand{display:flex;align-items:center;cursor:default}
.ks-main{flex:1;display:grid;gap:clamp(20px,4vw,56px);align-items:center;align-content:center;width:100%;max-width:1180px;margin:0 auto;
  padding:clamp(20px,4vh,48px) clamp(16px,4vw,48px) max(28px,env(safe-area-inset-bottom))}
.ks-hero .eyebrow{font-size:clamp(20px,2.4vw,26px);color:var(--ink)}
.ks-hero h1{font-weight:800;font-size:clamp(40px,6.4vw,76px);line-height:1.08;letter-spacing:-.055em;margin:12px 0 16px;word-break:keep-all}
.ks-hero p{font-size:clamp(15px,1.6vw,19px);color:#4A4A48;line-height:1.62;margin:0;word-break:keep-all}
.ks-tones{display:flex;flex-wrap:wrap;gap:8px;margin-top:clamp(18px,3vh,32px)}
.ks-tone{display:inline-flex;align-items:center;gap:7px;padding:7px 12px 7px 8px;border-radius:999px;font-size:13px;font-weight:700;
  background:rgba(255,255,255,.7);box-shadow:0 0 0 1px rgba(255,255,255,.9),var(--shadow);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.ks-tone i{width:14px;height:14px;border-radius:50%}
.ks-steps{list-style:none;display:flex;flex-wrap:wrap;gap:8px 18px;padding:0;margin:clamp(16px,3vh,28px) 0 0;font-size:14px;font-weight:600;color:var(--ink2)}
.ks-steps li{display:flex;align-items:center;gap:8px}
.ks-steps b{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--ink);color:var(--paper);font-size:12px}
.ks-card{background:rgba(255,255,255,.82);backdrop-filter:blur(18px) saturate(1.3);-webkit-backdrop-filter:blur(18px) saturate(1.3);
  border-radius:var(--r);box-shadow:0 0 0 1px rgba(255,255,255,.95),0 24px 60px -24px rgba(17,17,17,.25);padding:clamp(20px,3vw,34px)}
.ks-h{font-weight:800;font-size:clamp(24px,2.6vw,32px);letter-spacing:-.04em;line-height:1.2;margin:8px 0 8px}
.ks-sub{font-size:14px;color:var(--ink2);line-height:1.6;margin:0;word-break:keep-all}
.ks-consent{margin-top:18px}
.ks-consent .ck{font-size:14px}
.ks-go{width:100%;min-height:64px;margin-top:16px;font-size:18px;font-weight:800;border-radius:999px}
.ks-hint{text-align:center;margin:10px 0 0;min-height:1.4em}
@media (min-width:900px){ .ks-main{grid-template-columns:1.15fr .85fr} }
@media (prefers-reduced-motion:reduce){ .ks-aura i{animation:none} .ks-screen{transition:none} }

/* ---------------- 로그인 화면 (일반 앱) ---------------- */
.lg-screen{position:fixed;inset:0;z-index:90;background:var(--bg);display:flex;flex-direction:column;overflow-y:auto;isolation:isolate;opacity:0;transition:opacity .26s ease}
.lg-screen.on{opacity:1}
.lg-brand{display:flex;align-items:center;cursor:default}
.lg-main{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;width:100%;max-width:440px;margin:0 auto;
  padding:clamp(16px,4vh,40px) 20px max(24px,env(safe-area-inset-bottom))}
.lg-main .eyebrow{font-size:19px;color:var(--ink)}
.lg-h{font-weight:500;font-size:clamp(26px,7vw,34px);line-height:1.3;letter-spacing:-.045em;margin:10px 0 0;word-break:keep-all}
.lg-h b{font-weight:800}
.lg-orb{width:min(58vw,230px);aspect-ratio:1;border-radius:50%;margin:clamp(24px,5vh,44px) 0;display:grid;place-items:center;
  box-shadow:0 30px 60px -28px rgba(17,17,17,.35);animation:lg-spin 40s linear infinite}
.lg-orb span{width:62%;aspect-ratio:1;border-radius:50%;background:rgba(255,255,255,.9);backdrop-filter:blur(8px);display:grid;place-content:center;
  font-size:13px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink2);animation:lg-spin 40s linear infinite reverse}
.lg-orb em{display:block;font-family:var(--display);font-style:italic;font-weight:400;font-size:44px;line-height:1;color:var(--ink);letter-spacing:0;text-transform:none}
@keyframes lg-spin{to{transform:rotate(360deg)}}
.lg-actions{width:100%;display:flex;flex-direction:column;align-items:center;gap:12px}
.lg-note{display:flex;align-items:center;gap:6px;margin:0 0 6px;font-size:13px;font-weight:600;color:var(--ink2)}
.lg-btn{width:100%;min-height:56px;border-radius:14px;display:flex;align-items:center;justify-content:center;gap:10px;font-size:16px;font-weight:700}
.lg-btn.kakao{background:#FEE500;color:rgba(0,0,0,.85)}
.lg-btn.apple{background:#000;color:#fff}
.lg-btn:disabled{opacity:.6}
.lg-foot{margin:22px 0 0;font-size:12px;color:var(--ink3);line-height:1.6}
.lg-foot a{color:var(--ink2)}
@media (prefers-reduced-motion:reduce){ .lg-orb,.lg-orb span{animation:none} }
