:root{color-scheme:light;--bg:#faf9f5;--text:#242625;--muted:#737571;--line:#d0d1cc;--surface:#e9e8e3;--accent:#515b4d;--standby-light:22%}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Yu Gothic",Meiryo,sans-serif}h1,h2,p{margin:0}h1,h2{font-size:clamp(20px,2.5vw,34px);font-weight:600}button,input{font:inherit}button,.file-button{border:1px solid var(--line);background:var(--surface);color:var(--text);padding:10px 18px;min-height:44px;border-radius:4px;cursor:pointer}button:disabled{opacity:.45;cursor:default}button:focus-visible,input:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}a{color:var(--muted)}[hidden]{display:none!important}
.detail{width:100%;max-width:1600px;margin:0 auto;height:100vh;height:100dvh;min-height:620px;padding:max(28px,env(safe-area-inset-top)) max(30px,env(safe-area-inset-right)) 62px max(30px,env(safe-area-inset-left));display:grid;grid-template-columns:1fr 1fr;column-gap:24px;animation:reveal .3s ease}
.left-column,.right-column{min-width:0;min-height:0;display:flex;flex-direction:column}.right-column{border-left:1px solid var(--line);padding-left:24px}.time-panel{flex:0 0 42%;border-bottom:1px solid var(--line);padding:0 0 26px;display:flex;flex-direction:column;justify-content:center}.clock-time{display:block;font-variant-numeric:tabular-nums;font-weight:350;line-height:1;letter-spacing:-.055em}.main-time{font-size:clamp(108px,19.7vw,300px);white-space:nowrap}.main-date{font-size:clamp(18px,3.05vw,46px);letter-spacing:-.05em;white-space:nowrap;margin-top:24px}
.rotation-panel{flex:1;position:relative;min-height:0;padding-top:26px;padding-bottom:22px}.rotation-content{height:100%;opacity:1;transition:opacity .3s ease}.rotation-content.fading{opacity:0}.slide{height:100%;overflow:hidden}.rotation-dots{position:absolute;bottom:0;left:0;right:0;display:flex;justify-content:center;gap:10px}.rotation-dots span{width:8px;height:8px;border-radius:50%;background:#cbccc8}.rotation-dots .active{background:var(--text)}
.calendar-panel{display:flex;flex-direction:column}.weekdays,.calendar-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));text-align:center;gap:3px}.weekdays{margin-top:20px;margin-bottom:10px;font-size:clamp(16px,1.8vw,26px)}.calendar-days{flex:1;grid-auto-rows:1fr;min-height:0;font-size:clamp(17px,2vw,29px);font-variant-numeric:tabular-nums}.calendar-days span{display:flex;align-items:center;justify-content:center;border-radius:4px}.calendar-days .today{background:#e4e3df;color:#242625}.weekdays span:first-child,.calendar-days span:nth-child(7n+1){color:#c64d45}.weekdays span:last-child,.calendar-days span:nth-child(7n){color:#377eaf}
.garbage-panel{display:flex;flex-direction:column;justify-content:flex-start}.garbage-panel h2{color:var(--muted);font-size:clamp(18px,2.1vw,30px);font-weight:500}.garbage-when{margin-top:26px;font-size:clamp(32px,5.2vw,76px);line-height:1.3}.garbage-title{font-size:clamp(38px,6.1vw,90px);font-weight:600;line-height:1.4;letter-spacing:-.04em;white-space:nowrap}.resource-notice{margin-top:14px;padding:12px 18px;background:var(--surface);border-radius:4px;font-size:clamp(22px,3.3vw,46px);font-weight:500}.garbage-notes{margin-top:auto;padding-top:14px;font-size:clamp(14px,1.8vw,25px);color:var(--muted);line-height:1.6}
.news-panel{display:flex;flex-direction:column}.news-items{list-style:none;padding:0;margin:12px 0;flex:1;min-height:0;display:flex;flex-direction:column;justify-content:space-evenly}.news-items li{padding:12px 0;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:5px;line-height:1.5;font-size:clamp(18px,2.5vw,34px)}.news-items li span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}.news-items time,.source-note{font-size:clamp(10px,1vw,14px);color:var(--muted)}.source-note{line-height:1.6;text-decoration:none}
.weather-panel{flex:1;min-height:0;display:flex;flex-direction:column}.weather-current{display:grid;grid-template-columns:1fr 28%;gap:16px;flex:1;min-height:0}.weather-overview{display:flex;flex-direction:column;min-width:0}.weather-main{flex:1;display:flex;align-items:center;gap:20px}.weather-icon{width:28%;color:#d9ac37;flex-shrink:0;font-size:clamp(56px,8vw,110px);line-height:1;text-align:center}.temperature{font-size:clamp(58px,9vw,130px);line-height:1.1;font-weight:350;white-space:nowrap;letter-spacing:-.05em}.degree{font-size:.5em;letter-spacing:-.05em}.weather-main #weather-label{font-size:clamp(17px,2.4vw,34px);margin-top:6px}.weather-stats{border-left:1px solid var(--line);padding-left:18px;display:flex;flex-direction:column;justify-content:space-between}.weather-stats>div+div{border-top:1px solid var(--line);padding-top:12px}.weather-stats span{font-size:clamp(12px,1.45vw,20px);white-space:nowrap}.weather-stats p{font-size:clamp(20px,2.7vw,38px);margin-top:6px;white-space:nowrap;letter-spacing:-.04em;font-variant-numeric:tabular-nums}
.forecast-panel{border-top:1px solid var(--line);padding-top:14px;margin-top:20px}.forecast-panel h2{font-size:clamp(16px,1.8vw,25px);font-weight:500}.forecast-slots{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));margin-top:14px;gap:0}.forecast-slot{display:flex;flex-direction:column;align-items:center;gap:6px;font-size:clamp(16px,2vw,28px);font-variant-numeric:tabular-nums}.forecast-slot+.forecast-slot{border-left:1px solid var(--line)}.forecast-slot time{font-size:clamp(12px,1.45vw,20px)}.forecast-date{font-size:9px;color:var(--muted)}.forecast-icon{font-size:clamp(24px,3vw,42px);color:#d9ac37;line-height:1.2}.forecast-rain{font-size:clamp(10px,1vw,14px);color:var(--muted)}.forecast-empty{font-size:13px;grid-column:1/-1;color:var(--muted)}.weather-meta{font-size:9px;line-height:1.5;color:var(--muted);display:flex;justify-content:space-between;gap:8px;padding-top:8px}.weather-meta a{flex-shrink:0;text-decoration:none}
.lights{flex:0 0 30%;position:relative;margin-top:22px}.light-row{border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;padding:20px 0;gap:20px;min-height:44%;margin-left:8px}.light-row h2{font-size:clamp(20px,2.6vw,36px);white-space:nowrap}.light-row button{width:50%;font-size:clamp(19px,2.2vw,30px);min-height:62px;border:0}.light-row button:active{background:#d6d6ce}#light-status{font-size:11px;color:var(--muted);position:absolute;bottom:-14px;left:8px}
.controls{position:fixed;bottom:max(8px,env(safe-area-inset-bottom));right:max(28px,env(safe-area-inset-right));display:flex;gap:12px;z-index:3}.controls button{border:0;background:none;min-height:40px;padding:6px;font-size:12px}.status{position:fixed;left:30px;bottom:16px;font-size:10px;color:var(--muted);max-width:50%;z-index:2}.standby{position:fixed;inset:0;background:#030405;color:hsl(0,0%,var(--standby-light));display:flex;align-items:center;justify-content:center;text-align:center}.standby .clock-time{font-size:clamp(100px,21vw,300px)}.standby .clock-date{font-size:18px;margin-top:20px}body[data-mode=standby] .controls{opacity:.35}body[data-mode=standby] .controls button{color:#bbb}body[data-mode=standby] .status{color:#666}.camera-source{position:fixed;bottom:0;left:0;width:2px;height:2px;opacity:.01;pointer-events:none}.alert{position:fixed;top:16px;left:50%;transform:translateX(-50%);width:580px;max-width:90vw;padding:16px;background:#f3e4d6;border:1px solid #a28b71;border-radius:4px;font-size:13px;line-height:1.7;z-index:10}
dialog{background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:28px;width:calc(100% - 36px);max-width:620px;max-height:88vh;overflow-y:auto}dialog::backdrop{background:#0008}.dialog-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.dialog-header h2{font-size:24px}.dialog-header button{border:0;background:none}.eyebrow,.hint{color:var(--muted);font-size:12px;line-height:1.8}.hint{margin:10px 0 16px}.eyebrow{font-size:10px}.calibration{display:flex;gap:20px;align-items:center;margin:20px 0;padding:14px;background:var(--surface)}.calibration canvas{width:42%;height:auto;transform:scaleX(-1);background:#222}.calibration p{font-size:12px;margin-bottom:6px}.range-label{display:flex;justify-content:space-between;font-size:13px;margin-top:18px}input[type=range]{width:100%;accent-color:var(--accent);min-height:30px}.settings-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}.settings-actions button,.file-button{font-size:12px}.file-button{position:relative;display:inline-flex;align-items:center}.file-button input{position:absolute;opacity:0;width:1px;height:1px}.welcome{max-width:440px}.welcome h2{font-size:26px}.welcome p{font-size:14px;line-height:1.9;margin:18px 0}.welcome button{display:block;width:100%;margin-top:12px}.primary{background:var(--accent);color:#fff}.diagnostics-page{max-width:760px;margin:auto;padding:32px}.diagnostic-log{line-height:2;font-size:13px;overflow-wrap:anywhere}body[data-kiosk=true] #settings-button,body[data-kiosk=true] #settings{display:none!important}body[data-kiosk=true] a{cursor:default;text-decoration:none}
@keyframes reveal{from{opacity:0}to{opacity:1}}@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
@media(min-width:760px) and (max-height:720px){.detail{padding-top:20px;min-height:560px;padding-bottom:52px}.time-panel{flex-basis:40%;padding-bottom:16px}.main-time{font-size:18vw}.main-date{font-size:2.7vw;margin-top:14px}.rotation-panel{padding-top:18px}.garbage-when{margin-top:14px;font-size:4.5vw}.garbage-title{font-size:5.4vw}.resource-notice{padding:8px 12px;font-size:2.6vw;margin-top:8px}.garbage-notes{font-size:1.4vw;padding-top:8px}.forecast-panel{margin-top:12px;padding-top:10px}.forecast-slots{margin-top:10px}.forecast-slot{gap:3px}.weather-stats>div+div{padding-top:8px}.lights{margin-top:16px;flex-basis:27%}.light-row{padding:12px 0}.light-row button{min-height:50px}.weekdays{margin-top:12px;margin-bottom:6px}.news-items li{font-size:2vw;padding:7px 0}.weather-meta{font-size:8px}}
@media(max-width:759px){.detail{display:flex;flex-direction:column;height:auto;min-height:100dvh;gap:24px;padding:24px 22px 90px}.right-column{border-left:0;padding-left:0}.main-time{font-size:25vw}.main-date{font-size:4.4vw}.time-panel{padding:0 0 24px;flex-basis:auto}.rotation-panel{height:360px;flex:none}.calendar-days{font-size:22px}.weather-panel{min-height:360px}.weather-current{min-height:200px}.temperature{font-size:18vw}.weather-main #weather-label{font-size:20px}.weather-stats p{font-size:24px}.lights{flex-basis:auto}.light-row{min-height:90px}.garbage-when{font-size:42px}.garbage-title{font-size:48px}.resource-notice{font-size:28px}.garbage-notes{font-size:16px}.news-items li{font-size:20px}.status{bottom:60px;max-width:80%}.calibration{gap:10px}.controls{right:20px}.weather-meta{flex-wrap:wrap}}
.weather-current{flex:1 0 auto;min-height:210px}.weather-main{min-height:0}.weather-icon{font-size:clamp(52px,7vw,100px)}.temperature{font-size:clamp(58px,8vw,118px)}.weather-stats p{font-size:clamp(20px,2.3vw,34px)}.weather-main #weather-label{font-size:clamp(17px,2vw,29px)}
.news-items{overflow:hidden}.news-items li{flex:1;min-height:0;justify-content:center;font-size:clamp(17px,2vw,28px);line-height:1.4;padding:7px 0}.news-items time{flex-shrink:0}.news-items li span{-webkit-line-clamp:2;flex-shrink:1}.news-panel .source-note{flex-shrink:0}
@media(min-width:760px) and (max-height:720px){.weather-current{min-height:210px}.weather-main{gap:12px}.temperature{font-size:7.4vw}.weather-main #weather-label{font-size:1.65vw;margin-top:0}.weather-stats p{font-size:2.15vw}.weather-stats span{font-size:1.2vw}.news-items{margin:8px 0}.news-items li{font-size:1.7vw;padding:5px 0;gap:2px}.news-panel .source-note{font-size:9px}}
.garbage-when{margin-top:18px;font-size:clamp(32px,4.7vw,68px);line-height:1.2}.garbage-title{font-size:clamp(38px,5.5vw,80px);line-height:1.25}.resource-notice{margin-top:10px;padding:8px 14px;font-size:clamp(22px,2.8vw,40px)}.garbage-notes{font-size:clamp(13px,1.5vw,21px);line-height:1.5;padding-top:12px}
@media(min-width:760px) and (max-height:720px){.garbage-when{margin-top:12px;font-size:4vw}.garbage-title{font-size:4.7vw}.resource-notice{font-size:2.3vw;padding:7px 12px}.garbage-notes{font-size:1.2vw;padding-top:8px}}
@media(min-width:760px) and (max-height:720px){.garbage-panel h2{font-size:20px}.garbage-when{font-size:3.1vw;line-height:1.1;margin-top:8px}.garbage-title{font-size:4.3vw;line-height:1.15}.resource-notice{font-size:2.2vw;line-height:1.2;margin-top:8px}.garbage-notes{font-size:12px;line-height:1.4;padding-top:6px;flex-shrink:0}}

/* v3.1：待機画面は時刻と、通常画面と共通の操作列だけを表示する。 */
.standby{background:#10100f;color:hsl(45,4%,var(--standby-light))}
.standby-show{display:block;border:0;border-radius:0;background:transparent;color:inherit;padding:0;min-height:44px;touch-action:manipulation}
.standby .clock-time{font-size:clamp(100px,24vw,360px)}
.controls button{min-height:44px;min-width:52px;padding:6px 8px;touch-action:manipulation}
body[data-mode=standby] .controls{opacity:1}
body[data-mode=standby] .controls button{color:#a5a299}
body[data-mode=standby][data-camera=stopped] #camera-button{color:#d0cdc4}
body[data-mode=standby][data-camera=running] .status{visibility:hidden}
body[data-mode=standby] .status{color:#96938b}
body[data-mode=standby] .alert{background:#23231f;color:#d0cdc4;border-color:#5f5e57}

/* v3.2：手動で開くUKB出発案内。操作ボタンは「戻る」だけ。 */
.flight-page{max-width:1600px;margin:auto;height:100vh;height:100dvh;min-height:580px;padding:max(30px,env(safe-area-inset-top)) max(34px,env(safe-area-inset-right)) max(20px,env(safe-area-inset-bottom)) max(34px,env(safe-area-inset-left));display:flex;flex-direction:column;animation:reveal .3s ease}
.flight-header{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;padding-bottom:22px;border-bottom:1px solid var(--line)}
.flight-airport{font-size:clamp(16px,1.8vw,26px);letter-spacing:.22em;margin-bottom:12px}.flight-title{display:flex;align-items:baseline;gap:24px}.flight-title h1{font-size:clamp(32px,5.2vw,74px);font-weight:600;letter-spacing:-.03em}.flight-title>span{font-size:clamp(13px,1.6vw,23px);letter-spacing:.2em}
.flight-clock{text-align:right;flex-shrink:0}.flight-clock .clock-time{font-size:clamp(38px,7vw,100px);letter-spacing:-.04em}.flight-clock .clock-date{font-size:clamp(12px,1.5vw,21px);margin-top:12px;white-space:nowrap}
.departure-table{width:100%;border-collapse:collapse;table-layout:fixed;flex:1;min-height:0;font-variant-numeric:tabular-nums}.departure-table th{text-align:left;font-size:clamp(15px,1.9vw,26px);font-weight:400;border-bottom:1px solid var(--line);height:56px}.departure-table th:nth-child(1){width:28%}.departure-table th:nth-child(2){width:51%}.departure-table th:nth-child(3){width:21%}.departure-table td{border-bottom:1px solid var(--line);padding:8px 0;font-size:clamp(22px,3.6vw,50px);line-height:1.15;vertical-align:middle}.departure-table tr:last-child td{border-bottom:0}.departure-table td:first-child{font-size:clamp(27px,4.7vw,66px)}.departure-table td:nth-child(2)>span{font-weight:500}.departure-table td:nth-child(2)>small{display:block;font-size:clamp(10px,1.3vw,18px);letter-spacing:.13em;margin-top:5px}.departure-table td:nth-child(3){font-size:clamp(20px,3vw,42px);white-space:nowrap}.flight-message{font-size:clamp(16px,2vw,26px);color:var(--muted);padding:12px 0}.flight-footer{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;padding-top:14px}.flight-footer p{font-size:10px;line-height:1.5;color:var(--muted)}#flight-back{font-size:clamp(17px,2vw,26px);padding:10px 24px;flex-shrink:0}
body[data-page=flights] .controls,body[data-page=flights] #status{display:none!important}
@media(min-width:760px) and (max-height:720px){.flight-page{padding-top:22px}.flight-header{padding-bottom:16px}.flight-airport{margin-bottom:8px;font-size:16px}.flight-title h1{font-size:4.5vw}.flight-clock .clock-time{font-size:5.8vw}.flight-clock .clock-date{margin-top:8px;font-size:14px}.departure-table th{height:44px;font-size:17px}.departure-table td{font-size:2.8vw;padding:7px 0}.departure-table td:first-child{font-size:3.6vw}.departure-table td:nth-child(3){font-size:2.5vw}.departure-table td:nth-child(2)>small{font-size:11px;margin-top:4px}.flight-footer{padding-top:10px}.flight-footer p{font-size:9px}}
@media(max-width:759px){.flight-page{padding:22px 18px;min-height:620px}.flight-header{gap:12px}.flight-title{display:block}.flight-title h1{font-size:32px}.flight-title>span{font-size:10px}.flight-clock .clock-time{font-size:38px}.flight-clock .clock-date{font-size:10px}.flight-airport{font-size:14px}.departure-table th{font-size:12px}.departure-table th:first-child{width:23%}.departure-table th:nth-child(2){width:52%}.departure-table th:nth-child(3){width:25%}.departure-table td{font-size:19px}.departure-table td:first-child{font-size:24px}.departure-table td:nth-child(3){font-size:17px}.departure-table td:nth-child(2)>small{font-size:8px;letter-spacing:.04em}.flight-footer p{font-size:8px}#flight-back{padding:8px 14px}}
.departure-table td:nth-child(3)>small{display:block;margin-top:7px;font-size:clamp(11px,1.25vw,18px);font-weight:400;line-height:1.4;letter-spacing:0;color:var(--muted)}
