:root{--b900:#0b3d91;--b700:#1459c2;--b500:#2e7be8;--b100:#eef6ff;--line:#cfe3ff;--ink:#112a4a;--muted:#45658d;--ok:#22895d;--warn:#ad6c00}
*{box-sizing:border-box}body{margin:0;min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","Apple SD Gothic Neo","Noto Sans KR",sans-serif;color:var(--ink);background:radial-gradient(1100px 640px at 10% -10%,#fff 0%,#f3f9ff 45%,#e8f2ff 100%),linear-gradient(180deg,#f8fcff 0%,#eaf4ff 100%);padding:24px;overflow-x:hidden}
.app{width:min(1040px,100%);margin:0 auto;border:1px solid var(--line);border-radius:22px;background:#ffffffdb;box-shadow:0 20px 48px #79acee24;backdrop-filter:blur(3px);padding:24px;overflow:visible}
.header{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:24px;padding:18px 20px;border:1px solid #d8e9ff;border-radius:18px;background:linear-gradient(180deg,#f9fcff 0%,#f1f8ff 100%)}.title{margin:0;color:var(--b900);font-size:1.4rem}.subtitle{margin:6px 0 0;color:var(--muted);font-size:.95rem}.auth-area{display:flex;align-items:center;gap:8px;min-height:40px}.auth-btn{display:inline-flex;align-items:center;justify-content:center;border:1px solid #f3d45c;border-radius:999px;background:#fee500;color:#2b2b2b;font-weight:800;font-size:.86rem;padding:8px 14px;text-decoration:none}.auth-user{display:flex;align-items:center;gap:8px}.auth-name{font-size:.84rem;color:#31567f;font-weight:700}.auth-logout{border:1px solid #cfe3ff;border-radius:999px;background:#fff;color:#255a9c;font-size:.8rem;font-weight:700;padding:7px 10px;cursor:pointer}
.mode-chip{border:1px solid #bfdcff;border-radius:999px;padding:8px 14px;background:var(--b100);color:var(--b900);font-weight:700;font-size:.92rem}
.view{display:none}.view.active{display:block;animation:fadeIn .28s ease}@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.intro-wrap{border:1px solid var(--line);border-radius:22px;background:radial-gradient(900px 420px at 10% -20%,#fff 0%,#f4f9ff 46%,#ecf5ff 100%);padding:28px;display:grid;gap:24px;grid-template-columns:1.1fr 1fr;align-items:center;position:relative;overflow:hidden}
.intro-badge{display:inline-block;border:1px solid #cde2ff;border-radius:999px;padding:6px 10px;background:#f4f9ff;color:#2d5f9e;font-size:.82rem;font-weight:700;margin-bottom:8px}
.intro-title{margin:0;color:#133e7e;font-size:1.72rem;line-height:1.3}.intro-copy{margin:14px 0 0;color:#3f5f88;line-height:1.72;font-size:1rem}
.intro-points{margin-top:16px;display:grid;gap:10px;color:#2d4f7d;font-size:.95rem}.point{border:1px solid #d7e8ff;border-radius:12px;background:#fbfdff;padding:11px 12px}
.intro-visual{border:1px solid #d7e8ff;border-radius:18px;background:linear-gradient(180deg,#f8fbff 0%,#eef5ff 100%);min-height:280px;display:grid;place-items:center;position:relative;overflow:hidden}
.orb{display:none}
.intro-emoji{width:min(220px,45vw);aspect-ratio:1;border-radius:50%;border:4px solid #f0a100;background:radial-gradient(circle at 35% 24%,#fff4c4,#ffd958 56%,#f5ba17 100%);position:relative;box-shadow:inset 0 -10px 18px #d1930026;animation:bob 2.8s ease-in-out infinite}@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
.intro-eyes{position:absolute;top:34%;width:100%;display:flex;justify-content:center;gap:20%}.intro-eye{width:12%;aspect-ratio:1;border-radius:50%;background:#273447}.intro-nose{position:absolute;left:50%;top:52%;transform:translateX(-50%);width:7%;height:5%;border-radius:50% 50% 60% 60%;background:#e6a935}.intro-mouth{position:absolute;left:50%;bottom:17%;transform:translateX(-50%);width:24%;height:7%;border-bottom:3px solid #8f4a08;border-radius:0 0 44px 44px}
.cta-row{margin-top:18px;display:flex;gap:8px;flex-wrap:wrap}.cta-row .primary-btn{position:relative;overflow:hidden;box-shadow:0 10px 28px #2f78e544;font-size:1.08rem;padding:13px 22px;margin-top:2px;border-radius:12px;line-height:1.2}.cta-row .primary-btn::after{content:"";position:absolute;inset:-2px auto -2px -40%;width:36%;background:linear-gradient(90deg,#ffffff00,#ffffffb5,#ffffff00);transform:skewX(-18deg);animation:btnSweep 2.8s ease-in-out infinite}@keyframes btnSweep{0%{left:-40%}60%{left:120%}100%{left:120%}}.home-grid{display:grid;gap:32px;grid-template-columns:1.1fr 1fr}.cookie-policy-card{grid-column:2}
.card{border:1px solid var(--line);border-radius:18px;background:#fff;padding:18px;transition:transform .22s ease,box-shadow .22s ease,border-color .22s ease;position:relative}.card:hover{transform:translateY(-4px) scale(1.01);box-shadow:0 18px 30px #8bb9ee2b;border-color:#9ec8ff}.card h2{margin:0 0 12px;color:var(--b900);font-size:1.06rem}
.info-list{display:grid;gap:14px;font-size:.93rem}.info-item{border:1px solid #dbeaff;border-radius:12px;background:#f7fbff;padding:14px 12px;color:#224061;line-height:1.62}a{color:#0f5fc5;text-underline-offset:2px}
.menu-list{display:grid;gap:14px}.menu-btn{width:100%;text-align:left;border:1px solid #cce2ff;border-radius:12px;background:#f3f9ff;color:#174f9e;padding:14px 12px;font-weight:700;cursor:pointer;transition:transform .15s ease,background .15s ease,border-color .15s ease}.menu-btn:hover{transform:translateY(-1px);background:#edf6ff;border-color:#b8d8ff}.menu-desc{margin-top:7px;font-weight:500;font-size:.85rem;color:#44658d}
.scroll-cta{will-change:transform,box-shadow;transition:transform .35s cubic-bezier(.22,.61,.36,1),box-shadow .25s ease,border-color .25s ease,background .25s ease;transform-origin:center center;white-space:nowrap}
.scroll-cta.is-docked{position:fixed !important;top:12px;z-index:1300;background:rgba(255,255,255,.9) !important;border-color:#d6e6fb !important;color:#1f539b !important;box-shadow:0 10px 20px rgba(23,79,158,.14) !important}
.cta-placeholder{display:none}
.cta-placeholder.active{display:block}
.optician-3d-wrap{width:min(100%,420px);aspect-ratio:1/1;display:grid;place-items:center}
.optician-3d-svg{width:100%;height:100%;display:block;filter:drop-shadow(0 18px 22px rgba(41,82,140,.22))}
.optician-3d-pair{width:min(100%,420px);display:flex;justify-content:center;align-items:flex-end;gap:8px}
.optician-3d-pair .optician-3d-wrap{width:min(49%,156px);aspect-ratio:1/1}
.optician-3d-image-pair{width:min(100%,420px);display:flex;justify-content:center;align-items:flex-end;gap:14px}
.optician-3d-image{width:min(100%,420px);aspect-ratio:16/9;object-fit:cover;object-position:center;border-radius:18px;border:1px solid #cfe0f8;box-shadow:0 14px 28px #4f80bd2e}
.optician-3d-canvas-wrap{width:min(100%,420px);aspect-ratio:16/9;display:grid;place-items:center;position:relative;padding:10px;border-radius:22px;background:linear-gradient(180deg,#ffffff 0%,#f2f8ff 100%);border:1px solid #d8e8ff}
.optician-3d-canvas{width:100%;height:100%;display:none;position:absolute;inset:0;z-index:2;opacity:0;transition:opacity .35s ease}
.optician-3d-canvas.is-ready{opacity:1}
.optician-3d-fallback{display:flex;position:relative;z-index:1}
.game-top{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}.ghost-btn,.primary-btn,.secondary-btn{border:0;border-radius:10px;padding:9px 12px;font-weight:700;cursor:pointer;transition:transform .14s ease,filter .14s ease}.ghost-btn:hover,.primary-btn:hover,.secondary-btn:hover{transform:translateY(-1px);filter:brightness(1.01)}.primary-btn{color:#fff;background:linear-gradient(120deg,var(--b700),var(--b500))}.secondary-btn{border:1px solid #c7deff;color:#1454a8;background:#eff6ff}.ghost-btn{border:1px solid #d2e5ff;color:#1d5eb4;background:#f9fcff}
.game-grid{margin-top:18px;display:grid;gap:24px;grid-template-columns:1fr 1fr}.emoji-wrap{border:1px solid #d7e8ff;border-radius:18px;background:linear-gradient(180deg,#f8fbff 0%,#edf5ff 100%);min-height:350px;display:grid;place-items:center;position:relative;overflow:hidden}
.game-grid.acuity-only{grid-template-columns:1fr}
.blink-corner-time{position:absolute;left:12px;top:12px;padding:6px 10px;border-radius:999px;border:1px solid #c8dcff;background:#ffffffde;color:#1f4f93;font-size:.86rem;font-weight:800;letter-spacing:.01em;box-shadow:0 6px 14px #1f63c61a;pointer-events:none}
.blink-float{position:absolute;left:72%;top:34%;padding:6px 10px;border-radius:999px;background:#ffffffea;border:1px solid #c8dcff;color:#1459c2;font-weight:800;font-size:1.26rem;line-height:1;white-space:nowrap;word-break:keep-all;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 8px 18px #1f63c624;opacity:0;transform:translate3d(0,0,0) scale(.92);pointer-events:none}
.blink-float.show{animation:blinkFloatIn .9s cubic-bezier(.2,.8,.2,1) forwards}
.blink-result-flash{position:absolute;left:50%;top:14px;transform:translateX(-50%);padding:8px 14px;border-radius:999px;font-size:.9rem;font-weight:800;opacity:0;pointer-events:none;white-space:nowrap}
.blink-result-flash.show{animation:resultFlash 1.6s cubic-bezier(.2,.8,.2,1) forwards}
.blink-result-flash.ok{background:#effcf5;border:1px solid #aee6c9;color:#1f7a50;box-shadow:0 8px 16px #1f7a5030}
.blink-result-flash.warn{background:#fff7ec;border:1px solid #ffd596;color:#9e6700;box-shadow:0 8px 16px #9e670030}
@keyframes blinkFloatIn{0%{opacity:0;transform:translate3d(0,10px,0) scale(.9)}15%{opacity:1}100%{opacity:0;transform:translate3d(0,-22px,0) scale(1)}}
@keyframes resultFlash{0%{opacity:0;transform:translateX(-50%) translateY(8px) scale(.96)}20%{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}80%{opacity:1}100%{opacity:0;transform:translateX(-50%) translateY(-8px) scale(.98)}}
.emoji{width:min(320px,66vw);aspect-ratio:1;border-radius:50%;position:relative;border:4px solid #e89b00;background:radial-gradient(circle at 35% 24%,#fff4c4,#ffd958 56%,#f5ba17 100%);box-shadow:inset 0 -12px 24px #d1930028;transition:background .2s ease,border-color .2s ease}.eyes{position:absolute;top:37%;width:100%;display:flex;justify-content:center;gap:18%}.eye{width:17%;aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 35% 30%,#ffffff 0%,#f2f7ff 72%,#d5e3ff 100%);border:1px solid #d0dcf1;position:relative;overflow:hidden;transform:scaleY(1);transform-origin:center;transition:transform .18s cubic-bezier(.22,.61,.36,1),border-radius .18s ease,background .2s ease}.eye.closed{transform:scaleY(.13);border-radius:999px;background:#273447;border-color:transparent}.pupil{display:block;position:absolute;left:50%;top:50%;width:44%;height:44%;border-radius:50%;background:radial-gradient(circle at 38% 35%,#2d4c87 0%,#1b315f 52%,#0d1b36 100%);box-shadow:inset 0 0 0 1px #5c79ae,0 1px 2px #00000022;transform:translate(-50%, -50%);transition:transform .14s cubic-bezier(.2,.8,.2,1),opacity .15s ease}.pupil::after{content:"";position:absolute;left:26%;top:22%;width:22%;height:22%;border-radius:50%;background:#ffffffd9}.eye.closed .pupil{opacity:0}
.rest-gif{display:block;width:min(92%,520px);aspect-ratio:16/9;object-fit:cover;border-radius:18px;border:1px solid #cde0fb;box-shadow:0 16px 32px #4f80bd2a}
.rest-caption{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);padding:6px 12px;border-radius:999px;border:1px solid #cfe3ff;background:#ffffffd9;color:#1d4f93;font-size:.86rem;font-weight:700}
.blush{display:none}.blush.left{left:18%}.blush.right{right:18%}.nose{position:absolute;left:50%;top:52%;transform:translateX(-50%);width:7%;height:5%;border-radius:50% 50% 60% 60%;background:#e6a935}.mouth{position:absolute;left:50%;bottom:17%;transform:translateX(-50%);width:24%;height:8%;border-bottom:4px solid #8f4a08;border-radius:0 0 48px 48px;transition:all .2s ease}
.mouth::before{content:"";position:absolute;left:0;top:8%;width:100%;height:26%;border-top:3px solid #9a623c;border-radius:999px;opacity:.95}
.emoji.emoji-gaze{border-color:#e7a52a;background:radial-gradient(circle at 35% 24%,#fff4c8,#ffd664 56%,#efb22d 100%)}
.emoji.emoji-gaze .eyes{top:37.8%;position:absolute;gap:15%}
.emoji.emoji-gaze .nose,.emoji.emoji-gaze .mouth{display:block}
.emoji.emoji-gaze .blush{display:none}
.emoji.emoji-gaze .eye{width:15%;background:linear-gradient(180deg,#ffffff 0%,#f4f8ff 100%);border:1px solid #d2def1;overflow:visible;border-radius:48% 48% 44% 44%;transform:scaleY(.9)}
.emoji.emoji-gaze .eye::before{content:"";position:absolute;left:14%;top:-11px;width:72%;height:10px;border-top:4px solid #5b3415;border-radius:999px;opacity:.92}
.emoji.emoji-gaze .pupil{width:34%;height:34%;background:#102238 !important;box-shadow:0 1px 1px #00000030}
.emoji.emoji-gaze .pupil::after{display:none}
.emoji.emoji-focus{border-color:#5f7fe0;background:radial-gradient(circle at 35% 24%,#eef2ff,#c9d9ff 56%,#95b4ff 100%)}.emoji.emoji-focus .mouth{width:28%;height:8%;border-bottom-width:4px}.emoji.emoji-reminder{border-color:#4c8dd8;background:radial-gradient(circle at 35% 24%,#e6f5ff,#b8deff 56%,#7cc0f1 100%)}.emoji.emoji-reminder .mouth{width:20%;height:7%;border-bottom-width:4px}.emoji.emoji-acuity{border-color:#7a62de;background:radial-gradient(circle at 35% 24%,#f2eeff,#d7ceff 56%,#b8a9ff 100%)}.emoji.emoji-acuity .mouth{width:24%;height:8%;border-bottom-width:4px}
.emoji.emoji-blink .eye{background:#273447;border:0}
.emoji.emoji-blink .eye.closed{background:#273447;border:0}
.emoji.emoji-blink .pupil{width:38%;height:38%;background:#111c2e;box-shadow:inset 0 0 0 1px #2e3f5f;transition:transform .08s linear,opacity .15s ease}
.emoji.emoji-blink .pupil::after{display:none}
.panel{border:1px solid #d8e9ff;border-radius:12px;background:#fbfdff;padding:10px}.panel h3{margin:0 0 8px;color:#164f9f;font-size:.96rem}.status{color:var(--muted);font-size:.9rem;min-height:1.2rem}.metric{color:#2d4d75;font-size:.88rem;margin-top:4px}.meta{color:#4b6890;font-size:.86rem;margin-top:7px;min-height:1.1rem}.ok{color:var(--ok)}.warn{color:var(--warn)}
.panel.rule-only-shell{border:0;background:transparent;padding:0;border-radius:0;box-shadow:none}
.panel.rule-only-shell > #rulePanel{margin-top:0 !important}
.optotype-wrap{margin-top:8px;border:1px dashed #bfd8ff;border-radius:10px;background:#fff;min-height:110px;display:grid;place-items:center}.optotype-e{font-family:"Arial Black","Segoe UI",sans-serif;font-weight:900;line-height:1;color:#173e77;user-select:none}.ctrl-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.preview-wrap{margin-top:8px;position:relative;border:1px solid #cfe2ff;border-radius:12px;background:#f5faff;overflow:hidden}.camera-preview{display:block;width:100%;height:auto;max-height:220px;object-fit:cover;background:#000}.gaze-overlay{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.camera-watermark{position:absolute;right:8px;bottom:8px;z-index:8;display:inline-flex;align-items:center;gap:6px;padding:4px 7px;border:1px solid rgba(255,255,255,.28);border-radius:999px;background:rgba(12,20,34,.42);color:#f2f7ff;font-size:.62rem;font-weight:700;letter-spacing:.01em;pointer-events:none;backdrop-filter:blur(1.5px)}.camera-watermark img{width:12px;height:12px;object-fit:contain;opacity:.9}.hidden{display:none}.notice{margin-top:18px;padding:12px 14px;border:1px solid #c8dcfb;border-radius:12px;background:linear-gradient(180deg,#f8fcff 0%,#eef6ff 100%);color:#254f84;font-size:.92rem;font-weight:600;line-height:1.6;letter-spacing:.01em;box-shadow:0 6px 14px #85b2e61c}.intro-glasses{position:absolute;left:50%;top:31%;transform:translateX(-50%);width:60%;height:18%;display:flex;align-items:center;justify-content:space-between;pointer-events:none}.glass-lens{width:39%;height:100%;border:3px solid #456083;border-radius:12px;background:linear-gradient(180deg,#ffffff88 0%,#dcecff22 100%)}.glass-bridge{width:13%;height:3px;background:#456083;border-radius:999px}.news-status{color:#4b6890;font-size:.9rem;min-height:1.1rem;margin-bottom:12px}.news-list{display:grid;gap:14px;list-style:none;margin:0 0 24px;padding:0}.news-item{border:1px solid #dbeaff;border-radius:12px;background:#f7fbff;padding:14px 12px}.news-title{font-size:.96rem;font-weight:700;color:#174f9e;text-decoration:none}.news-summary{margin:8px 0 0;color:#355985;font-size:.88rem;line-height:1.6}.news-meta{margin-top:8px;color:#5b769a;font-size:.82rem;display:flex;gap:10px;flex-wrap:wrap}.market-links{display:grid;gap:10px;margin-top:8px}.intro-sections{display:grid;gap:40px;grid-template-columns:1fr 1fr;margin-top:40px}.intro-sections .card{padding:20px}.intro-sections .card h2{margin-bottom:14px}.intro-sections .info-item{font-size:1rem;line-height:1.8;padding:16px 17px}.app-intro-card{grid-column:1/-1;opacity:1 !important;transform:none !important;transition:none !important}.app-intro-card:hover{transform:none;box-shadow:none;border-color:var(--line)}.ar-fit-card .info-item{margin-bottom:12px}.ar-fit-card .menu-btn{display:inline-flex;width:auto;min-width:210px;justify-content:center;padding:11px 16px}.home-top{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}.reveal{opacity:.01;transform:translateY(16px) scale(.99);transition:opacity .5s ease,transform .5s ease}.reveal.in{opacity:1;transform:translateY(0) scale(1)}.hero-pin{position:relative}.intro-wrap::before{content:"";position:absolute;inset:-20% -10% auto -10%;height:48%;background:radial-gradient(circle at 40% 20%,#a9ceff70 0%,#ffffff00 70%);pointer-events:none;animation:heroGlow 7s ease-in-out infinite}.intro-visual .aurora{position:absolute;inset:auto -12% -30% -12%;height:56%;background:radial-gradient(ellipse at center,#83b8ff66 0%,#5b9dff22 40%,#ffffff00 78%);filter:blur(10px);animation:auroraMove 8s ease-in-out infinite}.intro-visual .scanline{position:absolute;left:-40%;top:18%;width:45%;height:2px;background:linear-gradient(90deg,#ffffff00,#ffffffb8,#ffffff00);transform:rotate(-7deg);animation:scanMove 4.8s linear infinite}.ticker{margin-top:14px;border:1px solid #cfe3ff;border-radius:999px;background:#f4f9ff;overflow:hidden}.ticker-track{display:flex;gap:24px;padding:10px 16px;white-space:nowrap;min-width:max-content;animation:tickerMove 16s linear infinite}.ticker-item{font-size:.82rem;color:#2f5b97}.magnetic{will-change:transform}.scroll-fade{animation:softPulse 2.2s ease-in-out infinite}.intro-wrap[data-stage="1"] .aurora{opacity:.55}.intro-wrap[data-stage="2"] .aurora{opacity:.9;transform:scale(1.05)}.intro-wrap[data-stage="3"] .scanline{opacity:1}.intro-wrap[data-stage="4"] .optician-group{transform:none}.optician-group{position:relative;display:flex;align-items:flex-end;justify-content:center;gap:10px;width:min(440px,92vw);transition:transform .35s ease}.optician-figure{position:relative;width:min(155px,34vw);aspect-ratio:1;display:grid;place-items:center}.optician-head{position:absolute;top:14%;width:58%;height:58%;border-radius:50%;background:radial-gradient(circle at 45% 30%,#ffe5cf,#ffd1ab 70%,#f4b98b 100%);border:3px solid #dca57e}.optician-hair{position:absolute;top:10%;width:62%;height:24%;border-radius:50px 50px 28px 28px;background:#2f3f57}.optician-bangs{position:absolute;top:17%;width:52%;height:14%;border-radius:0 0 24px 24px;background:#3a4b65;z-index:2}.optician-eyes{position:absolute;top:33%;width:34%;display:flex;justify-content:space-between}.optician-eyes span{width:12px;height:12px;background:#243244;border-radius:50%}.optician-glasses{position:absolute;top:29%;width:46%;height:14%;display:flex;justify-content:space-between;align-items:center}.optician-glasses .lens{width:38%;height:100%;border:3px solid #3e5a80;border-radius:10px;background:#ffffff66}.optician-glasses .bridge{width:14%;height:3px;background:#3e5a80;border-radius:99px}.optician-mouth{position:absolute;top:50%;width:16%;height:6%;border-bottom:3px solid #8a4a16;border-radius:0 0 18px 18px}.optician-coat{position:absolute;bottom:8%;width:74%;height:42%;border-radius:24px 24px 16px 16px;background:linear-gradient(180deg,#ffffff,#e9f1ff);border:2px solid #cddff8}.optician-shirt{position:absolute;bottom:20%;width:30%;height:22%;background:#d9ebff;border-radius:12px}.optician-tie{position:absolute;bottom:16%;width:8%;height:18%;background:#1e5bb6;clip-path:polygon(50% 0,100% 32%,74% 100%,26% 100%,0 32%)}.optician-figure.female .optician-hair{background:#4a3a5f}.optician-figure.female .optician-bangs{background:#524069}.optician-figure.female .optician-shirt{background:#f2e7ff}.optician-figure.female .optician-tie{background:#7a4ecb}@keyframes heroGlow{0%,100%{opacity:.55;transform:translateY(0)}50%{opacity:.95;transform:translateY(6px)}}@keyframes auroraMove{0%,100%{transform:translateX(-6%) scale(1)}50%{transform:translateX(6%) scale(1.08)}}@keyframes scanMove{0%{left:-45%}100%{left:125%}}@keyframes tickerMove{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}@keyframes softPulse{0%,100%{filter:saturate(1)}50%{filter:saturate(1.18)}}
.optotype-wrap{position:relative;overflow:hidden}
.acuity-firework{position:absolute;left:50%;top:50%;width:10px;height:10px;border-radius:50%;pointer-events:none;opacity:0;transform:translate(-50%,-50%) scale(.2);box-shadow:0 0 0 0 #ffd447}
.acuity-firework.show{animation:acuityBurst 780ms cubic-bezier(.2,.8,.2,1) forwards}
@keyframes acuityBurst{
  0%{opacity:0;transform:translate(-50%,-50%) scale(.2);box-shadow:0 0 0 0 #ffd447}
  20%{opacity:1;transform:translate(-50%,-50%) scale(.85);box-shadow:0 -22px 0 2px #ffd447,0 22px 0 2px #ffd447,22px 0 0 2px #60d6ff,-22px 0 0 2px #60d6ff}
  55%{opacity:1;transform:translate(-50%,-50%) scale(1.05);box-shadow:0 -38px 0 3px #ffd447,0 38px 0 3px #ffd447,38px 0 0 3px #60d6ff,-38px 0 0 3px #60d6ff,27px 27px 0 3px #ff8fa8,-27px -27px 0 3px #ff8fa8,27px -27px 0 3px #98e67f,-27px 27px 0 3px #98e67f}
  100%{opacity:0;transform:translate(-50%,-50%) scale(1.2);box-shadow:0 -54px 0 1px #ffd447,0 54px 0 1px #ffd447,54px 0 0 1px #60d6ff,-54px 0 0 1px #60d6ff,38px 38px 0 1px #ff8fa8,-38px -38px 0 1px #ff8fa8,38px -38px 0 1px #98e67f,-38px 38px 0 1px #98e67f}
}
.preview-wrap.real-world .camera-preview{transform:scaleX(-1);transform-origin:center}
.permission-help{margin-top:10px;border:1px solid #cde1ff;border-radius:12px;background:linear-gradient(180deg,#f8fcff 0%,#eef6ff 100%);padding:10px 11px;color:#2f527f}.permission-help.hidden{display:none}.permission-title{font-size:.88rem;font-weight:700;color:#1d56a9}.permission-text{margin-top:4px;font-size:.82rem;line-height:1.5}.permission-actions{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}.mini-btn{border:1px solid #c8ddff;border-radius:9px;background:#fff;color:#1e56a8;font-size:.8rem;font-weight:700;padding:7px 10px;cursor:pointer}.evidence-summary{margin-top:14px;border:1px solid #cfe2ff;border-radius:14px;background:linear-gradient(180deg,#f8fcff 0%,#eef6ff 100%);padding:14px}.evidence-summary h3{margin:0 0 10px;color:#164f9f;font-size:1rem}.evidence-summary p{margin:0 0 10px;color:#325780;font-size:.9rem;line-height:1.6}.evidence-list{display:grid;gap:8px}.evidence-item{border:1px solid #d7e8ff;border-radius:10px;background:#fff;padding:9px 10px;color:#2f527f;font-size:.87rem;line-height:1.55}
#blinkGoal,#blinkCountLine,#blinkTimeLine{font-size:.98rem;font-weight:700;letter-spacing:.01em;color:#1f4f93;line-height:1.45}
#blinkGoal{color:#1b4a8a}
#blinkCountLine{color:#0f5dbd}
#blinkTimeLine{color:#335e92}
.emoji.session-finish-pop{animation:finishPop .55s cubic-bezier(.2,.8,.2,1)}
.emoji.finish-ok{animation:finishOkBounce .9s cubic-bezier(.2,.8,.2,1)}
.emoji.finish-ok .blush{display:block;opacity:.7}
.emoji.finish-ok .mouth{box-shadow:inset 0 -5px 0 #6e3f1d !important}
.emoji.finish-warn{animation:finishWarnDip .9s cubic-bezier(.2,.8,.2,1)}
.emoji.finish-warn .mouth{box-shadow:inset 0 -3px 0 #8b5a35 !important;transform:translateX(-50%) scaleX(.92)}
.emoji.finish-warn .eyes{transform:translateY(2px)}
#blinkPanel.set-done-ok,#blinkPanel.set-done-warn{animation:panelDone .65s cubic-bezier(.2,.8,.2,1)}
#blinkPanel.set-done-ok{border-color:#7ad0a7;box-shadow:0 0 0 3px #dff7ec inset}
#blinkPanel.set-done-warn{border-color:#efc77a;box-shadow:0 0 0 3px #fff3de inset}
.blink-finish-card{margin-top:6px;border-radius:12px;padding:10px 12px;border:1px solid #d3e5ff;background:linear-gradient(180deg,#f8fbff,#f2f8ff)}
.blink-finish-card .finish-title{font-size:.96rem;font-weight:800}
.blink-finish-card .finish-body{margin-top:4px;font-size:.9rem;color:#325780}
.blink-finish-card .finish-tip{margin-top:4px;font-size:.84rem;color:#4b6f98}
.blink-finish-card.ok{border-color:#b9ebcf;background:linear-gradient(180deg,#f5fff9,#ecfff4)}
.blink-finish-card.ok .finish-title{color:#1f7a50}
.blink-finish-card.warn{border-color:#ffdca5;background:linear-gradient(180deg,#fff9ef,#fff4df)}
.blink-finish-card.warn .finish-title{color:#9e6700}
.acuity-fx{margin-top:8px;padding:8px 10px;border-radius:10px;font-weight:800;font-size:.92rem;opacity:0;transform:translateY(6px) scale(.96);pointer-events:none}
.acuity-fx.show{animation:acuityFxIn .55s cubic-bezier(.2,.8,.2,1) forwards}
.acuity-fx.ok{background:#effcf5;border:1px solid #aee6c9;color:#1f7a50;box-shadow:0 8px 16px #1f7a5030}
.acuity-fx.warn{background:#fff7ec;border:1px solid #ffd596;color:#9e6700;box-shadow:0 8px 16px #9e670030}
.acuity-count-fx{margin-top:6px;display:inline-flex;align-items:center;justify-content:center;min-width:84px;padding:6px 10px;border-radius:999px;background:#eaf2ff;border:1px solid #b9cdf6;color:#1f4f9d;font-weight:900;font-size:.88rem;opacity:0;transform:translateY(6px) scale(.96)}
.acuity-count-fx.show{animation:acuityCountIn .45s ease forwards}
#optotypeE.acuity-hit{animation:acuityHit .35s ease}
#optotypeE.acuity-miss{animation:acuityMiss .38s ease}
#acuityPanel.set-done-ok{animation:acuityPanelWin .95s cubic-bezier(.2,.8,.2,1);border-color:#7ad7b0;box-shadow:0 0 0 3px #aef0d2,0 14px 28px #1e8b5f2b;background:linear-gradient(180deg,#f8fffb 0%,#eefcf5 100%)}
#acuityPanel.set-done-warn{animation:acuityPanelWarn .6s ease;border-color:#ffd39b;box-shadow:0 0 0 2px #ffe5bf,0 10px 20px #b9751f24;background:linear-gradient(180deg,#fffdf8 0%,#fff7ea 100%)}
#optotypeWrap.set-done-ok{animation:acuityWrapWin .95s cubic-bezier(.2,.8,.2,1);border-style:solid;border-color:#73d1aa;box-shadow:0 0 0 3px #b8efd6,0 14px 24px #1e8b5f2b inset,0 10px 20px #1e8b5f24;background:linear-gradient(180deg,#f9fffc 0%,#eefcf5 100%)}
#optotypeWrap.set-done-warn{animation:acuityWrapWarn .6s ease;border-style:solid;border-color:#ffc785;box-shadow:0 0 0 2px #ffe0b7,0 8px 16px #b9751f20 inset;background:linear-gradient(180deg,#fffdfa 0%,#fff8ef 100%)}
@keyframes acuityFxIn{0%{opacity:0;transform:translateY(8px) scale(.96)}35%{opacity:1;transform:translateY(0) scale(1)}100%{opacity:0;transform:translateY(-4px) scale(.99)}}
@keyframes acuityCountIn{0%{opacity:0;transform:translateY(7px) scale(.96)}60%{opacity:1;transform:translateY(0) scale(1)}100%{opacity:1;transform:translateY(0) scale(1)}}
@keyframes acuityHit{0%{filter:brightness(1)}40%{filter:brightness(1.35)}100%{filter:brightness(1)}}
@keyframes acuityMiss{0%{opacity:1}35%{opacity:.55}70%{opacity:1}100%{opacity:1}}
@keyframes acuityPanelWin{0%{transform:scale(.985)}30%{transform:scale(1.018)}60%{transform:scale(.998)}100%{transform:scale(1)}}
@keyframes acuityPanelWarn{0%{transform:translateY(0)}35%{transform:translateY(3px)}100%{transform:translateY(0)}}
@keyframes acuityWrapWin{0%{transform:scale(.985)}30%{transform:scale(1.02)}60%{transform:scale(.998)}100%{transform:scale(1)}}
@keyframes acuityWrapWarn{0%{transform:translateY(0)}35%{transform:translateY(2px)}100%{transform:translateY(0)}}
@keyframes panelDone{0%{transform:scale(.98)}45%{transform:scale(1.02)}100%{transform:scale(1)}}
@keyframes finishPop{0%{transform:scale(1)}55%{transform:scale(1.06)}100%{transform:scale(1)}}
@keyframes finishOkBounce{0%{transform:scale(1)}35%{transform:scale(1.08)}70%{transform:scale(.99)}100%{transform:scale(1)}}
@keyframes finishWarnDip{0%{transform:translateY(0)}35%{transform:translateY(4px) scale(.98)}100%{transform:translateY(0) scale(1)}}
.emoji.gaze-step-success{animation:gazeStepPulse .5s cubic-bezier(.2,.8,.2,1)}
.emoji.gaze-step-success .mouth{box-shadow:inset 0 -5px 0 #2b8f63 !important}
@keyframes gazeStepPulse{0%{transform:scale(1)}45%{transform:scale(1.06)}100%{transform:scale(1)}}
@media (max-width:1100px){.intro-wrap{grid-template-columns:1fr;gap:16px;align-items:stretch;overflow:hidden}.intro-visual{min-height:auto;padding:12px}.intro-points{gap:8px}.point{padding:10px}.hero-pin{position:relative !important;top:auto !important}}
@media (max-width:940px){.cookie-policy-card{grid-column:auto}.intro-wrap,.intro-sections,.home-grid,.game-grid{grid-template-columns:1fr !important}.hero-pin{position:relative !important;top:auto !important}.intro-wrap{transform:none !important;overflow:hidden;padding:18px}.intro-wrap::before{display:none}.intro-title{font-size:1.34rem;line-height:1.34}.intro-copy{font-size:.94rem;line-height:1.65}.intro-points{margin-top:12px}.intro-visual{min-height:auto;overflow:hidden;padding:10px}.optician-group{width:100%;max-width:360px;gap:0;transform:none !important}.optician-3d-canvas-wrap{width:100%;max-width:360px;padding:8px}.optician-3d-image-pair,.optician-3d-image{width:100%}.optician-figure{width:min(128px,40vw)}.ticker{margin-top:12px}.ticker-track{gap:16px;padding:8px 12px}.card{transform:none !important}.app{padding:14px}}
@media (max-width:600px){body{padding:10px}.app{border-radius:16px;padding:12px}.header{padding:12px 13px;margin-bottom:12px;border-radius:14px}.intro-wrap{padding:15px;gap:12px;overflow:hidden}.intro-title{font-size:1.16rem}.intro-copy{font-size:.88rem}.intro-points{font-size:.85rem}.point{padding:8px}.intro-visual{min-height:auto;padding:8px}.intro-sections{gap:20px;margin-top:22px}.intro-sections .card{padding:12px}.intro-sections .info-item{font-size:.92rem;line-height:1.65;padding:11px 12px}.ar-fit-card .info-item{margin-bottom:10px}.ar-fit-card .menu-btn{width:100%;min-width:0;padding:10px 12px;font-size:.92rem}.card{padding:11px}.home-grid,.game-grid{gap:16px}.optician-group{width:100%;max-width:300px;gap:0;transform:none !important}.optician-3d-canvas-wrap{width:100%;max-width:300px;padding:6px}.optician-3d-image-pair,.optician-3d-image{width:100%}.optician-figure{width:min(108px,41vw)}.ticker-track{gap:12px;padding:7px 10px}.ticker-item{font-size:.76rem}.cta-row .primary-btn{width:100%}.menu-btn{font-size:.9rem}}
/* hero image layout: remove nested card shell and fit image to parent section width */
.intro-wrap>article{min-width:0}
.ticker{max-width:100%;margin-top:18px}
.ticker-track{display:inline-flex;width:max-content;animation:tickerMove 14s linear infinite !important;will-change:transform}
@keyframes tickerMove{0%{transform:translate3d(0,0,0)}100%{transform:translate3d(-50%,0,0)}}
.intro-visual{border:0 !important;background:transparent !important;box-shadow:none !important;padding:18px 0 !important;min-height:auto !important;overflow:visible !important}
.optician-group{width:100% !important;max-width:none !important;gap:0 !important;transform:none !important}
.optician-3d-canvas-wrap{width:100% !important;max-width:none !important;padding:0 !important;border:0 !important;border-radius:0 !important;background:transparent !important}
.optician-3d-image-pair{width:100% !important;max-width:none !important}
.optician-3d-image{width:100% !important;max-width:none !important;border-radius:14px}
.optician-figure{width:min(48%,155px)}
@media (max-width:940px){.intro-visual{padding:14px 0 !important}.optician-figure{width:calc((100% - 8px)/2);max-width:128px}}
@media (max-width:600px){.intro-visual{padding:12px 0 !important}.optician-figure{width:calc((100% - 6px)/2);max-width:108px}}
.focus-phase{display:inline-flex;align-items:center;justify-content:center;padding:2px 8px;border-radius:999px;font-weight:800}
.focus-phase.near{background:#eef6ff;color:#1f4f9d;border:1px solid #c8dfff}
.focus-phase.far{background:#effcf5;color:#1f7a50;border:1px solid #b7e7cd}
.emoji.focus-near{transform:scale(1.03);filter:saturate(1.04);transition:transform .45s ease,filter .45s ease}
.emoji.focus-near .eyes{transform:translateY(1px) scale(.98)}
.emoji.focus-near .mouth{transform:translateX(-50%) scaleX(1.07)}
.emoji.focus-far{transform:scale(.985);filter:saturate(.96);transition:transform .45s ease,filter .45s ease}
.emoji.focus-far .eyes{transform:translateY(0) scale(1.02)}
.emoji.focus-far .mouth{transform:translateX(-50%) scaleX(.94)} .circle-track-area{margin-top:8px;position:relative;height:180px;border:1px dashed #bfd8ff;border-radius:12px;background:radial-gradient(circle at 50% 50%,#ffffff 0%,#f0f6ff 100%);overflow:hidden}.circle-track-area::before{content:"";position:absolute;left:50%;top:50%;width:76%;height:76%;transform:translate(-50%,-50%);border:1px solid #d2e3ff;border-radius:50%}.circle-target,.circle-cursor{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);border-radius:50%;pointer-events:none}.circle-target{width:18px;height:18px;background:#2f7cff;box-shadow:0 0 0 4px #2f7cff2e}.circle-cursor{width:14px;height:14px;background:#ff9f2f;box-shadow:0 0 0 3px #ff9f2f2e}
#circlePanel.set-done-ok{border-color:#79d5ae;box-shadow:0 0 0 3px #dff7ec inset,0 12px 24px #1e8b5f22;animation:circlePanelOk .8s cubic-bezier(.2,.8,.2,1)}
#circlePanel.set-done-warn{border-color:#ffd08f;box-shadow:0 0 0 3px #fff1dd inset,0 12px 24px #9e67001f;animation:circlePanelWarn .6s ease}
#circlePanel.set-done-ok .circle-track-area{border-color:#8fdfba;background:radial-gradient(circle at 50% 50%,#f7fff9 0%,#ebfff2 100%)}
#circlePanel.set-done-warn .circle-track-area{border-color:#ffd8a9;background:radial-gradient(circle at 50% 50%,#fffdf7 0%,#fff6eb 100%)}
#circlePanel.set-done-ok .circle-target{animation:circleTargetWin .8s ease}
#circlePanel.set-done-ok .circle-cursor{animation:circleCursorWin .8s ease}
@keyframes circlePanelOk{0%{transform:scale(.985)}35%{transform:scale(1.015)}100%{transform:scale(1)}}
@keyframes circlePanelWarn{0%{transform:translateY(0)}35%{transform:translateY(3px)}100%{transform:translateY(0)}}
@keyframes circleTargetWin{0%{transform:translate(-50%,-50%) scale(1)}45%{transform:translate(-50%,-50%) scale(1.25)}100%{transform:translate(-50%,-50%) scale(1)}}
@keyframes circleCursorWin{0%{transform:translate(-50%,-50%) scale(1)}45%{transform:translate(-50%,-50%) scale(1.2)}100%{transform:translate(-50%,-50%) scale(1)}}

/* AR fitting card button differentiation */
.ar-fit-card .menu-btn:first-of-type {
  border-color: #b8d4f5;
  background: linear-gradient(135deg, #f0f7ff 0%, #e4f0ff 100%);
}
.ar-fit-card .menu-btn:last-of-type {
  border-color: #c5b8f5;
  background: linear-gradient(135deg, #f3f0ff 0%, #ece4ff 100%);
  color: #5b3ea6;
}
.ar-fit-card .menu-btn:last-of-type:hover {
  border-color: #a898e8;
  background: linear-gradient(135deg, #ebe4ff 0%, #ddd2ff 100%);
}

/* Mobile optimization */
@media (max-width: 768px) {
  body { padding: 8px; }
  .app { padding: 12px; border-radius: 14px; }
  .intro-wrap { grid-template-columns: 1fr; padding: 18px; }
  .intro-sections { grid-template-columns: 1fr; gap: 20px; }
  .intro-sections .card { padding: 14px; }
  .home-grid { grid-template-columns: 1fr; }
  .cookie-policy-card { grid-column: auto; }
  .game-grid { grid-template-columns: 1fr; }
  .header { padding: 12px 14px; }
  .title { font-size: 1.15rem; }
  .optician-group { width: min(320px, 88vw); }
}
