/* LuVu Aken – Läänemere öö. 1920px = 16px baas, skaleerub 4K-le. */
:root{
  --deep:#07131C; --sea:#0D2232; --glass:rgba(12,32,47,.58); --edge:rgba(190,215,232,.14);
  --fog:#93AABB; --ice:#EEF3F6; --amber:#F3A43B; --up:#6FD39B; --down:#F07A6B;
  --display:"Big Shoulders Display", "Arial Narrow", sans-serif;
  --text:"IBM Plex Sans", "Segoe UI", Roboto, sans-serif;
  --gap:2rem;
}
html{font-size:calc(100vw / 120);background:var(--deep);color:var(--ice);color-scheme:dark}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--text);overflow:hidden;width:100vw;height:100vh;background:var(--deep)}

#map{position:fixed;inset:0;background:
  radial-gradient(circle at 50% 50%, #F3A43B 0 .4rem, rgba(243,164,59,.25) .45rem 1rem, transparent 1.05rem),
  repeating-radial-gradient(circle at 50% 50%, transparent 0 6rem, rgba(147,170,187,.07) 6rem 6.08rem),
  linear-gradient(160deg,#0E2536,#07131C)}
#sky{position:fixed;inset:0;pointer-events:none;transition:background 60s linear,opacity 2s}

#ui{position:fixed;inset:0;padding:var(--gap);display:grid;
  grid-template-columns:30rem 1fr 34rem;grid-template-rows:auto 1fr auto auto;gap:var(--gap);
  transition:transform 4s ease}
.panel{background:var(--glass);backdrop-filter:blur(18px) saturate(1.2);-webkit-backdrop-filter:blur(18px) saturate(1.2);
  border:1px solid var(--edge);transition:opacity 1.5s ease}
h2{font-family:var(--display);font-weight:700;font-size:1.6rem;letter-spacing:.02em;color:var(--fog);margin-bottom:1rem}

/* Kell – suur, kitsas sadamasildi kiri */
.clock-panel{grid-column:1;grid-row:1;align-self:start;padding:1.6rem 2rem;border-radius:0 2rem 2rem 2rem}
.time{font-family:var(--display);font-weight:800;font-size:9rem;line-height:.85;font-variant-numeric:tabular-nums}
.date{font-size:1.35rem;color:var(--fog);margin:.6rem 0 1.4rem}
.weather-now{display:flex;align-items:baseline;gap:.8rem}
.w-icon{font-size:2.6rem}
.w-temp{font-family:var(--display);font-weight:700;font-size:3.6rem}
.w-desc{font-size:1.2rem;color:var(--fog)}
.envrow{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.9rem}
.envrow:empty{display:none}
.chip{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .75rem;border-radius:2rem;background:rgba(13,34,50,.75);
  border:1px solid var(--edge);font-size:1rem;color:var(--fog);white-space:nowrap}
.chip b{color:var(--ice);font-weight:600}
.chip.warn{border-color:rgba(243,164,59,.6)} .chip.warn b{color:var(--amber)}
.chip.bad{border-color:rgba(240,122,107,.7)} .chip.bad b{color:var(--down)}
.hourly{display:grid;grid-template-columns:repeat(6,1fr);gap:.4rem;margin-top:1.2rem;text-align:center}
.hourly div{font-size:1rem;color:var(--fog)}
.hourly b{display:block;font-family:var(--display);font-size:1.6rem;color:var(--ice);font-weight:700}
.hourly span{display:block;font-size:1.4rem;margin:.2rem 0}
.sun{margin-top:1.2rem;font-size:1.05rem;color:var(--fog)}
.traffic{margin-top:.5rem;font-size:1.05rem;color:var(--fog)}
.traffic b{color:var(--ice);font-weight:600}

/* Lennukid ja laevad kaardil */
.mk{position:relative;width:0;height:0;pointer-events:none}
.mk svg{position:absolute;left:-.8rem;top:-.8rem;width:1.6rem;height:1.6rem;transition:transform 1s linear}
.mk span{position:absolute;left:1.1rem;top:-.7rem;white-space:nowrap;font:600 .85rem var(--text);color:var(--ice);
  text-shadow:0 0 .3rem #000,0 0 .6rem #000;letter-spacing:.01em}
.mk span small{display:block;font-weight:400;font-size:.75rem;color:var(--fog)}
.mk.plane svg{fill:var(--ice);filter:drop-shadow(0 0 .25rem rgba(238,243,246,.6))}
.mk.ship svg{fill:#7FC8E8;filter:drop-shadow(0 0 .25rem rgba(127,200,232,.5))}
.mk.ship span{color:#BFE3F3}
.mk.ship.moored{opacity:.45}
.mk.ship.moored span{display:none}

/* Parem tulp: bussid üleval, elekter ja aktsiad all */
.rcol{grid-column:3;grid-row:1 / 4;display:flex;flex-direction:column;gap:1.4rem;min-height:0}
.rcol .power{margin-top:auto}

/* Bussitabel – split-flap */
.transit{padding:1.6rem 1.8rem;border-radius:2rem 0 2rem 2rem}
.board{display:flex;flex-direction:column;gap:.5rem}
.row{display:grid;grid-template-columns:4.8rem 1fr 8.4rem;gap:.8rem;align-items:center}
.cells{display:flex;gap:.12rem}
.flap{display:inline-block;width:1.55rem;height:2.4rem;line-height:2.4rem;text-align:center;
  background:#0A1A26;border-radius:.2rem;font-family:var(--display);font-weight:700;font-size:1.7rem;
  position:relative;box-shadow:inset 0 -1.2rem 0 rgba(255,255,255,.025)}
.flap::after{content:"";position:absolute;left:0;right:0;top:50%;height:1px;background:rgba(0,0,0,.6)}
.flap.flip{animation:flip .32s ease-in}
@keyframes flip{0%{transform:rotateX(0)}50%{transform:rotateX(90deg);opacity:.4}100%{transform:rotateX(0)}}
.line .flap{color:var(--amber)}
.mins{justify-content:flex-end}
.row.soon .mins .flap{color:var(--amber);animation:pulse 1.6s ease-in-out infinite}
@keyframes pulse{50%{opacity:.45}}
.dest{font-size:1.35rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.board-legend{margin-top:1rem;font-size:.95rem;color:var(--fog);opacity:.75}
.board-empty{font-size:1.2rem;color:var(--fog);line-height:1.5}
.live{display:inline-block;width:.55rem;height:.55rem;border-radius:50%;background:var(--up);margin-left:.6rem;vertical-align:middle;box-shadow:0 0 .6rem var(--up)}

/* Elektri hind */
.power{padding:1.1rem 1.8rem;border-radius:2rem 2rem 0 2rem}
.power h2{margin-bottom:.4rem}
.p-now{font-size:1.05rem;color:var(--fog);margin-bottom:.6rem;line-height:1.35}
.p-now b{font-family:var(--display);font-size:2.1rem;color:var(--ice);font-weight:700;margin-right:.3rem}
.p-chart svg{width:100%;height:4.2rem;display:block}
.p-ax{position:relative;height:1.2rem;margin-top:.3rem;font-size:.85rem;color:var(--fog)}
.p-ax span{position:absolute;top:0;white-space:nowrap}

/* Aktsiad */
.stocks{padding:1.1rem 1.8rem;border-radius:2rem 2rem 0 2rem}
.stocks ul{list-style:none;display:flex;flex-direction:column;gap:.45rem}
.stocks li{display:grid;grid-template-columns:10.5rem 1fr 7rem 4.6rem;gap:.7rem;align-items:center;font-size:1.15rem}
.stocks .tk{font-family:var(--display);font-weight:700;font-size:1.4rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stocks .na{color:var(--fog);font-size:1rem}
.stocks svg{width:100%;height:1.7rem}
.stocks .px{text-align:right;font-variant-numeric:tabular-nums}
.stocks .ch{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.up{color:var(--up)} .down{color:var(--down)}

/* Meedia / raadio */
.media{grid-column:1;grid-row:3;align-self:end;padding:1.2rem 1.6rem;border-radius:2rem 2rem 2rem 0;display:flex;flex-wrap:wrap;align-items:center;gap:1.2rem}
.cover{width:5rem;height:5rem;border-radius:1rem;background:var(--sea);display:grid;place-items:center;font-size:2.4rem;flex:none;overflow:hidden}
.cover img{width:100%;height:100%;object-fit:cover}
.media-text{flex:1;min-width:0}
.m-title{font-family:var(--display);font-weight:700;font-size:1.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.m-sub{color:var(--fog);font-size:1.05rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.eq{display:flex;gap:.25rem;align-items:flex-end;height:2.4rem}
.eq i{width:.4rem;height:20%;background:var(--amber);border-radius:.2rem}
.media.playing .eq i{animation:eq 1.1s ease-in-out infinite}
.eq i:nth-child(2){animation-delay:-.3s}.eq i:nth-child(3){animation-delay:-.6s}.eq i:nth-child(4){animation-delay:-.15s}.eq i:nth-child(5){animation-delay:-.45s}
@keyframes eq{0%,100%{height:20%}50%{height:100%}}
.m-controls{flex-basis:100%;display:flex;gap:.6rem}
.mc{flex:1;background:rgba(13,34,50,.8);color:var(--ice);border:2px solid transparent;border-radius:.8rem;padding:.55rem .4rem;font:500 1rem var(--text);cursor:pointer;white-space:nowrap}
.mc:focus{outline:none;border-color:var(--amber);background:var(--sea)}
.mc.on{color:var(--amber)}

/* Uudiste ticker */
.ticker{grid-column:1 / -1;grid-row:4;overflow:hidden;white-space:nowrap;font-size:1.3rem;
  border-top:1px solid var(--edge);padding-top:.9rem;mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent)}
.ticker-track{display:inline-block;animation:tick 120s linear infinite}
.ticker-track span{margin-right:4rem}
.ticker-track em{font-style:normal;color:var(--amber);margin-right:.8rem;font-weight:600}
@keyframes tick{to{transform:translateX(-50%)}}

/* Rakenduste rida (launcher) */
#apps{position:fixed;left:0;right:0;bottom:0;padding:2rem var(--gap) 2.4rem;
  background:linear-gradient(transparent,rgba(7,19,28,.95) 35%);transform:translateY(110%);transition:transform .35s ease}
body.apps-open #apps{transform:none}
.apps-row{display:flex;gap:1.4rem;overflow-x:auto;padding:.6rem}
.app{flex:none;width:12rem;background:var(--sea);border:2px solid transparent;border-radius:1rem;padding:1rem;
  display:flex;flex-direction:column;align-items:center;gap:.6rem;color:var(--ice);font:500 1.05rem var(--text);cursor:pointer}
.app img{width:5rem;height:5rem;object-fit:contain}
.app .ph{width:5rem;height:5rem;border-radius:1rem;background:#16354C;display:grid;place-items:center;font:700 2rem var(--display)}
.app:focus{outline:none;border-color:var(--amber);transform:scale(1.06)}
#hint{position:fixed;right:var(--gap);bottom:.4rem;font-size:.9rem;color:var(--fog);opacity:.5}
body.apps-open #hint{opacity:0}

/* Ambient ja öö */
body.ambient .transit,body.ambient .stocks,body.ambient .power,body.ambient .ticker,body.ambient .hourly,body.ambient .sun,body.ambient .traffic,body.ambient .weather-now,body.ambient .envrow,body.ambient #hint{opacity:0}
body.ambient .m-controls{opacity:0}
body.ambient .clock-panel,body.ambient .media{background:transparent;border-color:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}
body.night #ui{opacity:.55}
body.night #sky{background:rgba(0,0,0,.6)!important}
.maplibregl-ctrl-attrib{opacity:.35;font-size:.7rem}

@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
