:root{font-family:Inter,"Noto Sans TC",system-ui,sans-serif;color:#fff;background:#090c17;color-scheme:dark;font-synthesis:none}*{box-sizing:border-box}body{margin:0;overflow:hidden}button,a,input,select{font:inherit}button,a{touch-action:manipulation}button{cursor:pointer;border:1px solid #ffffff36;border-radius:12px;background:#171d33;color:inherit;padding:13px 22px;font-weight:650;min-height:48px}button:hover{background:#353356}button:disabled{cursor:wait;opacity:.5}button.primary{background:#8b3dff;border-color:#ac79ff;box-shadow:0 8px 32px #7628ff30;min-width:180px}a{color:inherit}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid #b6eaff;outline-offset:5px}.hidden,[hidden]{display:none!important}.stage{position:fixed;inset:0;background:radial-gradient(ellipse at 50% 45%,#26204a,#090c17 75%)}.stage.bloom{background:radial-gradient(ellipse at 48% 40%,#fff2df,#e4c8b2);color:#28202b;color-scheme:light}.stage>canvas{position:absolute;inset:0;width:100%;height:100%}#camera{opacity:.85}.bloom #camera{inset:auto auto 98px 28px;width:190px;height:108px;border-radius:12px;opacity:.75}.stage.time-portrait #camera{opacity:.35}#portrait{position:absolute;left:12%;top:14%;width:52%;height:72%;object-fit:contain;filter:drop-shadow(0 16px 50px #0006)}header{position:absolute;inset:0 0 auto;z-index:8;display:flex;justify-content:space-between;align-items:center;padding:22px 32px;background:linear-gradient(#090c1799,transparent)}.bloom header{background:none}.brand{display:flex;align-items:center;gap:10px;text-decoration:none;font-size:20px;font-weight:800}.brand img{width:40px;height:40px}header h1{font-size:20px;margin:0;letter-spacing:.08em}header nav{display:flex;gap:10px;align-items:center}header nav a{font-size:14px;color:inherit;text-decoration:none}header button{padding:8px 13px;background:transparent;min-height:40px;font-size:13px}.overlay{position:absolute;z-index:7;inset:0;display:grid;place-items:center;background:#090c17c9;backdrop-filter:blur(10px);padding:88px 24px 24px;overflow:auto}.bloom .overlay{background:#f5e8dbdb}.panel{max-width:680px;width:100%;text-align:center}.eyebrow{text-transform:uppercase;letter-spacing:.2em;color:#bea0ee;font-size:13px;margin-bottom:18px}.bloom .eyebrow{color:#72428e}.panel h2{font-size:clamp(30px,4vw,56px);line-height:1.25;font-weight:750;margin:0 0 24px;letter-spacing:-.03em}.panel p{font-size:18px;line-height:1.8;opacity:.8;max-width:560px;margin:0 auto 24px}.actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}.text-button{background:transparent;border:none;text-decoration:underline;box-shadow:none!important;min-width:0!important}.consent{display:flex;align-items:flex-start;gap:10px;text-align:left;margin:0 auto 24px;max-width:550px;font-size:15px;line-height:1.8}.consent input{margin-top:7px;flex-shrink:0;width:19px;height:19px;accent-color:#8b3dff}.hud{position:absolute;z-index:4;left:32px;right:32px;bottom:26px;text-align:center;pointer-events:none}.hud h2{font-size:clamp(22px,3.5vw,48px);margin:0 0 9px;text-shadow:0 2px 20px #0008}.bloom .hud h2{text-shadow:none}.hud p{font-size:clamp(14px,1.6vw,24px);opacity:.8;margin:0 0 20px}.hud .actions,.hud input{pointer-events:auto}.notice{position:absolute;top:90px;left:50%;transform:translateX(-50%);z-index:6;background:#131827e8;border:1px solid #fff3;padding:11px 20px;border-radius:30px;font-size:14px;text-align:center;max-width:90%;pointer-events:none}.bloom .notice{background:#fff9;color:#34263a;border-color:#34263a30}.notice.warning{background:#75472bf0;color:white}#cursor{position:absolute;z-index:9;width:24px;height:24px;border:3px solid #fff;border-radius:50%;box-shadow:0 0 24px #8b3dff;transform:translate(-50%,-50%);pointer-events:none}#cursor.pinching{background:#8b3dff}#calibration{height:6px;border-radius:8px;overflow:hidden;background:#fff2;max-width:340px;margin:26px auto}#calibration span{display:block;background:#ad77ff;height:100%;width:0;transition:width .15s}.counter{font-size:120px!important;font-weight:800;line-height:1}#result-image{display:block;width:100%;max-height:51vh;object-fit:contain;border-radius:10px;margin:0 auto 20px}#qr{background:white;padding:10px;border-radius:8px;width:160px;height:160px;object-fit:contain;margin:10px auto}#result-details{font-size:14px}dialog{border:1px solid #8e80ad;border-radius:20px;background:#171b2c;color:white;padding:28px;max-width:500px;width:calc(100% - 36px);max-height:88vh;overflow:auto}dialog::backdrop{background:#000a;backdrop-filter:blur(5px)}dialog h2{margin-top:0}dialog label{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:18px 0;font-size:15px}dialog input[type=checkbox]{width:20px;height:20px;accent-color:#8b3dff}dialog select,dialog input[type=text]{max-width:220px;width:50%;border:1px solid #62647c;background:#252b42;color:white;padding:9px;border-radius:7px}dialog small{color:#aaaec3;line-height:1.7;display:block}#age-controls{position:absolute;z-index:5;right:5%;width:26%;top:25%}#age-controls h2{font-size:34px;line-height:1.3}#age-controls p{color:#b4b9d0;line-height:1.7}#ages{display:flex;gap:10px;margin:25px 0}#ages button{padding:12px;min-width:50px}#ages .active{background:#8b3dff;border-color:#b482ff}#age-slider{width:100%;accent-color:#a479ff}progress{accent-color:#a479ff;width:240px;height:8px;margin:24px 0}#source-preview{max-width:100%;max-height:40vh;border-radius:12px;margin-bottom:22px}.bloom button:not(.primary){color:inherit;background:#ffffff45;border-color:#3c284336}.status-meta{font-size:12px!important;letter-spacing:.04em;opacity:.65!important;margin-top:14px!important}.bloom .panel p{color:#4e3d49}.bloom .primary{color:white}.links{display:flex;justify-content:center;gap:24px;margin-top:20px;font-size:14px}.source-tag{position:absolute;left:24px;top:100px;z-index:6;background:#382e58db;color:#e8dbff;border:1px solid #be99ff77;border-radius:8px;padding:8px 14px;font-size:13px}.busy{animation:pulse 1.6s ease infinite}@keyframes pulse{50%{opacity:.45}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}@media(max-width:700px){header{padding:14px 18px}header h1{font-size:15px}header nav a{display:none}.brand{font-size:16px}.brand img{width:32px;height:32px}.hud{left:15px;right:15px;bottom:16px}.hud button{padding:10px 15px;min-width:0}.notice{top:75px;font-size:12px;width:max-content;max-width:92%}.panel p{font-size:16px}.panel h2{font-size:32px}#portrait{left:5%;top:15%;width:90%;height:46%}#age-controls{left:8%;right:8%;width:84%;top:61%}#age-controls h2{font-size:22px;margin:0}#age-controls p{display:none}#ages{margin:12px 0}.stage.bloom #camera{width:110px;height:64px;left:15px;bottom:150px}.source-tag{top:76px;left:15px;font-size:11px}}
#life-progress{position:absolute;right:32px;top:110px;display:grid;gap:8px;width:150px;color:#614954;font-size:14px}#life-progress[hidden]{display:none}#life-progress progress{width:100%;height:6px;accent-color:#9e1844}#life-progress small{font-size:11px}@media(max-width:700px){#life-progress{top:100px;right:16px;width:110px}}

#round-time{position:absolute;top:145px;left:24px;z-index:4;font-size:12px;opacity:.7;letter-spacing:.04em}dialog fieldset{border:1px solid #62647c;border-radius:10px;padding:4px 14px}dialog legend{font-size:13px;padding:0 6px}dialog fieldset label{margin:12px 0}@media(max-width:700px){#round-time{top:115px;left:15px}}

#cursor::after{content:"";position:absolute;inset:-10px;border-radius:50%;background:conic-gradient(#bda3ff calc(var(--dwell-progress,0) * 1turn),transparent 0);mask:radial-gradient(farthest-side,transparent calc(100% - 4px),#000 0);opacity:0}#cursor.dwell-active::after{opacity:1}
.time-portrait #instruction{display:none}@media(min-width:701px){.time-portrait #subinstruction{display:none}}

@media(max-width:700px){.stage.time-portrait .notice{top:110px}.stage.time-portrait #age-controls{top:auto;bottom:128px}.stage.time-portrait #portrait{top:114px;height:calc(100% - 422px)}.stage.time-portrait:has(.notice.warning:not(.hidden)) #portrait{top:166px;height:calc(100% - 474px)}.stage.time-portrait .hud .actions{gap:6px}.stage.time-portrait .hud button{font-size:14px;padding:10px 8px}.stage.time-portrait .hud p{margin-bottom:16px}.stage.time-portrait .hud h2:empty{display:none}}
.cleanup-status{margin-top:12px;padding-top:8px;border-top:1px solid #8f839d55}.cleanup-status p{font-size:13px;line-height:1.5;margin:0 0 8px}.cleanup-status button{min-height:48px;padding:8px 14px;font-size:13px}

header button{min-height:44px}
/* Large landscape booth controls; staff and compact screens retain their layout. */
@media(min-width:1280px) and (min-height:900px){
  .overlay{padding:128px 64px 64px}
  .panel{max-width:1000px}
  .panel h2:not(.counter){font-size:48px!important}
  .panel p{max-width:860px;font-size:28px;line-height:1.6}
  .panel .status-meta{font-size:18px!important}
  .panel #result-details{font-size:20px}
  .consent{max-width:860px;font-size:22px;line-height:1.6}
  .consent input{width:28px;height:28px;margin-top:4px}
  .actions>button,.actions>a{min-height:72px;padding:16px 24px;font-size:24px;display:inline-flex;align-items:center;justify-content:center}
  .hud{left:64px;right:64px;bottom:64px}
  .hud h2{font-size:56px}
  .hud p{font-size:28px}
  #age-controls h2{font-size:48px;margin:0 0 16px}
  #age-controls p{font-size:28px;line-height:1.5}
  #age-controls label{font-size:24px}
  #ages button{min-height:72px;min-width:72px;font-size:24px}
  #source-preview{max-height:30vh}
  #result-image{max-height:48vh}
  header{padding:32px 64px}
}
