:root{--ink:#173b2e;--sub:#405548;--accent:#215346;--muted:#52694d;--panel:#f0f5ed;--tools:#edf3e9;--button:#e0e9db;--border:#a2b29d;--rule:#a1b29d;--thumb:#526e46;--thumb-border:#fff;--focus:#32695d;--backdrop:#536f66;--text-shadow:none;--sky-shade:transparent}*{box-sizing:border-box}body{margin:0;background:#e8eddb;color:var(--ink);font-family:'Noto Sans TC','PingFang TC','Microsoft JhengHei',sans-serif;overflow:hidden}#sky{position:fixed;inset:0;background:radial-gradient(ellipse at 65% 35%,#faf6e6aa,transparent 65%);pointer-events:none}#scene{position:fixed;inset:0;width:100%;height:100%;touch-action:none}#load{position:fixed;inset:0;display:grid;place-items:center;background:#e8eddb;z-index:10;letter-spacing:4px;transition:opacity .6s}header{position:absolute;top:0;width:100%;padding:30px 4.4%;display:flex;justify-content:space-between;align-items:center}.brand{display:flex;align-items:center;gap:12px;color:inherit;text-decoration:none}.brand svg{width:39px;height:36px;fill:none;stroke:currentColor;stroke-width:1.7}.brand>span{font-family:'Noto Serif TC','Songti TC',serif;font-size:19px;font-weight:600;letter-spacing:4px}.brand small{display:block;font-family:Arial,sans-serif;font-size:8px;letter-spacing:2.2px;margin-top:7px;font-weight:400}.header-right{display:flex;gap:30px;align-items:center}.location{font-size:11px;letter-spacing:3px}.pill{border:1px solid var(--border);border-radius:30px;background:var(--button);padding:11px 19px;font:inherit;font-size:11px;letter-spacing:1px;color:inherit}.pill span{margin-left:16px}button{cursor:pointer;color:inherit}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--focus);outline-offset:5px}.intro{position:absolute;left:6%;top:19%;pointer-events:none}.eyebrow{font:9px Arial,sans-serif;letter-spacing:2.6px;color:var(--sub)}.intro .eyebrow{display:flex;align-items:center;gap:8px}.eyebrow>span,.live-dot{display:inline-block;background:var(--accent);width:5px;height:5px;border-radius:50%}h1{font-family:'Noto Serif TC','Songti TC',serif;font-size:clamp(42px,4.5vw,73px);font-weight:500;line-height:1.45;letter-spacing:7px;margin:23px 0 19px}h1 span{color:var(--accent)}.intro p{font-size:11px;color:var(--sub);line-height:2.3;letter-spacing:1.3px}.place{display:flex;gap:14px;align-items:center;margin-top:28px}.place>span{font:italic 29px Georgia;color:var(--muted);border-right:1px solid var(--rule);padding-right:15px}.place>div{font-size:10px;letter-spacing:1px}.place small{display:block;font:7px Arial;letter-spacing:2px;color:var(--sub);margin-top:7px}.scene-caption{position:absolute;top:15%;left:52%;display:flex;align-items:center;gap:10px;font-size:9px;letter-spacing:2px;color:var(--sub)}.scene-caption>span:last-child{font:8px Arial;letter-spacing:1px}.caption-line{width:33px;height:1px;background:var(--rule)}.tools{position:absolute;right:3.4%;top:43%;display:flex;flex-direction:column;gap:6px;padding:9px;background:var(--tools);backdrop-filter:blur(15px);border:1px solid var(--border);border-radius:30px}.tools button{width:30px;height:29px;border:0;background:none;font-size:21px;font-weight:300}.tools>span{height:1px;background:var(--rule);margin:4px}.drag-hint{position:absolute;bottom:29%;left:61%;color:var(--sub);font-size:14px;display:flex;gap:9px;align-items:center}.drag-hint span{font-size:9px;letter-spacing:1px}.drag-hint i{height:10px;width:1px;background:var(--rule);margin:0 8px}.bottom-panel{position:absolute;bottom:8%;left:6%;right:6%;display:grid;grid-template-columns:350px 1fr;gap:20px}.glass{border:1px solid var(--border);border-radius:19px;background:var(--panel);box-shadow:0 8px 40px #12233115,inset 0 1px 0 #ffffff18;backdrop-filter:blur(24px)}.weather{padding:19px 23px 12px}.weather-head{display:flex;justify-content:space-between;align-items:center;font-size:12px;letter-spacing:1px}.weather-status{font-size:8px;color:var(--sub);letter-spacing:0}.weather-main{display:flex;align-items:center;gap:12px;margin:13px 0}.weather-icon{font-size:38px;color:var(--muted)}.weather-main strong{font:46px Georgia,serif;font-weight:400;white-space:nowrap}.weather-main sup{font:16px Arial;vertical-align:top;line-height:2}.weather-main>div b{display:block;font-size:10px;font-weight:500;white-space:nowrap}.weather-main small{display:block;font-size:8px;color:var(--sub);margin-top:6px}.weather-main button{border:0;border-radius:20px;background:var(--button);font-size:8px;padding:6px;white-space:nowrap;margin-left:auto}.weather-details{display:flex;justify-content:space-between;border-top:1px solid var(--rule);padding-top:12px;font-size:9px;color:var(--sub)}.weather-details b{font:10px Arial;color:var(--ink);margin-left:4px}.weather-source{display:block;text-decoration:none;font-size:7px;color:var(--sub);margin-top:10px;opacity:1}.time-card{padding:20px 27px 14px}.time-head{display:flex;justify-content:space-between;align-items:center}.time-head .eyebrow{font-size:7px;letter-spacing:2px}h2{font-family:'Noto Serif TC','Songti TC',serif;font-size:18px;font-weight:500;letter-spacing:3px;margin:7px 0}.clock{display:flex;align-items:center;gap:12px}.clock strong{font:29px Georgia}.clock>span{font-size:9px;color:var(--sub);border-left:1px solid var(--rule);padding-left:12px}.slider-wrap{margin-top:19px}input[type=range]{appearance:none;width:100%;height:4px;border-radius:5px;background:linear-gradient(90deg,#8396b0,#e3ba8c 25%,#e6d49c 50%,#cc9b8c 75%,#6b799b);cursor:pointer;display:block}input[type=range]::-webkit-slider-thumb{appearance:none;width:14px;height:14px;border:3px solid var(--thumb-border);border-radius:50%;background:var(--thumb);box-shadow:0 0 0 1px var(--border)}.time-marks{display:flex;justify-content:space-between;align-items:center;color:var(--sub);font:8px Arial;margin-top:11px}.time-marks button{border:0;background:none;padding:0;font-size:12px;color:var(--sub)}.time-marks button span{font:8px Arial;margin-left:5px}.time-footer{display:flex;justify-content:space-between;align-items:center;margin-top:16px;font-size:8px;color:var(--sub);letter-spacing:1px}.time-footer button{border:1px solid var(--border);border-radius:20px;background:var(--button);padding:7px 12px;font-size:9px;letter-spacing:1px}#playIcon{margin-right:5px}footer{position:absolute;bottom:2.8%;left:6%;right:6%;display:flex;justify-content:space-between;font-size:8px;letter-spacing:2px;color:var(--sub)}footer>span:last-child{font:7px Arial;letter-spacing:2px}footer i{font-style:normal;font-size:13px;margin-left:18px}dialog{border:1px solid var(--border);border-radius:25px;padding:40px;background:var(--panel);backdrop-filter:blur(25px);max-width:470px;color:var(--ink);box-shadow:0 20px 90px #122e3633}dialog::backdrop{background:color-mix(in srgb,var(--backdrop) 65%,transparent);backdrop-filter:blur(6px)}dialog p{font-size:12px;line-height:2.1;color:var(--sub)}dialog small{font-size:9px}#closeAbout{position:absolute;right:20px;top:12px;background:none;border:none;font-size:25px}
@media(min-width:1600px){.bottom-panel{grid-template-columns:400px 1fr;max-width:1400px;margin:auto}.intro{top:22%}}@media(max-height:760px) and (min-width:761px){header{padding-top:20px}.intro{top:17%}h1{font-size:46px;margin:15px 0}.place{margin-top:17px}.bottom-panel{bottom:7%;}.weather{padding-top:14px}.time-card{padding-top:15px}.drag-hint{bottom:33%}.scene-caption{top:14%}}
@media(max-width:760px),(orientation:portrait){header{padding:23px 6%}.brand>span{font-size:16px}.brand svg{width:30px}.location{display:none}.pill{padding:9px 12px;font-size:9px}.header-right{gap:0}.intro{top:12%;left:7%}.intro .eyebrow{font-size:6px;letter-spacing:1.4px}h1{font-size:32px;line-height:1.3;letter-spacing:5px;margin:12px 0}.intro p{font-size:9px;line-height:2}.place{display:none}.scene-caption{top:13%;left:auto;right:7%}.scene-caption>span:last-child,.caption-line{display:none}.scene-caption{font-size:8px}.tools{right:4%;top:42%;padding:5px}.tools button{width:25px;height:26px}.drag-hint{left:35%;bottom:38%;font-size:11px}.drag-hint span{font-size:8px}.bottom-panel{left:5%;right:5%;bottom:6%;grid-template-columns:1fr;gap:10px}.weather{padding:12px 17px}.weather-head{font-size:10px}.weather-main{margin:6px 0;gap:12px}.weather-main strong{font-size:35px}.weather-main small{display:none}.weather-icon{font-size:27px}.weather-details{position:absolute;right:17px;top:42px;border:0;display:flex;gap:10px;font-size:8px}.weather-details span:last-child{display:none}.weather-main button{position:absolute;right:17px;bottom:12px}.weather-source{margin-top:3px;font-size:6px}.time-card{padding:13px 17px 11px}.time-head .eyebrow{font-size:6px}h2{font-size:14px;margin-top:5px}.clock strong{font-size:23px}.clock>span{font-size:8px}.slider-wrap{margin-top:12px}.time-footer{margin-top:9px;font-size:7px}.time-footer button{font-size:8px;padding:5px 10px}footer{bottom:2%;font-size:7px}footer>span:last-child{font-size:5px;letter-spacing:1px}.time-marks{margin-top:9px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}


.tools{width:48px;padding:6px;gap:4px;align-items:center;border-radius:26px;z-index:2}
.tools button{display:flex;align-items:center;justify-content:center;flex:0 0 34px;width:34px;height:34px;padding:0;line-height:1;border-radius:50%;touch-action:manipulation}
.tools button svg{width:18px;height:18px;display:block;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}
.tools>span{align-self:stretch;margin:3px 5px;flex:0 0 1px}
.tools button:hover{background:var(--button)}

@media(orientation:portrait) and (max-height:740px){.intro{top:13%}h1{font-size:28px;line-height:1.25;margin:10px 0}.intro p{font-size:8px;line-height:1.8;margin:8px 0}.intro .eyebrow{font-size:5px}.time-card{padding-top:10px;padding-bottom:9px}.time-head h2{font-size:13px}.bottom-panel{gap:8px}}

#cloudAmount{font:inherit;white-space:nowrap;margin-left:8px}

/* Theme colors are frame-interpolated by JS; transitions cover interaction states too. */
body{transition:background-color 1.5s ease}
header,.intro,.scene-caption,.drag-hint,.bottom-panel,footer,dialog{text-shadow:var(--text-shadow)}
header *,main *:not(canvas),footer *,dialog,dialog *,dialog::backdrop{
 transition:color 1.5s ease,background-color 1.5s ease,border-color 1.5s ease,box-shadow 1.5s ease,fill 1.5s ease,stroke 1.5s ease,text-shadow 1.5s ease;
}
input[type=range]::-webkit-slider-thumb{transition:background-color 1.5s ease,border-color 1.5s ease,box-shadow 1.5s ease}
input[type=range]::-moz-range-thumb{width:8px;height:8px;border:3px solid var(--thumb-border);border-radius:50%;background:var(--thumb);box-shadow:0 0 0 1px var(--border);transition:background-color 1.5s ease,border-color 1.5s ease,box-shadow 1.5s ease}

/* A sky-only veil keeps small pale labels legible through purple twilight. */
#skyContrast{position:fixed;inset:0;pointer-events:none;background-color:var(--sky-shade);transition:background-color 1.5s ease}

/* Translucent, sky-tinted cards; the colors share the frame-damped theme. */
.glass{background:linear-gradient(155deg,color-mix(in srgb,var(--glass-sheen,#fff) 10%,transparent),transparent 45%),linear-gradient(155deg,color-mix(in srgb,var(--glass-top,#f0f5ed) 86%,transparent),color-mix(in srgb,var(--glass-bottom,#e4eddf) 80%,transparent));-webkit-backdrop-filter:blur(24px) saturate(125%);backdrop-filter:blur(24px) saturate(125%)}

/* Headline colors use the same continuously interpolated day/night theme. */
h1{color:var(--headline,#1f3d32)}
h1 span{color:var(--headline-accent,#216044)}
