@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@400;500;600;700&family=Noto+Serif+TC:wght@400;500;600&display=swap');
:root{--ink:#293c34;--sub:#6b7b6d;--accent:#4f7054}*{box-sizing:border-box}body{margin:0;background:#e8eddb;color:var(--ink);font-family:'Noto Sans TC',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',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 #78866c55;border-radius:30px;background:#ffffff22;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 #63815a;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:#6e8a54;width:5px;height:5px;border-radius:50%}h1{font-family:'Noto Serif 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:#839274;border-right:1px solid #87977b66;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:#98a48d88}.tools{position:absolute;right:3.4%;top:43%;display:flex;flex-direction:column;gap:6px;padding:9px;background:#fbfff15c;backdrop-filter:blur(15px);border:1px solid #fff8;border-radius:30px}.tools button{width:30px;height:29px;border:0;background:none;font-size:21px;font-weight:300}.tools>span{height:1px;background:#7e8d7733;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:#84957b66;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 #ffffffa0;border-radius:19px;background:linear-gradient(120deg,#ffffff65,#f4faef25);box-shadow:0 8px 40px #516e3e08,inset 0 1px 0 #fff8;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:#7b8f74}.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:#ffffff66;font-size:8px;padding:6px;white-space:nowrap;margin-left:auto}.weather-details{display:flex;justify-content:space-between;border-top:1px solid #82937526;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:.8}.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',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 #87947a55;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 #fff;border-radius:50%;background:#657a51;box-shadow:0 0 0 1px #839776}.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 #6c83673d;border-radius:20px;background:#ffffff33;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 #fff;border-radius:25px;padding:40px;background:#f0f3e9ed;backdrop-filter:blur(25px);max-width:470px;color:#293c34;box-shadow:0 20px 90px #122e3633}dialog::backdrop{background:#15322c55;backdrop-filter:blur(6px)}dialog p{font-size:12px;line-height:2.1;color:#63735f}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:#ffffff30}

@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}

:root{--ink:#23434b;--sub:#557c82;--accent:#287f8e}h1 span{color:var(--accent)}.eyebrow>span,.live-dot{background:#379c9e}

/* One continuous palette for every scene time; transitions also soften slider jumps. */
:root{--ink:#23434b;--sub:#385e68;--accent:#226574;--panel:#eef7f5;--panelEdge:#fff;--button:#d9e9e8;--line:#8ba5aa;--thumb:#296776;--shadow:#577b82;--sky-glow:#faf6e6;--sky-glow-alpha:.63}
body,body *,body *::before,body *::after{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,accent-color 1.5s ease}
#load{transition:opacity .6s,color 1.5s,background-color 1.5s;background:var(--panel)}
#sky{background:radial-gradient(ellipse at 65% 35%,color-mix(in srgb,var(--sky-glow) calc(var(--sky-glow-alpha)*100%),transparent),transparent 65%)}
h1 span,.place>span,.weather-icon{color:var(--accent)}
.eyebrow>span,.live-dot{background:var(--accent)}
.glass,.tools,dialog{background:color-mix(in srgb,var(--panel) 92%,transparent);border-color:var(--panelEdge);box-shadow:0 8px 40px color-mix(in srgb,var(--shadow) 14%,transparent),inset 0 1px 0 color-mix(in srgb,var(--panelEdge) 60%,transparent)}
.pill,.weather-main button,.time-footer button{background:color-mix(in srgb,var(--button) 85%,transparent);border-color:var(--line);color:var(--ink)}
.tools button:hover{background:var(--button)}
.caption-line,.tools>span,.drag-hint i{background:var(--line)}
.place>span,.weather-details,.clock>span{border-color:var(--line)}
dialog{color:var(--ink)}dialog p{color:var(--sub)}
button:focus-visible,a:focus-visible,input:focus-visible{outline-color:var(--accent)}
input[type=range]{accent-color:var(--thumb)}
input[type=range]::-webkit-slider-thumb{background:var(--thumb);border-color:var(--panelEdge);box-shadow:0 0 0 1px var(--line);transition:background-color 1.5s,border-color 1.5s,box-shadow 1.5s}
input[type=range]::-moz-range-thumb{width:8px;height:8px;border:3px solid var(--panelEdge);border-radius:50%;background:var(--thumb);box-shadow:0 0 0 1px var(--line);transition:background-color 1.5s,border-color 1.5s,box-shadow 1.5s}

header,.intro,.scene-caption,.drag-hint,.bottom-panel,footer,dialog{text-shadow:0 1px 2px var(--text-halo,transparent),0 0 4px var(--text-halo,transparent)}

/* Card and control text keeps its contrast while the sky palette interpolates. */
.glass,.tools,dialog{color:var(--panel-ink);text-shadow:none;background:color-mix(in srgb,var(--panel) 97%,transparent)}
.glass{background:color-mix(in srgb,var(--panel) var(--glass-opacity,97%),transparent)}
.glass .eyebrow,.glass .weather-status,.glass small,.glass .weather-details,.glass .weather-source,.glass .clock>span,.glass .time-marks,.glass .time-marks button,.glass .time-footer,dialog p{color:var(--panel-sub)}
.glass .weather-details b,.glass button{color:var(--panel-ink)}
.glass .weather-icon{color:var(--panel-accent)}
.glass .live-dot{background:var(--panel-accent)}
.pill{color:var(--panel-ink);text-shadow:none}
header,.intro,.scene-caption,.drag-hint,footer{text-shadow:0 1px 2px var(--text-halo,transparent),0 0 4px var(--text-halo,transparent),0 0 9px var(--text-halo,transparent)}

/* Readability follows the interpolated palette, with only a soft text shadow. */
.intro{text-shadow:0 1px 12px var(--intro-text-shadow,transparent)}
