/* ============================================================================
   AgingTwin v2 — 라이트 디지털헬스케어 디자인 시스템
   (카카오 파스타 / Oura / Levels 벤치마킹: 밝고 깨끗하고 친근하게)
   ============================================================================ */
@font-face{
  font-family:'Pretendard';
  src:url('/static/fonts/PretendardVariable.woff2') format('woff2-variations'),
      url('/static/fonts/PretendardVariable.woff2') format('woff2');
  font-weight:45 920;
  font-style:normal;
  font-display:swap;
}
:root{
  --primary:#7C5CFF;      /* 브랜드 메인 */
  --primary-2:#9E86FF;
  --accent:#12CFA6;       /* 바이탈리티 민트 */
  --accent-2:#5CE6C4;
  --warm:#FF8FA3;         /* 위험/따뜻함 */
  --amber:#FFB25C;
  --ink:#191A2E;
  --ink-2:#454863;
  --muted:#6B6E88;
  --line:#EDEEF5;
  --bg:#F5F6FB;
  --card:#FFFFFF;
  --good:#12C08A;
  --danger:#FF5C7A;
  --radius:26px;
  --radius-sm:18px;
  --shadow:0 12px 30px rgba(30,32,80,.07),0 3px 10px rgba(30,32,80,.04);
  --shadow-sm:0 6px 16px rgba(30,32,80,.06);
  --shadow-btn:0 10px 24px rgba(124,92,255,.28);
  --safe-top:env(safe-area-inset-top,0px);
  --safe-bottom:env(safe-area-inset-bottom,0px);
  --tabbar-h:72px;
  font-family:'Pretendard','Apple SD Gothic Neo',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{background:var(--bg);color:var(--ink);overflow:hidden;overscroll-behavior:none;-webkit-font-smoothing:antialiased}
b{font-weight:700}
em{font-style:normal;background:linear-gradient(110deg,var(--primary),var(--accent));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
img{max-width:100%}

/* ---------- 스플래시 ---------- */
.splash{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;overflow:hidden;background:#F4F7FB;transition:opacity .6s ease,visibility .6s}
.splash.hide{opacity:0;visibility:hidden;pointer-events:none}
.splash-bg{position:absolute;inset:0;background:url('/static/assets/generated/splash-bg.png') center/cover no-repeat,linear-gradient(135deg,#FBEFF2,#EDF3FB 55%,#EAF6F2);animation:splashBg 6s ease-in-out infinite alternate}
@keyframes splashBg{from{transform:scale(1.04)}to{transform:scale(1.12)}}
.splash-inner{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;padding:0 20px}
.splash-logo-wrap{position:relative;width:160px;height:160px;display:grid;place-items:center}
.splash-logo{width:160px;height:160px;object-fit:contain;animation:splashLogo 1s cubic-bezier(.2,.9,.3,1) both;filter:drop-shadow(0 14px 34px rgba(120,150,200,.32))}
.splash-ring{position:absolute;width:120%;height:120%;border-radius:50%;border:2px solid rgba(140,120,255,.28);animation:splashRing 2.6s ease-out infinite}
@keyframes splashLogo{from{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}
@keyframes splashRing{0%{transform:scale(.65);opacity:.7}100%{transform:scale(1.45);opacity:0}}
.splash-name{font-size:32px;font-weight:800;letter-spacing:-.6px;background:linear-gradient(110deg,#8A6BFF,#5FA8E8 55%,#12CFA6);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;opacity:0;animation:splashUp .7s .35s both;margin-top:4px}
.splash-tag{font-size:14px;color:#5D6180;font-weight:600;opacity:0;animation:splashUp .7s .5s both}
.splash-load{display:flex;gap:7px;margin-top:10px;opacity:0;animation:splashUp .7s .65s both}
.splash-load i{width:9px;height:9px;border-radius:50%;background:#9E86FF;animation:blink 1.2s infinite}
.splash-load i:nth-child(2){animation-delay:.2s;background:#5FA8E8}
.splash-load i:nth-child(3){animation-delay:.4s;background:#12CFA6}
@keyframes splashUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}

/* ---------- 배경 (은은한 파스텔 블롭) ---------- */
.bg-field{position:fixed;inset:0;z-index:0;overflow:hidden;background:
  radial-gradient(90% 55% at 50% -8%,#EFEAFF 0%,var(--bg) 55%)}
.blob{position:absolute;border-radius:50%;filter:blur(70px);opacity:.5;animation:drift 22s ease-in-out infinite}
.blob.b1{width:56vw;height:56vw;background:radial-gradient(circle,#C9BBFF,transparent 70%);top:-12%;left:-18%}
.blob.b2{width:52vw;height:52vw;background:radial-gradient(circle,#9FF3DE,transparent 70%);top:32%;right:-22%;animation-delay:-7s}
.blob.b3{width:44vw;height:44vw;background:radial-gradient(circle,#FFD3DE,transparent 70%);bottom:-8%;left:10%;animation-delay:-13s;opacity:.4}
@keyframes drift{0%,100%{transform:translate(0,0) scale(1)}33%{transform:translate(5%,7%) scale(1.08)}66%{transform:translate(-4%,-3%) scale(.96)}}

/* ---------- 셸 ---------- */
.app{position:relative;z-index:1;height:100dvh;max-width:460px;margin:0 auto;overflow:hidden}
.screen{position:absolute;inset:0;display:flex;flex-direction:column;padding:calc(18px + var(--safe-top)) 20px calc(18px + var(--safe-bottom));opacity:0;transform:translateY(14px);pointer-events:none;transition:opacity .45s cubic-bezier(.2,.8,.2,1),transform .45s cubic-bezier(.2,.8,.2,1)}
.screen.active{opacity:1;transform:none;pointer-events:auto}

/* ---------- 버튼 ---------- */
.btn{width:100%;padding:17px;border:none;border-radius:18px;font-size:16px;font-weight:700;cursor:pointer;font-family:inherit;transition:transform .18s,box-shadow .2s;display:flex;align-items:center;justify-content:center;gap:8px}
.btn:active{transform:scale(.97)}
.btn-primary{color:#fff;background:linear-gradient(110deg,var(--primary),var(--primary-2));box-shadow:var(--shadow-btn)}
.btn-accent{color:#053a2e;background:linear-gradient(110deg,var(--accent),var(--accent-2));box-shadow:0 10px 24px rgba(18,207,166,.3)}
.btn-soft{color:var(--ink);background:#F0F1F8;border:1px solid var(--line)}
.btn-ghost{color:var(--primary);background:#F4F1FF;border:1px solid #E7E0FF;font-weight:700;width:100%;padding:15px;border-radius:16px;cursor:pointer;font-family:inherit;transition:.18s}
.btn-ghost:active{transform:scale(.97)}
.btn-text{width:100%;padding:12px;border:none;background:transparent;color:var(--muted);font-size:14px;cursor:pointer;font-family:inherit}
.arrow{transition:transform .3s}
.btn:hover .arrow{transform:translateX(3px)}
.iconbtn{width:42px;height:42px;border-radius:14px;border:1px solid var(--line);background:#fff;color:var(--ink);font-size:20px;cursor:pointer;flex:none;box-shadow:var(--shadow-sm)}

/* ---------- 카드 ---------- */
.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:22px}
.card-sm{border-radius:var(--radius-sm);padding:16px}

/* ============================================================================
   랜딩
   ============================================================================ */
.landing{margin:auto 0;display:flex;flex-direction:column;align-items:center;text-align:center;gap:20px}
.badge-top{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:999px;background:#fff;box-shadow:var(--shadow-sm);font-size:12.5px;font-weight:600;color:var(--ink-2)}
.badge-top .dot{width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 4px rgba(18,207,166,.18)}
.hero-visual{width:200px;height:200px;position:relative;display:grid;place-items:center}
.hero-visual .logo-glow{position:absolute;width:150px;height:160px;border-radius:50%;background:radial-gradient(circle,#8FD8FF 0%,#B9E9FF 40%,transparent 70%);filter:blur(26px);opacity:.55;animation:glowPulse 3.4s ease-in-out infinite}
.hero-visual .logo-img{width:150px;height:170px;object-fit:contain;position:relative;z-index:1;filter:drop-shadow(0 16px 26px rgba(56,168,255,.30));animation:logoFloat 4.5s ease-in-out infinite}
@keyframes logoFloat{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(-12px) rotate(1.5deg)}}
@keyframes glowPulse{0%,100%{opacity:.45;transform:scale(1)}50%{opacity:.7;transform:scale(1.1)}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
.hero-title{font-size:29px;line-height:1.35;font-weight:800;letter-spacing:-.6px}
.hero-sub{color:var(--ink-2);font-size:15px;line-height:1.7}
.hero-chips{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.chip{padding:8px 13px;border-radius:999px;background:#fff;box-shadow:var(--shadow-sm);font-size:12.5px;font-weight:600;color:var(--ink-2)}
.hero-note{color:var(--muted);font-size:12px}
.landing .btn{max-width:100%}

.visitor-pill{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.visitor-pill .lv{display:inline-flex;align-items:center;gap:6px;background:#fff;box-shadow:var(--shadow-sm);border-radius:999px;padding:7px 13px;font-size:12.5px;font-weight:600;color:var(--ink-2)}
.visitor-pill .lv b{color:var(--primary);font-variant-numeric:tabular-nums}
.visitor-pill .lv i{width:7px;height:7px;border-radius:50%;background:#12C08A;box-shadow:0 0 0 0 rgba(18,192,138,.5);animation:livedot 1.6s ease-out infinite}
@keyframes livedot{0%{box-shadow:0 0 0 0 rgba(18,192,138,.5)}70%{box-shadow:0 0 0 7px rgba(18,192,138,0)}100%{box-shadow:0 0 0 0 rgba(18,192,138,0)}}

/* reveal */
.rv{opacity:0;transform:translateY(18px);animation:rv .7s cubic-bezier(.2,.8,.2,1) forwards;animation-delay:calc(var(--d,0)*.1s + .05s)}
@keyframes rv{to{opacity:1;transform:none}}

/* ============================================================================
   문진
   ============================================================================ */
.survey-head{display:flex;align-items:center;gap:12px;margin-bottom:22px}
.progress{flex:1;height:10px;border-radius:999px;background:#E9EAF3;overflow:hidden}
.progress-bar{height:100%;width:12%;border-radius:999px;background:linear-gradient(90deg,var(--primary),var(--accent));transition:width .5s cubic-bezier(.2,.8,.2,1)}
.step-count{font-size:13px;color:var(--muted);font-weight:600;font-variant-numeric:tabular-nums}
.survey-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch}
.survey-body::-webkit-scrollbar{display:none}
.survey-foot{padding-top:14px}
.q-title{font-size:24px;font-weight:800;line-height:1.35;letter-spacing:-.5px;margin-bottom:8px}
.q-sub{color:var(--muted);font-size:14px;line-height:1.6;margin-bottom:24px}
.q-anim{animation:qin .45s cubic-bezier(.2,.8,.2,1)}
@keyframes qin{from{opacity:0;transform:translateX(18px)}to{opacity:1;transform:none}}

.opt-grid{display:flex;flex-direction:column;gap:11px}
.opt{display:flex;align-items:center;gap:14px;padding:17px 18px;border-radius:18px;border:2px solid var(--line);background:#fff;cursor:pointer;transition:.2s;box-shadow:var(--shadow-sm)}
.opt .emoji{font-size:26px}
.opt .txt b{display:block;font-size:15.5px}
.opt .txt small{color:var(--muted);font-size:12.5px}
.opt:active{transform:scale(.98)}
.opt.sel{border-color:var(--primary);background:linear-gradient(180deg,#F8F5FF,#fff);box-shadow:0 10px 22px rgba(124,92,255,.16)}
.opt.sel .check{opacity:1;transform:scale(1)}
.opt .check{margin-left:auto;width:24px;height:24px;border-radius:50%;background:var(--primary);color:#fff;display:grid;place-items:center;font-size:13px;opacity:0;transform:scale(.5);transition:.2s}

.field{margin-bottom:20px}
.field>label{display:block;font-size:14px;color:var(--ink-2);margin-bottom:9px;font-weight:700}
.field input[type=number],.field input[type=text],.field input[type=password]{width:100%;padding:16px;border-radius:16px;border:2px solid var(--line);background:#fff;color:var(--ink);font-size:17px;outline:none;transition:.2s;font-family:inherit}
.field input:focus{border-color:var(--primary);box-shadow:0 0 0 4px rgba(124,92,255,.12)}
.input-unit{position:relative}
.input-unit .u{position:absolute;right:18px;top:50%;transform:translateY(-50%);color:var(--muted);font-weight:600;font-size:15px}

.slider-row{display:flex;align-items:center;gap:14px}
.slider-row input[type=range]{flex:1}
.slider-val{min-width:70px;text-align:right;font-weight:800;font-size:17px;color:var(--primary)}
input[type=range]{-webkit-appearance:none;appearance:none;height:10px;border-radius:999px;background:#E9EAF3;outline:none}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:28px;height:28px;border-radius:50%;background:#fff;box-shadow:0 3px 10px rgba(124,92,255,.4),inset 0 0 0 6px var(--primary);cursor:pointer}
input[type=range]::-moz-range-thumb{width:28px;height:28px;border:none;border-radius:50%;background:var(--primary);box-shadow:0 3px 10px rgba(124,92,255,.4);cursor:pointer}
.scale-caption{display:flex;justify-content:space-between;font-size:11.5px;color:var(--muted);margin-top:8px}

/* ============================================================================
   분석 로딩
   ============================================================================ */
.analyzing{margin:auto;text-align:center;display:flex;flex-direction:column;align-items:center;gap:28px;width:100%}
.loader{position:relative;width:150px;height:150px;display:grid;place-items:center}
.loader .ring{position:absolute;border-radius:50%;border:4px solid transparent}
.loader .r1{width:150px;height:150px;border-top-color:var(--primary);animation:spin 1.4s linear infinite}
.loader .r2{width:112px;height:112px;border-right-color:var(--accent);animation:spin 1.9s linear infinite reverse}
.loader .r3{width:74px;height:74px;border-bottom-color:var(--warm);animation:spin 1.1s linear infinite}
.loader .core{font-size:38px;animation:bob 1.4s ease-in-out infinite}
.analyzing h2{font-size:19px;font-weight:800}
.analyze-steps{list-style:none;text-align:left;display:flex;flex-direction:column;gap:13px;font-size:14px;color:var(--muted);width:100%;max-width:300px}
.analyze-steps li{opacity:.4;transition:.4s;display:flex;gap:11px;align-items:center;font-weight:600}
.analyze-steps li.done{opacity:1;color:var(--ink)}
.analyze-steps li .dot{width:22px;height:22px;border-radius:50%;border:2px solid #DADCEA;flex:none;display:grid;place-items:center;font-size:12px;transition:.3s}
.analyze-steps li.done .dot{background:var(--accent);border-color:var(--accent);color:#fff}

/* ============================================================================
   메인 앱 (탭)
   ============================================================================ */
#mainApp{position:absolute;inset:0;display:none;flex-direction:column}
#mainApp.active{display:flex}
.appbar{display:flex;align-items:center;justify-content:space-between;padding:calc(14px + var(--safe-top)) 20px 12px;flex:none}
.appbar .greet{font-size:20px;font-weight:800;letter-spacing:-.4px}
.appbar .greet small{display:block;font-size:12.5px;color:var(--muted);font-weight:600;margin-top:2px}
.appbar .ava{width:44px;height:44px;border-radius:14px;background:#fff;display:grid;place-items:center;overflow:hidden;box-shadow:var(--shadow-sm)}
.appbar .ava img{width:38px;height:38px;object-fit:contain}

.pane-wrap{flex:1;position:relative;overflow:hidden}
.pane{position:absolute;inset:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:4px 20px calc(var(--tabbar-h) + 20px);display:flex;flex-direction:column;gap:16px;opacity:0;transform:translateY(10px);pointer-events:none;transition:opacity .35s,transform .35s}
.pane::-webkit-scrollbar{display:none}
.pane.active{opacity:1;transform:none;pointer-events:auto}
.pane>*{flex-shrink:0}   /* 고정높이 flex 컬럼에서 캔버스 카드가 찌그러지는 것 방지 */

.sec-title{font-size:17px;font-weight:800;letter-spacing:-.3px;margin:6px 2px -2px}
.sec-title small{font-weight:500;color:var(--muted);font-size:12px;margin-left:4px}

/* --- 홈: 페르소나 --- */
/* 방문자 배너(홈) */
.visitor-banner{display:flex;align-items:center;justify-content:space-around;gap:8px;background:#fff;border-radius:18px;padding:13px 12px;box-shadow:var(--shadow-sm)}
.visitor-banner .vb{display:flex;flex-direction:column;align-items:center;gap:3px;flex:1}
.visitor-banner .vlabel{font-size:11px;color:var(--muted);font-weight:600;white-space:nowrap}
.visitor-banner .vb b{font-size:17px;font-weight:800;color:var(--ink);font-variant-numeric:tabular-nums}
.visitor-banner .vb b span{background:linear-gradient(110deg,var(--primary),var(--accent));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.visitor-banner .vdiv{width:1px;height:30px;background:var(--line)}

/* 오늘의 팁 */
.tip-card{display:flex;gap:10px;align-items:flex-start;background:linear-gradient(120deg,#FFF7E9,#FFF1F4);border-radius:18px;padding:15px 16px;font-size:13.5px;line-height:1.6;color:var(--ink-2);box-shadow:var(--shadow-sm);font-weight:500}
.tip-card span{flex:1}

/* 미션 카드 */
.mission-card{background:#fff;border-radius:var(--radius);padding:18px;box-shadow:var(--shadow)}
.mission-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.mission-head b{font-size:15.5px;font-weight:800;display:block}
.mission-head small{color:var(--muted);font-size:12px}
.streak-badge{background:linear-gradient(135deg,#FF8F5C,#FF5C7A);color:#fff;border-radius:14px;padding:7px 12px;font-size:15px;font-weight:800;text-align:center;line-height:1.1;box-shadow:0 6px 14px rgba(255,92,122,.3)}
.streak-badge small{display:block;font-size:9px;font-weight:600;opacity:.9}
.mission-list{display:flex;flex-direction:column;gap:9px}
.mission{display:flex;align-items:center;gap:12px;background:#F7F8FC;border:2px solid transparent;border-radius:14px;padding:13px 14px;cursor:pointer;transition:.18s}
.mission:active{transform:scale(.98)}
.mission.on{background:linear-gradient(120deg,#EAFBF5,#F1FCF8);border-color:var(--accent)}
.mission .mi{font-size:20px;width:26px;text-align:center}
.mission .mt{flex:1;font-size:14px;font-weight:600}
.mission.on .mt{color:var(--muted);text-decoration:line-through}
.mission .mc{width:24px;height:24px;border-radius:8px;border:2px solid #DADCEA;display:grid;place-items:center;color:transparent;font-weight:800;transition:.18s}
.mission.on .mc{background:var(--accent);border-color:var(--accent);color:#fff}
.mission-foot{display:flex;align-items:center;justify-content:space-between;margin-top:14px;padding-top:14px;border-top:1px solid var(--line);font-size:13px;color:var(--ink-2);font-weight:600}
.mission-foot b{color:var(--primary);font-size:16px;font-weight:800}

/* 공유 버튼 */
.share-btn{position:absolute;top:14px;right:14px;width:34px;height:34px;border-radius:11px;border:1px solid var(--line);background:#fff;font-size:15px;cursor:pointer;box-shadow:var(--shadow-sm);transition:.18s}
.share-btn:active{transform:scale(.9)}

/* 마이: 무료 히어로 */
.free-hero{text-align:center;background:linear-gradient(135deg,var(--accent),#3BD6F0);color:#053a2e;border-radius:var(--radius);padding:24px 20px;box-shadow:0 12px 26px rgba(18,207,166,.28)}
.free-hero .fh-badge{display:inline-block;background:rgba(255,255,255,.85);color:#0a7a5e;font-size:12px;font-weight:800;padding:5px 13px;border-radius:999px;margin-bottom:10px}
.free-hero h3{font-size:19px;font-weight:800;margin-bottom:6px}
.free-hero p{font-size:13px;line-height:1.6;opacity:.9}
.reward-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
.reward-grid .rw{background:#fff;border-radius:18px;padding:16px 8px;text-align:center;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:3px}
.reward-grid .ri{font-size:22px}
.reward-grid .rw b{font-size:18px;font-weight:800}
.reward-grid .rw small{font-size:11px;color:var(--muted);font-weight:600}
.hist-card{background:#fff;border-radius:20px;padding:18px;box-shadow:var(--shadow-sm)}
.hist-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.hist-head b{font-size:14.5px;font-weight:800}
.hist-head small{color:var(--muted);font-size:12px}
.hist-row{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:600;color:var(--ink-2)}
.hist-row .arrow{color:var(--muted)}
.hist-row .hist-diff{margin-left:auto;padding:3px 10px;border-radius:999px;font-weight:800;font-size:12.5px}
.hist-diff.good{background:#E4F8F0;color:var(--good)}
.hist-diff.bad{background:#FFEEF1;color:var(--danger)}

.persona{position:relative;display:flex;align-items:center;gap:16px;background:linear-gradient(120deg,#F4F1FF,#EAFBF5);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}
.persona .pe{width:78px;height:78px;border-radius:50%;overflow:hidden;flex:none;display:grid;place-items:center;background:linear-gradient(135deg,#EDE7FF,#DFF7EE);box-shadow:0 6px 18px rgba(124,92,255,.20);animation:bob 4s ease-in-out infinite}
.persona .pe img{width:100%;height:100%;object-fit:cover;display:block}
.persona .pe .pe-emoji{font-size:40px}
.persona .pt{min-width:0}
.persona .pt .pcode{display:inline-block;font-size:12px;font-weight:800;letter-spacing:2px;color:#fff;background:linear-gradient(110deg,var(--primary),var(--accent));padding:3px 10px;border-radius:8px;margin-bottom:5px;box-shadow:0 4px 10px rgba(124,92,255,.3)}
.persona .pt b{display:block;font-size:18px;font-weight:800}
.persona .pt .ps{color:var(--ink-2);font-size:13px;line-height:1.55;margin-top:4px}
.axes{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ax{display:flex;align-items:center;gap:8px;background:#fff;border-radius:14px;padding:10px 12px;font-size:12.5px;font-weight:700;color:var(--ink-2);box-shadow:var(--shadow-sm)}
.ax em{width:24px;height:24px;border-radius:8px;display:grid;place-items:center;font-style:normal;font-weight:800;color:#fff;-webkit-text-fill-color:#fff;flex:none;font-size:12.5px}
.ax.g em{background:linear-gradient(135deg,var(--accent),var(--accent-2))}
.ax.b em{background:linear-gradient(135deg,var(--amber),var(--warm))}
.ax.b{color:var(--ink-2)}

/* --- 홈: 생체나이 링 --- */
.bioring{text-align:center;padding:24px 20px}
.ring-wrap{position:relative;width:230px;height:230px;margin:2px auto 6px}
.ring-svg{transform:rotate(-90deg);width:230px;height:230px}
.ring-track{fill:none;stroke:#EEF0F7;stroke-width:18}
.ring-fill{fill:none;stroke:url(#rg);stroke-width:18;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset 1.5s cubic-bezier(.2,.8,.2,1)}
.ring-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}
.ring-center .rl{font-size:12.5px;color:var(--muted);font-weight:600}
.ring-center .rv{font-size:60px;font-weight:800;line-height:1;letter-spacing:-1px}
.ring-center .ru{font-size:15px;color:var(--muted);font-weight:700}
.ring-center .rd{margin-top:8px;font-size:12.5px;font-weight:700;padding:4px 12px;border-radius:999px}
.rd.older{background:#FFEEF1;color:var(--danger)}
.rd.younger{background:#E4F8F0;color:var(--good)}
.bioring-meta{display:flex;gap:10px;margin-top:16px}
.bmeta{flex:1;background:#F7F8FC;border-radius:16px;padding:14px 8px;text-align:center}
.bmeta b{display:block;font-size:20px;font-weight:800}
.bmeta small{color:var(--muted);font-size:11.5px;font-weight:600}

/* --- 퀵 스탯 --- */
.quick{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.qcard{background:#fff;border-radius:20px;padding:16px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:6px}
.qcard .qi{font-size:22px}
.qcard .qv{font-size:22px;font-weight:800}
.qcard .qn{font-size:12px;color:var(--muted);font-weight:600}
.qcard .qbar{height:6px;border-radius:999px;background:#EEF0F7;overflow:hidden;margin-top:2px}
.qcard .qbar i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--accent),var(--accent-2))}

/* --- 리포트: 노화시계 --- */
.clocks{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.clock{background:#fff;border-radius:20px;padding:16px;box-shadow:var(--shadow-sm)}
.clock .cn{font-size:12.5px;color:var(--muted);font-weight:700}
.clock .cv{font-size:30px;font-weight:800;margin:6px 0 2px;letter-spacing:-.5px}
.clock .cd{font-size:12px;font-weight:800;display:inline-block;padding:2px 8px;border-radius:999px}
.cd.older{color:var(--danger);background:#FFEEF1}.cd.younger{color:var(--good);background:#E4F8F0}
.clock .cm{font-size:10.5px;color:var(--muted);margin-top:7px;line-height:1.45}

/* --- 리포트: 요인 --- */
.factors{display:flex;flex-direction:column;gap:10px}
.factor{display:flex;align-items:center;gap:12px;background:#fff;border-radius:16px;padding:14px 16px;box-shadow:var(--shadow-sm)}
.factor .flabel{min-width:92px;font-size:13px;font-weight:700}
.factor .fbar{flex:1;height:8px;border-radius:999px;background:#EEF0F7;position:relative;overflow:hidden}
.factor .fbar i{position:absolute;top:0;height:100%;border-radius:999px;transition:width 1s cubic-bezier(.2,.8,.2,1)}
.factor.risk .fbar i{background:linear-gradient(90deg,#FFB25C,#FF7A9A);right:50%}
.factor.good .fbar i{background:linear-gradient(90deg,#12CFA6,#5CE6C4);left:50%}
.factor .fbar::before{content:"";position:absolute;left:50%;top:-2px;bottom:-2px;width:2px;background:#DADCEA}
.factor .fval{min-width:48px;text-align:right;font-size:13px;font-weight:800}
.factor.risk .fval{color:var(--danger)}.factor.good .fval{color:var(--good)}

/* --- 시뮬 --- */
.sim-hero{background:linear-gradient(120deg,#EAFBF5,#F4F1FF);border-radius:var(--radius);padding:24px;text-align:center;box-shadow:var(--shadow)}
.sim-younger{font-size:64px;font-weight:800;line-height:1;letter-spacing:-2px;background:linear-gradient(110deg,var(--accent),var(--primary));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.sim-younger .us{font-size:24px;-webkit-text-fill-color:var(--muted);margin-left:2px}
.sim-cap{color:var(--ink-2);font-size:14px;font-weight:600;margin-top:6px}
.sim-newage{margin-top:10px;font-size:13.5px;color:var(--muted)}
.sim-newage b{color:var(--ink);font-size:16px}
.traj-box{background:#fff;border-radius:var(--radius);padding:18px 16px 12px;box-shadow:var(--shadow-sm);overflow:hidden}
.traj-box .tt{display:flex;justify-content:space-between;align-items:center;font-size:13px;color:var(--muted);font-weight:700;margin-bottom:6px;padding:0 2px}
.traj-box .tt .pill{font-size:11px;font-weight:800;color:var(--accent);background:#E4F8F0;padding:3px 10px;border-radius:999px}
.traj-box canvas{width:100%;height:172px;display:block}
.iv-list{display:flex;flex-direction:column;gap:10px}
.iv{display:flex;align-items:center;gap:13px;background:#fff;border:2px solid var(--line);border-radius:18px;padding:14px 16px;cursor:pointer;transition:.2s;box-shadow:var(--shadow-sm)}
.iv:active{transform:scale(.98)}
.iv.on{border-color:var(--accent);background:linear-gradient(180deg,#F1FCF8,#fff)}
.iv .ivi{width:44px;height:44px;border-radius:14px;background:#F5F6FB;display:grid;place-items:center;font-size:22px;flex:none}
.iv.on .ivi{background:#E4F8F0}
.iv .ivt{flex:1}
.iv .ivt b{font-size:14.5px;display:block}
.iv .ivt small{color:var(--muted);font-size:11.5px}
.iv .ivc{width:26px;height:26px;border-radius:9px;border:2px solid #DADCEA;display:grid;place-items:center;flex:none;transition:.2s;color:transparent}
.iv.on .ivc{background:var(--accent);border-color:var(--accent);color:#fff}
.horizon{display:flex;align-items:center;gap:12px;background:#fff;border-radius:18px;padding:14px 16px;box-shadow:var(--shadow-sm)}
.horizon label{font-size:13px;color:var(--ink-2);font-weight:700;flex:none}
.horizon #horizonLabel{min-width:48px;text-align:right;font-weight:800;color:var(--primary)}

/* --- 코칭 --- */
.coach{display:flex;flex-direction:column;gap:12px;min-height:60px}
.coach>.btn-ghost{width:100%}
/* 코칭 카드 */
.coach-cards{display:flex;flex-direction:column;gap:12px}
.cch{background:#fff;border-radius:20px;padding:18px;box-shadow:var(--shadow);opacity:0;transform:translateY(16px) scale(.98);animation:cchIn .55s cubic-bezier(.2,.9,.3,1) forwards;animation-delay:calc(var(--ci,0)*.11s)}
@keyframes cchIn{to{opacity:1;transform:none}}
.cch-head{display:flex;align-items:center;gap:11px;margin-bottom:10px}
.cch-num{width:38px;height:38px;border-radius:12px;background:linear-gradient(135deg,var(--primary),var(--accent));display:grid;place-items:center;font-size:19px;flex:none;box-shadow:0 5px 12px rgba(124,92,255,.28)}
.cch-head b{font-size:16px;font-weight:800;line-height:1.35}
.cch.cch-intro{background:linear-gradient(120deg,#F4F1FF,#EAFBF5)}
.cch.cch-intro .cch-body{font-size:16px;font-weight:700;color:var(--ink);line-height:1.6}
.cch-body{font-size:14.5px;line-height:1.8;color:var(--ink-2)}
.cch-body p{margin:0 0 8px}.cch-body p:last-child{margin-bottom:0}
.cch-body strong{color:var(--ink);font-weight:700}
.cch-body ul{list-style:none;display:flex;flex-direction:column;gap:8px;margin:8px 0 4px}
.cch-body li{position:relative;padding-left:22px;line-height:1.65}
.cch-body li::before{content:"";position:absolute;left:3px;top:9px;width:8px;height:8px;border-radius:50%;background:linear-gradient(135deg,var(--primary),var(--accent))}
.coach-report{font-size:14.5px;line-height:1.8;color:var(--ink-2)}
.coach-report>*{opacity:0;transform:translateY(8px);animation:mdin .5s cubic-bezier(.2,.8,.2,1) forwards;animation-delay:calc(var(--i,0)*.09s)}
@keyframes mdin{to{opacity:1;transform:none}}
.coach-report h4{font-size:15.5px;font-weight:800;color:var(--ink);margin:16px 0 6px;display:flex;align-items:center;gap:8px}
.coach-report h4:first-child{margin-top:0}
.coach-report h4 .num{width:24px;height:24px;border-radius:8px;background:linear-gradient(135deg,var(--primary),var(--accent));color:#fff;font-size:12.5px;display:grid;place-items:center;flex:none}
.coach-report p{margin:6px 0}
.coach-report strong,.coach-report b{color:var(--ink);font-weight:700}
.coach-report ul,.coach-report ol{margin:6px 0 6px 2px;list-style:none;display:flex;flex-direction:column;gap:7px}
.coach-report li{position:relative;padding-left:24px;line-height:1.65}
.coach-report li::before{content:"";position:absolute;left:4px;top:8px;width:8px;height:8px;border-radius:50%;background:var(--accent)}
.coach-report .hl{background:linear-gradient(180deg,transparent 55%,#E4F8F0 55%);padding:0 2px;font-weight:700;color:var(--ink)}
.coach-report .md-hr{border:none;height:1px;background:var(--line);margin:14px 0}
.coach-src{font-size:11px;color:var(--muted);align-self:flex-end;margin-top:4px}
.typing{display:inline-flex;gap:5px;padding:6px 0}
.typing i{width:8px;height:8px;border-radius:50%;background:var(--accent);animation:blink 1.2s infinite}
.typing i:nth-child(2){animation-delay:.2s}.typing i:nth-child(3){animation-delay:.4s}
@keyframes blink{0%,80%,100%{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-5px)}}

/* --- 건기식 --- */
.supp{background:#fff;border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}
.supp .sh{display:flex;align-items:center;gap:12px;margin-bottom:6px}
.supp .sh .si{width:48px;height:48px;border-radius:15px;background:linear-gradient(135deg,#E4F8F0,#F4F1FF);display:grid;place-items:center;font-size:24px;flex:none}
.supp .sh b{font-size:17px;font-weight:800}
.supp-rat{color:var(--muted);font-size:12.5px;line-height:1.6;margin:6px 0 14px}
.ing{display:flex;gap:12px;padding:13px 0;border-top:1px solid var(--line)}
.ing .ip{width:44px;height:44px;border-radius:13px;background:#F5F6FB;display:grid;place-items:center;font-size:20px;flex:none}
.ing .it b{font-size:14.5px}
.ing .it .ib{color:var(--ink-2);font-size:12.5px;margin:2px 0}
.ing .it .im{display:flex;gap:6px;flex-wrap:wrap;margin-top:5px}
.ing .it .im span{font-size:10.5px;padding:3px 9px;border-radius:999px;background:#F0F1F8;color:var(--muted);font-weight:600}
.ing .it .im .dose{color:var(--good);background:#E4F8F0}
.supp-note{margin-top:14px;font-size:10.5px;color:var(--muted);line-height:1.6}

/* --- 마이 / CTA --- */
.cta{border-radius:var(--radius);padding:26px 22px;text-align:center;background:linear-gradient(135deg,var(--primary),var(--primary-2));color:#fff;box-shadow:var(--shadow-btn)}
.cta h3{font-size:19px;font-weight:800;margin-bottom:8px}
.cta p{opacity:.9;font-size:13.5px;line-height:1.6;margin-bottom:16px}
.cta .price{margin-bottom:16px}
.cta .price b{font-size:34px;font-weight:800}
.cta .price small{opacity:.85}
.cta .btn{background:#fff;color:var(--primary)}

/* --- 프리미엄 구독 섹션 --- */
.social-proof{display:flex;gap:10px}
.sp{flex:1;background:#fff;border-radius:18px;padding:14px 10px;text-align:center;box-shadow:var(--shadow-sm)}
.sp b{display:block;font-size:22px;font-weight:800;background:linear-gradient(110deg,var(--primary),var(--accent));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.sp small{color:var(--muted);font-size:11px;font-weight:600}
.plan{position:relative;background:#fff;border-radius:var(--radius);padding:22px;box-shadow:var(--shadow);overflow:hidden;border:2px solid transparent}
.plan.premium{border-color:transparent;background:linear-gradient(#fff,#fff) padding-box,linear-gradient(120deg,var(--primary),var(--accent)) border-box}
.plan .ribbon{position:absolute;top:14px;right:-34px;transform:rotate(45deg);background:linear-gradient(110deg,var(--warm),var(--amber));color:#fff;font-size:11px;font-weight:800;padding:5px 40px;box-shadow:var(--shadow-sm)}
.plan .ph{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.plan .ph .pi{width:40px;height:40px;border-radius:12px;background:linear-gradient(135deg,var(--primary),var(--accent));display:grid;place-items:center;font-size:20px}
.plan .ph b{font-size:18px;font-weight:800}
.plan .price-row{display:flex;align-items:flex-end;gap:8px;margin:12px 0 4px}
.plan .price-row .now{font-size:32px;font-weight:800;letter-spacing:-1px}
.plan .price-row .was{font-size:15px;color:var(--muted);text-decoration:line-through;margin-bottom:5px}
.plan .price-row .per{font-size:13px;color:var(--muted);margin-bottom:6px}
.plan .discount{display:inline-block;background:#FFEEF1;color:var(--danger);font-size:12px;font-weight:800;padding:3px 10px;border-radius:999px;margin-bottom:6px}
.plan .daily{font-size:12.5px;color:var(--ink-2);margin-bottom:14px}
.benefits{display:flex;flex-direction:column;gap:11px;margin-bottom:16px}
.benefit{display:flex;gap:11px;align-items:flex-start;font-size:14px;line-height:1.5}
.benefit .bk{width:22px;height:22px;border-radius:7px;background:#E4F8F0;color:var(--good);display:grid;place-items:center;font-size:12px;flex:none;font-weight:800}
.benefit b{color:var(--ink)}
.benefit small{display:block;color:var(--muted);font-size:12px;font-weight:500}
.plan .btn{margin-top:2px}
.guarantee{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:12px;font-size:12px;color:var(--muted);font-weight:600}
.compare{background:#fff;border-radius:var(--radius);padding:6px 8px;box-shadow:var(--shadow-sm)}
.crow{display:flex;align-items:center;padding:13px 12px;font-size:13.5px}
.crow+.crow{border-top:1px solid var(--line)}
.crow .cf{flex:1;font-weight:600;color:var(--ink-2)}
.crow .cc{width:64px;text-align:center;font-weight:700}
.crow.head .cc{font-size:12px;color:var(--muted)}
.crow .free{color:var(--muted)}
.crow .prem{color:var(--good)}
.crow.head .prem{color:var(--primary)}
.mylist{display:flex;flex-direction:column;gap:2px;background:#fff;border-radius:var(--radius);padding:8px;box-shadow:var(--shadow-sm)}
.myrow{display:flex;align-items:center;gap:14px;padding:15px 14px;border-radius:16px;cursor:pointer;transition:.15s}
.myrow:active{background:#F5F6FB}
.myrow .mi{font-size:20px;width:24px;text-align:center}
.myrow .mt{flex:1;font-weight:600;font-size:14.5px}
.myrow .mc{color:var(--muted);font-size:18px}
.myrow+.myrow{border-top:1px solid var(--line)}

/* ---------- 하단 탭바 ---------- */
.tabbar{position:absolute;left:0;right:0;bottom:0;height:calc(var(--tabbar-h) + var(--safe-bottom));padding-bottom:var(--safe-bottom);background:rgba(255,255,255,.85);backdrop-filter:blur(18px);border-top:1px solid var(--line);display:flex;z-index:10}
.tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border:none;background:none;cursor:pointer;color:var(--muted);font-family:inherit;font-size:10.5px;font-weight:700;transition:.2s;position:relative}
.tab .ti{width:26px;height:26px;display:grid;place-items:center;transition:transform .25s}
.tab .ti svg{width:25px;height:25px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.tab.on{color:var(--primary)}
.tab.on .ti{transform:translateY(-2px) scale(1.08)}
.tab.on .ti svg{stroke-width:2.2}
.tab.on .ti .fillable{fill:var(--primary);fill-opacity:.14}
.tab.on::before{content:"";position:absolute;top:9px;width:40px;height:34px;border-radius:13px;background:#F1ECFF;z-index:-1;animation:tabpop .3s cubic-bezier(.2,1.3,.5,1)}
@keyframes tabpop{from{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}

/* ---------- 관리자 진입 ---------- */
.admin-link{position:fixed;top:calc(12px + var(--safe-top));right:14px;z-index:30;width:38px;height:38px;border-radius:12px;background:rgba(255,255,255,.8);backdrop-filter:blur(8px);box-shadow:var(--shadow-sm);display:grid;place-items:center;text-decoration:none;font-size:17px;opacity:.6}
body.app-mode .admin-link{display:none}  /* 앱 진입 후엔 상단 아바타와 겹치므로 숨김(설정은 마이 탭에서 접근) */

/* ---------- 토스트 ---------- */
.toast{position:fixed;left:50%;bottom:calc(var(--tabbar-h) + 24px);transform:translate(-50%,20px);z-index:50;background:var(--ink);color:#fff;padding:13px 22px;border-radius:16px;font-size:14px;font-weight:600;opacity:0;pointer-events:none;transition:.3s;max-width:88vw;text-align:center;box-shadow:0 12px 30px rgba(20,20,50,.25)}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* 탭 가능한 카드 */
.tappable{cursor:pointer;position:relative;transition:transform .15s}
.tappable:active{transform:scale(.985)}
.cinfo{font-size:11px;color:var(--muted);opacity:.7}
.factor .fchev,.ing .fchev{color:var(--muted);font-size:18px;font-weight:700;margin-left:2px}
.card-hint{position:absolute;top:12px;right:12px;font-size:10.5px;font-weight:700;color:var(--primary);background:#fff;padding:4px 9px;border-radius:999px;box-shadow:var(--shadow-sm)}

/* 미션 진행 바 */
.mfbar{flex:1;height:8px;border-radius:999px;background:#EEF0F7;margin:0 10px;overflow:hidden}
.mfbar i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width .4s}

/* 동급연령 대비 위치 */
.peer-card{background:#fff;border-radius:var(--radius);padding:18px 16px 16px;box-shadow:var(--shadow)}
.peer-svg{width:100%;height:120px;display:block;overflow:visible}
.peer-line{transition:x1 .9s cubic-bezier(.2,.8,.2,1),x2 .9s cubic-bezier(.2,.8,.2,1)}
.peer-dot{transition:cx .9s cubic-bezier(.2,.8,.2,1);filter:drop-shadow(0 3px 6px rgba(124,92,255,.5))}
.peer-ends{display:flex;justify-content:space-between;font-size:11.5px;color:var(--muted);font-weight:700;margin-top:2px;padding:0 4px}
.peer-label{text-align:center;margin-top:12px}
.peer-head{font-size:16px;font-weight:800;letter-spacing:-.3px}
.peer-head.good{color:var(--good)}
.peer-head.mid{color:var(--ink)}
.peer-head.warn{color:#E67E22}
.peer-sub{font-size:13.5px;font-weight:600;color:var(--ink-2);margin-top:5px}
.peer-sub b{color:var(--primary);font-size:16px}

/* 업적 뱃지 */
.badge-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.badge{background:#fff;border-radius:16px;padding:14px 6px;text-align:center;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;align-items:center;gap:5px;opacity:.45;filter:grayscale(1);transition:.25s}
.badge.on{opacity:1;filter:none;animation:badgePop .5s cubic-bezier(.2,1.4,.5,1)}
.badge .be{font-size:26px}
.badge small{font-size:10.5px;font-weight:700;color:var(--ink-2);line-height:1.2}
@keyframes badgePop{from{transform:scale(.6)}to{transform:scale(1)}}

/* 히스토리 미니 바 차트 */
.hist-bars{display:flex;align-items:flex-end;gap:8px;height:84px;margin:6px 0 12px;padding:0 2px}
.hist-bars .hbar{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:4px}
.hist-bars .hbar i{width:100%;max-width:26px;border-radius:8px 8px 4px 4px;background:linear-gradient(180deg,var(--primary),var(--accent));animation:barGrow .6s cubic-bezier(.2,.8,.2,1)}
.hist-bars .hbar span{font-size:10px;color:var(--muted);font-weight:700}
@keyframes barGrow{from{transform:scaleY(0);transform-origin:bottom}to{transform:scaleY(1)}}
.hist-empty{text-align:center;color:var(--ink-2);font-size:14px;line-height:1.7;padding:8px 0}
.hist-empty b{font-size:20px;color:var(--primary)}
.hist-empty span{font-size:12px;color:var(--muted)}

/* 바텀시트 */
.sheet-backdrop{position:fixed;inset:0;z-index:60;background:rgba(20,20,50,.4);opacity:0;pointer-events:none;transition:opacity .3s;backdrop-filter:blur(2px)}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:61;max-width:460px;margin:0 auto;background:#fff;border-radius:26px 26px 0 0;padding:10px 22px calc(24px + var(--safe-bottom));transform:translateY(110%);transition:transform .38s cubic-bezier(.2,.9,.3,1);box-shadow:0 -12px 40px rgba(20,20,50,.2);max-height:82vh;overflow-y:auto}
.sheet::-webkit-scrollbar{display:none}
body.sheet-open .sheet-backdrop{opacity:1;pointer-events:auto}
body.sheet-open .sheet{transform:translateY(0)}
.sheet-handle{width:44px;height:5px;border-radius:999px;background:#DADCEA;margin:6px auto 14px;cursor:pointer}
.sheet-emoji{font-size:40px;text-align:center}
.sheet-title{font-size:22px;font-weight:800;text-align:center;margin:6px 0}
.sheet-big{text-align:center;font-size:30px;font-weight:800;margin:4px 0 14px}
.sheet-big span{font-size:15px;font-weight:700;display:inline-block;margin-left:4px;padding:3px 10px;border-radius:999px;vertical-align:middle}
.sheet-big.older{color:var(--danger)}.sheet-big.older span{background:#FFEEF1}
.sheet-big.younger{color:var(--good)}.sheet-big.younger span{background:#E4F8F0}
.sheet-tags{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-bottom:14px}
.sheet-tags span{font-size:12px;font-weight:700;padding:5px 12px;border-radius:999px;background:#F0F1F8;color:var(--muted)}
.sheet-tags .dose{background:#E4F8F0;color:var(--good)}
.sheet-p{font-size:14.5px;line-height:1.75;color:var(--ink-2);margin-bottom:12px}
.sheet-p b{color:var(--ink)}
.sheet-note{font-size:11.5px;color:var(--muted);line-height:1.6;background:#F7F8FC;border-radius:12px;padding:11px 13px;margin-bottom:14px}
.sheet-close{margin-top:4px}

/* 공유 시트 */
.share-backdrop{position:fixed;inset:0;z-index:62;background:rgba(20,20,50,.4);opacity:0;pointer-events:none;transition:opacity .3s;backdrop-filter:blur(2px)}
.share-sheet{position:fixed;left:0;right:0;bottom:0;z-index:63;max-width:460px;margin:0 auto;background:#fff;border-radius:26px 26px 0 0;padding:10px 22px calc(24px + var(--safe-bottom));transform:translateY(110%);transition:transform .38s cubic-bezier(.2,.9,.3,1);box-shadow:0 -12px 40px rgba(20,20,50,.2)}
body.share-open .share-backdrop{opacity:1;pointer-events:auto}
body.share-open .share-sheet{transform:translateY(0)}
.share-title{text-align:center;font-size:17px;font-weight:800;margin:2px 0 18px}
.share-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px 8px;margin-bottom:18px}
.share-item{display:flex;flex-direction:column;align-items:center;gap:7px;border:none;background:none;cursor:pointer;font-family:inherit}
.share-item:active{transform:scale(.92)}
.share-item .sh-ic{width:54px;height:54px;border-radius:18px;display:grid;place-items:center;font-size:24px;font-weight:800;box-shadow:var(--shadow-sm)}
.share-item small{font-size:11.5px;font-weight:600;color:var(--ink-2)}

/* 16 노화 타입 목록(시트) */
.types-legend{background:#F7F8FC;border-radius:14px;padding:12px 14px;margin-bottom:14px;display:flex;flex-direction:column;gap:5px}
.types-legend .tl{font-size:12px;color:var(--ink-2);font-weight:600}
.types-legend .tl .g{color:var(--good);font-weight:800}
.types-legend .tl .b{color:#E67E22;font-weight:800}
.types-list{display:flex;flex-direction:column;gap:10px}
.type-item{border:1.5px solid var(--line);border-radius:16px;padding:14px}
.type-item.mine{border-color:var(--primary);background:linear-gradient(180deg,#F8F5FF,#fff)}
.type-body{display:flex;gap:12px;align-items:flex-start}
.type-avatars{display:flex;gap:7px;flex:none}
.tav{display:flex;flex-direction:column;align-items:center;gap:3px}
.tav img{width:50px;height:50px;border-radius:50%;object-fit:cover;background:#EEF0F7;box-shadow:0 3px 8px rgba(30,32,80,.12)}
.tav span{font-size:9.5px;font-weight:800;color:var(--muted)}
.type-info{flex:1;min-width:0}
.type-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.type-code{font-size:12px;font-weight:800;letter-spacing:1.5px;color:#fff;background:linear-gradient(110deg,var(--primary),var(--accent));padding:3px 9px;border-radius:8px}
.type-top b{font-size:15.5px;font-weight:800}
.type-mine{font-size:10.5px;font-weight:800;color:var(--primary);background:#F1ECFF;padding:2px 8px;border-radius:999px;margin-left:auto}
.type-sum{font-size:13px;color:var(--ink-2);line-height:1.55;margin:7px 0 8px}
.type-axes{display:flex;flex-wrap:wrap;gap:6px}
.tax{font-size:10.5px;font-weight:700;padding:3px 8px;border-radius:999px}
.tax.g{background:#E4F8F0;color:var(--good)}
.tax.b{background:#FFF1E6;color:#E67E22}

/* 동의 안내 리스트 */
.consent-list{list-style:none;display:flex;flex-direction:column;gap:12px;margin:6px 0 18px;text-align:left}
.consent-list li{position:relative;padding-left:26px;font-size:14px;line-height:1.65;color:var(--ink-2)}
.consent-list li::before{content:"✓";position:absolute;left:0;top:1px;width:19px;height:19px;border-radius:6px;background:#E4F8F0;color:var(--good);font-size:11px;font-weight:800;display:grid;place-items:center}
.consent-list li b{color:var(--ink)}
/* 결과 하단 면책 캡션 */
.ring-disc{text-align:center;font-size:11px;color:var(--muted);margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}

/* 컨페티 */
.confetti{position:fixed;inset:0;z-index:70;pointer-events:none;display:none}
.confetti.on{display:block}

/* ---- 가독성 향상: 회색 소형 텍스트 조금 크게/진하게 ---- */
.persona .pt .ps{font-size:14.5px;color:var(--ink-2)}
.ax{font-size:13.5px}
.clock .cm{font-size:11.5px}
.clock .cn{font-size:13px}
.supp-rat{font-size:13px}
.ing .it .ib{font-size:13px;color:var(--ink-2)}
.bmeta small{font-size:12.5px}
.qcard .qn{font-size:12.5px}
.reward-grid .rw small{font-size:12px}
.hero-sub{font-size:15.5px;color:var(--ink-2)}
.q-sub{color:var(--ink-2)}
.tip-card{font-size:14.5px}
.mission-head small{font-size:12.5px}
.free-hero p{font-size:13.5px}

/* ---- AI 코칭 로딩 애니메이션 ---- */
.coach-loading{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 6px 22px}
.cl-orb{position:relative;width:88px;height:88px;display:grid;place-items:center;font-size:38px}
.cl-orb #clEmoji{position:relative;z-index:1;animation:clbob 1.5s ease-in-out infinite}
.cl-orb .cl-ring{position:absolute;inset:0;border-radius:50%;border:4px solid transparent;border-top-color:var(--primary);border-right-color:var(--accent);animation:spin 1s linear infinite}
.cl-orb::after{content:"";position:absolute;inset:8px;border-radius:50%;background:radial-gradient(circle,rgba(124,92,255,.18),transparent 70%);animation:clpulse 1.6s ease-in-out infinite}
@keyframes clbob{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-5px) scale(1.08)}}
@keyframes clpulse{0%,100%{transform:scale(.8);opacity:.5}50%{transform:scale(1.25);opacity:1}}
.cl-msg{font-size:15px;font-weight:700;color:var(--ink);transition:opacity .18s;min-height:20px;text-align:center}
.cl-bar{width:100%;max-width:280px;height:10px;border-radius:999px;background:#EDEEF5;overflow:hidden}
.cl-bar i{display:block;width:4%;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--primary),var(--accent));position:relative}
.cl-bar i::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.6),transparent);animation:shimmer 1.2s linear infinite}
@keyframes shimmer{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}
.cl-dots{display:flex;gap:6px}
.cl-dots i{width:7px;height:7px;border-radius:50%;background:var(--accent);animation:blink 1.2s infinite}
.cl-dots i:nth-child(2){animation-delay:.2s}.cl-dots i:nth-child(3){animation-delay:.4s}
.coach-regen{margin-top:16px;width:100%;padding:14px;border-radius:14px;border:1.5px solid #E7E0FF;background:#F4F1FF;color:var(--primary);font-weight:700;font-size:14.5px;cursor:pointer;font-family:inherit;transition:.18s}
.coach-regen:active{transform:scale(.98);background:#EBE4FF}

/* ---- 마이: 무료 히어로 개선 ---- */
.free-hero .fh-feats{display:flex;justify-content:center;gap:16px;margin-top:16px;flex-wrap:wrap}
.free-hero .fh-feat{display:flex;flex-direction:column;align-items:center;gap:5px;font-size:11.5px;font-weight:700;color:#064e3c}
.free-hero .fh-feat span{width:44px;height:44px;border-radius:14px;background:rgba(255,255,255,.9);display:grid;place-items:center;font-size:22px;box-shadow:0 4px 12px rgba(6,58,46,.12)}
/* ---- 마이: CTA 개선 ---- */
.cta{position:relative;overflow:hidden}
.cta::before{content:"";position:absolute;top:-40%;right:-10%;width:200px;height:200px;border-radius:50%;background:rgba(255,255,255,.14)}
.cta::after{content:"";position:absolute;bottom:-50%;left:-15%;width:220px;height:220px;border-radius:50%;background:rgba(255,255,255,.10)}
.cta>*{position:relative;z-index:1}
.cta .btn{gap:8px}

/* ============ 건강 운세 ============ */
.tab .ti svg{width:24px;height:24px}   /* 6탭 대비 아이콘 살짝 축소 */
.tabbar .tab{font-size:10px}
.fortune-intro{display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding:30px 10px 10px;margin:auto 0}
.crystal{position:relative;display:grid;place-items:center}
.crystal.big{width:170px;height:170px;font-size:78px}
.crystal.small{width:74px;height:74px;font-size:40px}
.crystal .cb{position:relative;z-index:2;animation:cbFloat 3.5s ease-in-out infinite;filter:drop-shadow(0 10px 24px rgba(124,92,255,.4))}
.crystal .cb.shake{animation:cbShake .5s ease-in-out infinite}
.crystal .cb-glow{position:absolute;width:70%;height:70%;border-radius:50%;background:radial-gradient(circle,rgba(124,92,255,.5),rgba(18,207,166,.25) 50%,transparent 72%);filter:blur(18px);animation:cbGlow 3s ease-in-out infinite}
.crystal.glow-anim .cb-glow{animation:cbGlow 1.1s ease-in-out infinite}
@keyframes cbFloat{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-12px) rotate(3deg)}}
@keyframes cbShake{0%,100%{transform:translate(0,0) rotate(0)}25%{transform:translate(-4px,2px) rotate(-6deg)}75%{transform:translate(4px,-2px) rotate(6deg)}}
@keyframes cbGlow{0%,100%{opacity:.5;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}
.crystal .spk{position:absolute;font-size:22px;animation:spkTwinkle 2.4s ease-in-out infinite}
.crystal .spk.s1{top:8%;left:12%;animation-delay:0s}
.crystal .spk.s2{top:20%;right:6%;animation-delay:.5s;font-size:17px}
.crystal .spk.s3{bottom:18%;left:4%;animation-delay:1s;font-size:19px}
.crystal .spk.s4{bottom:6%;right:14%;animation-delay:1.6s;font-size:15px}
@keyframes spkTwinkle{0%,100%{opacity:.2;transform:scale(.6) rotate(0)}50%{opacity:1;transform:scale(1.15) rotate(20deg)}}
.ft-title{font-size:26px;font-weight:800;letter-spacing:-.5px}
.ft-sub{color:var(--ink-2);font-size:15px;line-height:1.7}
.ft-note{color:var(--muted);font-size:12px}
.fortune-loading{display:flex;flex-direction:column;align-items:center;gap:18px;padding:40px 10px;margin:auto 0}
.ft-load-msg{font-size:16px;font-weight:700;color:var(--ink);transition:opacity .18s;min-height:22px}

/* 결과 */
.fortune-result{display:flex;flex-direction:column;gap:14px;padding-top:4px}
.fortune-result .sec-title{margin:6px 2px -2px}
.rvf{opacity:0;transform:translateY(18px);animation:rvf .55s cubic-bezier(.2,.9,.3,1) forwards;animation-delay:calc(var(--fi,0)*.11s)}
@keyframes rvf{to{opacity:1;transform:none}}
.ft-hero{display:flex;flex-direction:column;align-items:center;gap:8px;padding:6px 0 2px}
.ft-hero .crystal.small{width:70px;height:70px;font-size:38px}
.ft-stars{display:flex;gap:7px;font-size:36px;line-height:1}
.ft-star{color:#E4E6F0;transform:scale(.4);opacity:0;animation:starPop .5s cubic-bezier(.2,1.6,.5,1) forwards;animation-delay:calc(.55s + var(--si)*.14s)}
.ft-star.on{color:#FFC531;text-shadow:0 3px 12px rgba(255,180,20,.55)}
@keyframes starPop{to{transform:scale(1);opacity:1}}
.ft-stars-label{font-size:13px;font-weight:800;color:var(--ink-2)}
.ft-card{background:#fff;border-radius:22px;padding:20px;box-shadow:var(--shadow);overflow:hidden}
.ft-card .ft-h{font-size:14.5px;font-weight:800;margin-bottom:9px}
.ft-card p{font-size:14.5px;line-height:1.8;color:var(--ink-2);word-break:keep-all}
.ft-main{position:relative;background:linear-gradient(125deg,#7C5CFF,#5FA8E8 55%,#12CFA6);color:#fff;text-align:center;padding:26px 22px}
.ft-main::after{content:"";position:absolute;top:-60%;left:-20%;width:80%;height:200%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.22),transparent);transform:rotate(18deg);animation:ftshine 4s ease-in-out infinite}
@keyframes ftshine{0%{left:-40%}55%,100%{left:120%}}
.ft-summary{position:relative;z-index:1;font-size:19px;font-weight:800;line-height:1.55;word-break:keep-all}
.ft-card.good{border-left:5px solid var(--accent)}
.ft-card.warn{border-left:5px solid var(--amber)}
.lucky-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.lucky{background:#fff;border-radius:20px;padding:18px 10px;text-align:center;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0;transition:transform .18s}
.lucky:active{transform:scale(.96)}
.lucky .lk-ic{font-size:28px;line-height:1}
.lucky .lk-dot{width:34px;height:34px;border-radius:50%;box-shadow:0 4px 12px rgba(0,0,0,.18),inset 0 0 0 3px rgba(255,255,255,.7)}
.lucky b{font-size:16.5px;font-weight:800;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lucky small{font-size:11.5px;color:var(--muted);font-weight:700}
.ft-charm{background:linear-gradient(135deg,#FFF1D0,#FFE0E6);border-radius:22px;padding:24px 20px;text-align:center;box-shadow:var(--shadow);position:relative;overflow:hidden}
.ft-charm::before,.ft-charm::after{content:"🧧";position:absolute;font-size:64px;opacity:.13}
.ft-charm::before{top:-12px;left:-10px;animation:cbFloat 4s ease-in-out infinite}
.ft-charm::after{bottom:-18px;right:-10px;animation:cbFloat 4s ease-in-out infinite reverse}
.ft-charm-label{font-size:12.5px;font-weight:800;color:#B07A00;margin-bottom:9px;position:relative;z-index:1}
.ft-charm-text{font-size:18px;font-weight:800;color:#7a3e00;line-height:1.55;position:relative;z-index:1;word-break:keep-all}
.ft-actions{display:flex;gap:10px}
.ft-actions .btn{flex:1;min-width:0}
.ft-foot{text-align:center;font-size:11.5px;color:var(--muted)}

@media (max-width:360px){.hero-title{font-size:25px}.ring-center .rv{font-size:52px}.sim-younger{font-size:54px}.badge-grid{grid-template-columns:repeat(4,1fr)}.tabbar .tab{font-size:9px}.tab .ti svg{width:22px;height:22px}}
