*{box-sizing:border-box}html.weather-tv-root{background:#05070c;color:#f5fbff}body.weather-tv{min-height:100vh;margin:0;background:radial-gradient(circle at 50% 0,#183e74 0,#06111f 50%,#020308 100%);font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;overflow-x:hidden}.tv-shell{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:22px}.tv-set{width:min(1180px,100%);filter:drop-shadow(0 30px 60px rgba(0,0,0,.55))}.tv-frame{position:relative;border-radius:42px;background:linear-gradient(145deg,#151515,#050505 48%,#2b211b);padding:28px;border:10px solid #050505;box-shadow:inset 0 0 30px rgba(255,255,255,.08)}.tv-frame:before{content:"";position:absolute;inset:9px;border-radius:31px;border:1px solid rgba(255,255,255,.07);pointer-events:none}.tv-screen{position:relative;min-height:min(72vh,760px);overflow:hidden;border-radius:28px;background:linear-gradient(160deg,#004a9f 0,#055fc4 44%,#02346f 100%);border:4px solid #0b0d0f;box-shadow:inset 0 0 55px rgba(0,0,0,.55);isolation:isolate}.tv-mode-crt .tv-screen{animation:crt-jitter 6s infinite steps(2,end)}.tv-mode-hd .tv-screen{background:linear-gradient(135deg,#0476d9 0,#0f4d9c 50%,#102755 100%)}.tv-header,.tv-footer{position:absolute;left:0;right:0;z-index:5;display:flex;align-items:center}.tv-header{top:0;justify-content:space-between;padding:18px 24px;background:linear-gradient(90deg,rgba(0,20,70,.96),rgba(0,87,168,.86));border-bottom:2px solid rgba(255,255,255,.32);text-transform:uppercase;letter-spacing:.06em}.tv-logo{display:inline-flex;align-items:center;gap:10px;color:#fff;text-decoration:none;font-weight:900}.tv-logo-mark{display:inline-grid;place-items:center;width:54px;height:34px;border:2px solid #fff;border-radius:5px;background:#e02626;box-shadow:0 0 16px rgba(255,255,255,.25)}.tv-header-meta{display:flex;gap:18px;font-weight:800;color:#dff6ff}.tv-stage{position:absolute;inset:76px 0 54px;z-index:2}.tv-slide{position:absolute;inset:0;padding:28px;opacity:0;transform:translateX(28px) scale(.99);transition:opacity .7s ease,transform .7s ease;display:flex;flex-direction:column}.tv-slide.is-active{opacity:1;transform:none}.tv-titlebar{align-self:flex-start;background:#ffe14d;color:#07132b;border:3px solid #fff;box-shadow:7px 7px 0 rgba(0,0,0,.35);font-size:clamp(22px,3vw,42px);font-weight:950;text-transform:uppercase;letter-spacing:.04em;padding:8px 18px;margin-bottom:24px}.conditions-grid{display:grid;grid-template-columns:minmax(280px,1.25fr) minmax(260px,.75fr);gap:26px;align-items:stretch;height:100%}.temp-readout{font-size:clamp(86px,16vw,190px);line-height:.9;font-weight:950;text-shadow:8px 8px 0 rgba(0,0,0,.28)}.condition-copy{font-size:clamp(24px,4vw,48px);font-weight:850;text-transform:uppercase;max-width:760px}.metric-board{display:grid;gap:14px;margin:0}.metric-board div,.hourly-card,.daily-card,.travel-grid div{background:rgba(0,16,54,.72);border:2px solid rgba(255,255,255,.55);box-shadow:inset 0 0 25px rgba(255,255,255,.08);padding:18px;border-radius:14px}.metric-board dt,.travel-grid span{font-size:15px;color:#b9e7ff;text-transform:uppercase;letter-spacing:.12em}.metric-board dd{margin:4px 0 0;font-size:clamp(26px,4vw,48px);font-weight:900}.radar-wrap{flex:1;min-height:0;background:rgba(0,10,35,.8);border:3px solid rgba(255,255,255,.65);border-radius:16px;overflow:hidden;padding:10px}.radar-wrap weather-local{display:block;height:100%;min-height:360px}.hourly-strip,.daily-grid{display:grid;gap:14px}.hourly-strip{grid-template-columns:repeat(6,minmax(120px,1fr));margin-top:auto;margin-bottom:auto}.daily-grid{grid-template-columns:repeat(7,minmax(105px,1fr));align-items:stretch;margin-top:auto;margin-bottom:auto}.hourly-card,.daily-card{text-align:center}.hourly-card strong,.daily-card strong{display:block;font-size:clamp(30px,4vw,56px);line-height:1;margin:10px 0}.hourly-card span,.daily-card span{display:block;color:#d7f5ff;font-weight:800;text-transform:uppercase}.summary-card{margin:auto 0;background:rgba(0,20,65,.76);border:3px solid rgba(255,255,255,.65);border-radius:22px;padding:28px;box-shadow:0 20px 70px rgba(0,0,0,.32)}.summary-card p{font-size:clamp(28px,4vw,58px);font-weight:900;line-height:1.08;margin:0 0 28px}.travel-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.travel-grid strong{display:block;font-size:clamp(22px,3vw,38px);margin-top:8px}.tv-alert{position:absolute;z-index:8;top:86px;left:50%;transform:translateX(-50%);background:#ffe14d;color:#111;padding:10px 18px;border:2px solid #fff;border-radius:999px;font-weight:900}.tv-footer{bottom:0;height:54px;background:#071225;border-top:2px solid rgba(255,255,255,.35);overflow:hidden}.ticker-label{height:100%;display:grid;place-items:center;background:#e02626;color:#fff;font-weight:950;padding:0 18px;white-space:nowrap}.ticker{flex:1;overflow:hidden;white-space:nowrap;font-size:22px;font-weight:850}.ticker span{display:inline-block;padding-left:100%;animation:ticker 28s linear infinite}.tv-controls{display:flex;flex-wrap:wrap;justify-content:center;gap:10px}.tv-button{appearance:none;border:1px solid rgba(255,255,255,.38);border-radius:999px;background:rgba(255,255,255,.12);color:#fff;text-decoration:none;padding:10px 16px;font-weight:800;cursor:pointer}.tv-button.is-active,.tv-button:hover{background:#ffe14d;color:#07132b}.tv-button-muted{opacity:.82}.tv-scanlines,.tv-static,.tv-vignette,.tv-tear{pointer-events:none;position:absolute;inset:0;z-index:10}.tv-scanlines{background:repeating-linear-gradient(to bottom,rgba(255,255,255,.075) 0,rgba(255,255,255,.075) 1px,rgba(0,0,0,.12) 2px,rgba(0,0,0,.12) 3px,transparent 4px,transparent 6px);mix-blend-mode:soft-light;opacity:.74}.tv-static{opacity:.2;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180' viewBox='0 0 180 180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.95' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)' opacity='.72'/%3E%3C/svg%3E");background-size:210px 210px;mix-blend-mode:screen;animation:snow .18s steps(2,end) infinite}.tv-static:after{content:"";position:absolute;inset:0;background-image:radial-gradient(circle at 17% 23%,rgba(255,255,255,.9) 0 1px,transparent 2px),radial-gradient(circle at 76% 44%,rgba(255,255,255,.55) 0 1px,transparent 2px),radial-gradient(circle at 32% 81%,rgba(0,0,0,.8) 0 1px,transparent 2px),radial-gradient(circle at 91% 12%,rgba(255,255,255,.75) 0 1px,transparent 2px);background-size:97px 83px,131px 109px,149px 137px,173px 157px;animation:sparkle .34s steps(3,end) infinite}.tv-tear{opacity:0;top:var(--tear-y,42%);height:var(--tear-h,18px);inset:auto 0 auto 0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.22),rgba(0,0,0,.35),transparent);filter:blur(.4px);transform:translateX(var(--tear-x,0));mix-blend-mode:screen}.tv-mode-crt .tv-screen.is-glitch{filter:saturate(1.25) contrast(1.08) hue-rotate(var(--glitch-hue,0deg));transform:translate(var(--glitch-x,0),var(--glitch-y,0)) skewX(var(--glitch-skew,0deg))}.tv-mode-crt .tv-screen.is-glitch .tv-tear{opacity:.85}.tv-mode-crt .tv-screen.is-glitch .tv-stage{transform:translateX(var(--stage-tear,0))}.tv-vignette{box-shadow:inset 0 0 130px 38px rgba(0,0,0,.76),inset 0 0 28px rgba(255,255,255,.08)}.tv-mode-hd .tv-frame{border-radius:18px;padding:12px;background:#05070c}.tv-mode-hd .tv-screen{border-radius:10px;animation:none}.tv-mode-hd .tv-scanlines,.tv-mode-hd .tv-static,.tv-mode-hd .tv-tear{display:none}.tv-mode-hd .tv-vignette{box-shadow:inset 0 0 38px rgba(0,0,0,.28)}.tv-screen:fullscreen{width:100vw;height:100vh;min-height:100vh;border:0;border-radius:0;box-shadow:none}.tv-screen:fullscreen .tv-stage{inset:76px 0 54px}.tv-screen:fullscreen .radar-wrap weather-local{min-height:calc(100vh - 190px)}@keyframes ticker{to{transform:translateX(-100%)}}@keyframes snow{0%{transform:translate(0,0);background-position:0 0}25%{transform:translate(-3px,2px);background-position:47px -23px}50%{transform:translate(2px,-4px);background-position:-71px 38px}75%{transform:translate(4px,1px);background-position:29px 83px}100%{transform:translate(-2px,3px);background-position:111px -67px}}@keyframes sparkle{0%{opacity:.18;transform:translate(0,0)}50%{opacity:.34;transform:translate(-11px,7px)}100%{opacity:.2;transform:translate(8px,-13px)}}@keyframes crt-jitter{0%,100%{transform:translate(0)}88%{transform:translate(.6px,-.4px)}91%{transform:translate(-1.4px,.7px)}93%{transform:translate(1px,.4px)}96%{transform:translate(-.5px,-.6px)}}@media (max-width:850px){.tv-shell{padding:10px}.tv-frame{padding:10px;border-width:5px;border-radius:22px}.tv-screen{min-height:82vh;border-radius:16px}.tv-header{padding:12px;align-items:flex-start;gap:8px}.tv-header-meta{flex-direction:column;gap:2px;font-size:12px;text-align:right}.tv-stage{inset:67px 0 54px}.tv-slide{padding:14px}.conditions-grid,.travel-grid{grid-template-columns:1fr}.hourly-strip{grid-template-columns:repeat(2,1fr)}.daily-grid{grid-template-columns:repeat(2,1fr)}.tv-titlebar{font-size:20px}.ticker{font-size:16px}.radar-wrap weather-local{min-height:440px}}
/* 20260519c: fixed 16:9 broadcast canvas scaled as one unit, not reflowed in fullscreen */
.tv-screen{aspect-ratio:16/9;min-height:0;height:auto;background:#000;contain:layout paint}.tv-broadcast{position:absolute;left:0;top:0;width:1280px;height:720px;transform-origin:0 0;will-change:transform;z-index:2;overflow:hidden}.tv-mode-crt .tv-broadcast{filter:contrast(1.08) saturate(1.16) blur(.12px);text-shadow:1px 0 rgba(255,0,80,.28),-1px 0 rgba(0,210,255,.22),0 0 10px rgba(190,235,255,.16)}.tv-mode-crt .tv-screen{border-radius:34px;background:radial-gradient(ellipse at center,#0b66c8 0,#003b84 58%,#00142d 100%)}.tv-mode-crt .tv-screen:before{content:"";pointer-events:none;position:absolute;inset:0;z-index:11;background:radial-gradient(ellipse at center,transparent 58%,rgba(0,0,0,.3) 78%,rgba(0,0,0,.72) 100%);mix-blend-mode:multiply}.tv-screen:fullscreen{width:100vw;height:100vh;aspect-ratio:auto;min-height:100vh;border:0;border-radius:0;box-shadow:none;background:#000}.tv-screen:fullscreen .tv-broadcast{transform-origin:center center}.tv-screen:fullscreen .tv-vignette{box-shadow:inset 0 0 95px 24px rgba(0,0,0,.62)}.tv-screen:fullscreen .tv-stage{inset:76px 0 54px}.tv-screen:fullscreen .radar-wrap weather-local{min-height:100%}.radar-wrap{padding:0;background:#001126}.radar-wrap weather-local{height:100%;min-height:100%;border:0;overflow:hidden}.tv-mode-hd .tv-screen{border-radius:12px}.tv-mode-hd .tv-broadcast{filter:none;text-shadow:none}@media (max-width:850px){.tv-screen{min-height:0}.tv-frame{width:100%}.radar-wrap weather-local{min-height:100%}}

/* 20260519d: fullscreen should keep the Weather TV blue broadcast background, not black letterboxing */
.tv-screen,
.tv-broadcast{
  background:
    radial-gradient(ellipse at 50% 42%, rgba(34,143,255,.72) 0%, rgba(5,94,196,.88) 34%, rgba(2,50,112,.96) 68%, #061225 100%),
    linear-gradient(135deg,#075cc0 0%,#023a83 52%,#07152f 100%);
}
.tv-screen:fullscreen{
  background:
    radial-gradient(ellipse at 50% 42%, rgba(34,143,255,.72) 0%, rgba(5,94,196,.88) 34%, rgba(2,50,112,.96) 68%, #061225 100%),
    linear-gradient(135deg,#075cc0 0%,#023a83 52%,#07152f 100%) !important;
}
.tv-screen:fullscreen .tv-broadcast{
  background:
    radial-gradient(ellipse at 50% 42%, rgba(34,143,255,.72) 0%, rgba(5,94,196,.88) 34%, rgba(2,50,112,.96) 68%, #061225 100%),
    linear-gradient(135deg,#075cc0 0%,#023a83 52%,#07152f 100%) !important;
}
.tv-mode-hd .tv-screen:fullscreen,
.tv-mode-hd .tv-screen:fullscreen .tv-broadcast{
  background:linear-gradient(135deg,#0476d9 0,#0f4d9c 50%,#102755 100%) !important;
}

/* 20260519e: CRT effect rebuilt from classic CSS CRT pattern: screen-door + flicker + RGB text separation */
.tv-mode-crt .tv-static{
  opacity:.045 !important;
  mix-blend-mode:screen;
  background-size:340px 340px !important;
  animation:crt-noise-drift .8s steps(2,end) infinite !important;
}
.tv-mode-crt .tv-static:after{
  opacity:.08 !important;
}
.tv-mode-crt .tv-screen:before{
  content:"";
  pointer-events:none;
  position:absolute;
  inset:0;
  z-index:12;
  background:
    linear-gradient(rgba(18,16,16,0) 50%,rgba(0,0,0,.24) 50%),
    linear-gradient(90deg,rgba(255,0,0,.055),rgba(0,255,0,.022),rgba(0,0,255,.055));
  background-size:100% 2px,3px 100%;
  mix-blend-mode:multiply;
  box-shadow:inset 0 0 110px 26px rgba(0,0,0,.72);
}
.tv-mode-crt .tv-screen:after{
  content:"";
  pointer-events:none;
  position:absolute;
  inset:0;
  z-index:13;
  background:rgba(18,16,16,.11);
  opacity:0;
  animation:crt-flicker .15s infinite;
}
.tv-mode-crt .tv-broadcast{
  filter:contrast(1.12) saturate(1.18) brightness(.96) blur(.18px);
  animation:crt-text-shadow 1.6s infinite;
}
.tv-mode-crt .tv-broadcast *{
  text-shadow:inherit;
}
.tv-mode-crt .tv-vignette{
  z-index:14;
  box-shadow:
    inset 0 0 42px rgba(255,255,255,.05),
    inset 0 0 115px 32px rgba(0,0,0,.74),
    inset 0 0 8px 2px rgba(0,0,0,.45) !important;
}
.tv-mode-crt .tv-screen.is-glitch{
  filter:contrast(1.13) saturate(1.2) brightness(.96) !important;
}
.tv-mode-crt .tv-tear{
  z-index:15;
  background:linear-gradient(90deg,transparent,rgba(210,240,255,.14),rgba(0,0,0,.18),rgba(255,255,255,.08),transparent) !important;
  filter:blur(1px) !important;
}
@keyframes crt-noise-drift{
  0%{transform:translate(0,0);background-position:0 0}
  25%{transform:translate(-1px,1px);background-position:80px -20px}
  50%{transform:translate(1px,-1px);background-position:-40px 60px}
  75%{transform:translate(0,1px);background-position:110px 35px}
  100%{transform:translate(-1px,0);background-position:-75px -90px}
}
@keyframes crt-flicker{
  0%{opacity:.27861}5%{opacity:.03477}10%{opacity:.23604}15%{opacity:.09063}20%{opacity:.01812}25%{opacity:.08389}30%{opacity:.06558}35%{opacity:.0678}40%{opacity:.02656}45%{opacity:.08469}50%{opacity:.09602}55%{opacity:.00859}60%{opacity:.02031}65%{opacity:.07199}70%{opacity:.05346}75%{opacity:.03729}80%{opacity:.07143}85%{opacity:.07042}90%{opacity:.07003}95%{opacity:.03611}100%{opacity:.02439}
}
@keyframes crt-text-shadow{
  0%{text-shadow:.44px 0 1px rgba(0,30,255,.5),-.44px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.28)}
  5%{text-shadow:2.79px 0 1px rgba(0,30,255,.5),-2.79px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.22)}
  10%{text-shadow:.03px 0 1px rgba(0,30,255,.5),-.03px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.24)}
  15%{text-shadow:.4px 0 1px rgba(0,30,255,.5),-.4px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.2)}
  20%{text-shadow:3.48px 0 1px rgba(0,30,255,.5),-3.48px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.24)}
  25%{text-shadow:1.61px 0 1px rgba(0,30,255,.5),-1.61px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.24)}
  30%{text-shadow:.7px 0 1px rgba(0,30,255,.5),-.7px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.24)}
  35%{text-shadow:3.9px 0 1px rgba(0,30,255,.5),-3.9px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.22)}
  40%{text-shadow:3.87px 0 1px rgba(0,30,255,.5),-3.87px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.22)}
  45%{text-shadow:2.23px 0 1px rgba(0,30,255,.5),-2.23px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.22)}
  50%{text-shadow:.08px 0 1px rgba(0,30,255,.5),-.08px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.28)}
  55%{text-shadow:2.38px 0 1px rgba(0,30,255,.5),-2.38px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.22)}
  60%{text-shadow:2.2px 0 1px rgba(0,30,255,.5),-2.2px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.22)}
  65%{text-shadow:2.86px 0 1px rgba(0,30,255,.5),-2.86px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.22)}
  70%{text-shadow:.49px 0 1px rgba(0,30,255,.5),-.49px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.26)}
  75%{text-shadow:1.9px 0 1px rgba(0,30,255,.5),-1.9px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.22)}
  80%{text-shadow:.08px 0 1px rgba(0,30,255,.5),-.08px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.28)}
  85%{text-shadow:.1px 0 1px rgba(0,30,255,.5),-.1px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.28)}
  90%{text-shadow:3.44px 0 1px rgba(0,30,255,.5),-3.44px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.22)}
  95%{text-shadow:2.18px 0 1px rgba(0,30,255,.5),-2.18px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.22)}
  100%{text-shadow:2.62px 0 1px rgba(0,30,255,.5),-2.62px 0 1px rgba(255,0,80,.3),0 0 3px rgba(255,255,255,.22)}
}

/* 20260519f: CodePen-style CRT phosphor overlay: RGB horizontal + vertical mask, currentColor glow */
:root{--crt-red:rgb(218,49,49);--crt-green:rgb(112,159,115);--crt-blue:rgb(40,129,206)}
.tv-mode-crt .tv-screen{
  background:rgb(25,25,30) !important;
  color:rgba(255,255,255,.78);
}
.tv-mode-crt .tv-broadcast{
  background:
    radial-gradient(ellipse at 50% 42%,rgba(20,108,210,.48) 0%,rgba(10,62,138,.58) 42%,rgba(16,23,38,.96) 100%),
    rgb(25,25,30) !important;
  filter:contrast(1.16) saturate(1.12) brightness(.9) blur(.12px) !important;
  animation:crt-codepen-shadow 1.9s infinite !important;
  color:rgba(255,255,255,.78);
}
.tv-mode-crt .tv-broadcast *{
  text-shadow:inherit !important;
}
.tv-mode-crt .tv-static{
  opacity:.025 !important;
  mix-blend-mode:screen !important;
}
.tv-mode-crt .tv-static:after{
  opacity:.025 !important;
}
.tv-mode-crt .tv-scanlines{
  z-index:12 !important;
  opacity:.42 !important;
  mix-blend-mode:overlay !important;
  background:
    repeating-linear-gradient(
      var(--crt-red) 0px,
      var(--crt-green) 2px,
      var(--crt-blue) 4px
    ) !important;
  background-size:100% 6px !important;
}
.tv-mode-crt .tv-screen:before{
  content:"";
  transform:translateZ(0);
  pointer-events:none;
  mix-blend-mode:overlay;
  position:absolute;
  height:100%;
  width:100%;
  left:0;
  top:0;
  z-index:13;
  opacity:.38;
  background:repeating-linear-gradient(
    90deg,
    var(--crt-red) 0px,
    var(--crt-red) 1px,
    var(--crt-green) 1px,
    var(--crt-green) 2px,
    var(--crt-blue) 2px,
    var(--crt-blue) 3px,
    transparent 3px,
    transparent 5px
  ) !important;
}
.tv-mode-crt .tv-screen:after{
  content:"";
  transform:translateZ(0);
  pointer-events:none;
  position:absolute;
  height:100%;
  width:100%;
  left:0;
  top:0;
  z-index:14;
  background:rgba(18,16,16,.12);
  mix-blend-mode:overlay;
  animation:crt-soft-flicker .18s infinite;
}
.tv-mode-crt .tv-vignette{
  z-index:15 !important;
  box-shadow:
    inset 0 0 40px rgba(255,255,255,.04),
    inset 0 0 125px 34px rgba(0,0,0,.78),
    inset 0 0 12px 3px rgba(0,0,0,.58) !important;
}
.tv-mode-crt .tv-titlebar,
.tv-mode-crt .ticker-label{
  filter:saturate(.88) brightness(.95);
}
.tv-mode-crt .tv-screen.is-glitch{
  filter:none !important;
}
.tv-mode-crt .tv-tear{
  z-index:16 !important;
  opacity:0;
  mix-blend-mode:overlay;
}
.tv-mode-crt .tv-screen.is-glitch .tv-tear{
  opacity:.28 !important;
}
@keyframes crt-codepen-shadow{
  0%{text-shadow:0 0 .2em currentColor,1px 1px rgba(255,0,255,.5),-1px -1px rgba(0,255,255,.4)}
  18%{text-shadow:0 0 .22em currentColor,1.6px .6px rgba(255,0,255,.42),-1.4px -.8px rgba(0,255,255,.36)}
  37%{text-shadow:0 0 .18em currentColor,.6px 1.2px rgba(255,0,255,.48),-.8px -1.5px rgba(0,255,255,.42)}
  61%{text-shadow:0 0 .24em currentColor,1.9px .2px rgba(255,0,255,.36),-1.7px -.2px rgba(0,255,255,.38)}
  82%{text-shadow:0 0 .19em currentColor,.9px .9px rgba(255,0,255,.5),-1px -1px rgba(0,255,255,.4)}
  100%{text-shadow:0 0 .2em currentColor,1px 1px rgba(255,0,255,.5),-1px -1px rgba(0,255,255,.4)}
}
@keyframes crt-soft-flicker{
  0%{opacity:.16}20%{opacity:.08}40%{opacity:.13}60%{opacity:.05}80%{opacity:.11}100%{opacity:.09}
}
.tv-mode-hd .tv-screen:before,
.tv-mode-hd .tv-screen:after{display:none !important}

/* 20260519g: refined glitch timing from Deloughry pattern — rare steps(1) corruption, not constant random shake */
.tv-mode-crt .tv-broadcast{
  animation:crt-codepen-shadow 1.9s infinite, tv-broadcast-glitch 7s steps(1) infinite !important;
}
.tv-mode-crt .tv-titlebar,
.tv-mode-crt .temp-readout,
.tv-mode-crt .condition-copy,
.tv-mode-crt .ticker span{
  animation:tv-text-glitch 6s steps(1) infinite;
}
.tv-mode-crt .tv-glitch-block{
  position:absolute;
  left:0;
  width:100%;
  height:18px;
  z-index:16;
  opacity:0;
  pointer-events:none;
  mix-blend-mode:difference;
  transform:translateX(0);
}
.tv-mode-crt .tv-glitch-block-a{top:22%;animation:tv-corruption-a 5.8s steps(1) infinite}
.tv-mode-crt .tv-glitch-block-b{top:48%;height:28px;animation:tv-corruption-b 7.4s steps(1) infinite}
.tv-mode-crt .tv-glitch-block-c{top:76%;height:12px;animation:tv-corruption-c 9.1s steps(1) infinite}
.tv-mode-crt .tv-tear{
  display:none !important;
}
.tv-mode-crt .tv-screen.is-glitch,
.tv-mode-crt .tv-screen.is-glitch .tv-stage{
  transform:none !important;
  filter:none !important;
}
@keyframes tv-broadcast-glitch{
  0%,91%,100%{transform:var(--tv-scale-transform, none);filter:contrast(1.16) saturate(1.12) brightness(.9) blur(.12px)}
  92%{filter:contrast(1.22) saturate(1.28) brightness(.95) hue-rotate(2deg);clip-path:inset(0 0 0 0)}
  93%{filter:contrast(1.18) saturate(1.18) brightness(.88) hue-rotate(-2deg);clip-path:inset(12% 0 9% 0)}
  94%{filter:contrast(1.24) saturate(1.3) brightness(.94) hue-rotate(3deg);clip-path:inset(0 0 0 0)}
  95%{filter:contrast(1.12) saturate(1.15) brightness(.9) blur(.18px);clip-path:inset(0 0 0 0)}
}
@keyframes tv-text-glitch{
  0%,92%,100%{transform:translateX(0);text-shadow:inherit}
  93%{transform:translateX(-2px);text-shadow:2px 0 rgba(0,217,255,.55),-2px 0 rgba(255,71,87,.45),0 0 .2em currentColor}
  94%{transform:translateX(2px);text-shadow:-2px 0 rgba(0,217,255,.55),2px 0 rgba(255,71,87,.45),0 0 .2em currentColor}
  95%{transform:translateX(-1px);text-shadow:1px 0 rgba(0,217,255,.5),-1px 0 rgba(255,71,87,.4),0 0 .2em currentColor}
  96%{transform:translateX(1px);text-shadow:inherit}
}
@keyframes tv-corruption-a{
  0%,92%,100%{opacity:0;transform:translateX(0)}
  93%{opacity:.62;transform:translateX(-9px);background:rgba(0,217,255,.85)}
  95%{opacity:.48;transform:translateX(5px);background:rgba(255,71,87,.72)}
  97%{opacity:.58;transform:translateX(-3px);background:rgba(0,255,135,.58)}
}
@keyframes tv-corruption-b{
  0%,88%,100%{opacity:0;transform:translateX(0)}
  89%{opacity:.42;transform:translateX(12px);background:rgba(255,71,87,.55)}
  90%{opacity:.36;transform:translateX(-6px);background:rgba(0,217,255,.62)}
  91%{opacity:0;transform:translateX(0)}
}
@keyframes tv-corruption-c{
  0%,94%,100%{opacity:0;transform:translateX(0)}
  95%{opacity:.5;transform:translateX(-14px);background:rgba(255,250,101,.52)}
  96%{opacity:.28;transform:translateX(8px);background:rgba(0,217,255,.55)}
}
@media (prefers-reduced-motion: reduce){
  .tv-mode-crt .tv-broadcast,
  .tv-mode-crt .tv-titlebar,
  .tv-mode-crt .temp-readout,
  .tv-mode-crt .condition-copy,
  .tv-mode-crt .ticker span,
  .tv-mode-crt .tv-glitch-block{animation:none !important}
}

/* 20260519g-fix: glitch must not animate transform on the scaled broadcast canvas */
@keyframes tv-broadcast-glitch{
  0%,91%,100%{filter:contrast(1.16) saturate(1.12) brightness(.9) blur(.12px);clip-path:inset(0 0 0 0)}
  92%{filter:contrast(1.22) saturate(1.28) brightness(.95) hue-rotate(2deg);clip-path:inset(0 0 0 0)}
  93%{filter:contrast(1.18) saturate(1.18) brightness(.88) hue-rotate(-2deg);clip-path:inset(12% 0 9% 0)}
  94%{filter:contrast(1.24) saturate(1.3) brightness(.94) hue-rotate(3deg);clip-path:inset(0 0 0 0)}
  95%{filter:contrast(1.12) saturate(1.15) brightness(.9) blur(.18px);clip-path:inset(0 0 0 0)}
}

/* 20260519k: homepage-style segmented switch for background music */
.music-switch{
  position:relative;
  display:inline-grid;
  grid-template-columns:1fr 1fr;
  align-items:center;
  width:190px;
  min-height:48px;
  padding:4px;
  border:1px solid rgba(255,255,255,.24);
  border-radius:999px;
  background:rgba(238,242,248,.13);
  color:rgba(255,255,255,.72);
  cursor:pointer;
  font:800 14px/1 Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  overflow:hidden;
  box-shadow:inset 0 1px 2px rgba(255,255,255,.08),0 8px 22px rgba(0,0,0,.18);
}
.music-switch-thumb{
  position:absolute;
  z-index:0;
  left:4px;
  top:4px;
  width:calc(50% - 4px);
  height:calc(100% - 8px);
  border-radius:999px;
  background:#fff;
  box-shadow:0 7px 18px rgba(0,0,0,.24),inset 0 1px 0 rgba(255,255,255,.85);
  transition:transform .22s ease,background .22s ease,box-shadow .22s ease;
}
.music-switch-option{
  position:relative;
  z-index:1;
  display:grid;
  place-items:center;
  min-width:0;
  white-space:nowrap;
  transition:color .18s ease,opacity .18s ease;
}
.music-switch-off{color:#22b8b0}.music-switch-on{color:rgba(255,255,255,.64)}
.music-switch.is-on .music-switch-thumb{
  transform:translateX(100%);
  background:#ffe14d;
  box-shadow:0 7px 18px rgba(0,0,0,.26),0 0 18px rgba(255,225,77,.28);
}
.music-switch.is-on .music-switch-off{color:rgba(255,255,255,.62)}
.music-switch.is-on .music-switch-on{color:#07132b}
.music-switch.is-loading{opacity:.78;pointer-events:none}
.music-switch.is-error{animation:music-switch-error .28s steps(2,end) 2}
.music-switch:focus-visible{outline:3px solid rgba(255,225,77,.62);outline-offset:3px}
@keyframes music-switch-error{50%{transform:translateX(2px)}}
@media (max-width:850px){.music-switch{width:172px;min-height:44px;font-size:13px}}

/* 20260519l: analog CRT pass — softer tube focus, larger phosphor grille, less cyberpunk glitch */
.tv-mode-crt .tv-screen{
  background:rgb(18,22,28) !important;
  overflow:hidden;
}
.tv-mode-crt .tv-broadcast{
  filter:blur(.52px) contrast(1.08) saturate(1.18) brightness(.9) !important;
  background:
    radial-gradient(ellipse at 50% 45%,rgba(33,122,218,.58) 0%,rgba(8,67,153,.68) 40%,rgba(8,24,48,.98) 100%),
    rgb(18,22,28) !important;
  animation:crt-analog-glow 3.8s ease-in-out infinite, tv-analog-sync 8.5s steps(1) infinite !important;
}
.tv-mode-crt .tv-broadcast *{
  text-shadow:
    0 0 .12em currentColor,
    0 0 .34em rgba(160,220,255,.18),
    .85px 0 rgba(255,72,88,.26),
    -.85px 0 rgba(0,217,255,.24) !important;
}
.tv-mode-crt .tv-scanlines{
  z-index:12 !important;
  opacity:.52 !important;
  mix-blend-mode:multiply !important;
  background:
    repeating-linear-gradient(
      to bottom,
      rgba(255,255,255,.055) 0px,
      rgba(255,255,255,.035) 1px,
      rgba(0,0,0,.22) 3px,
      rgba(0,0,0,.22) 5px,
      transparent 6px,
      transparent 8px
    ) !important;
  filter:blur(.25px);
  animation:crt-scanline-breathe .12s steps(2,end) infinite !important;
}
.tv-mode-crt .tv-screen:before{
  content:"";
  position:absolute;
  inset:-1px;
  z-index:13;
  pointer-events:none;
  opacity:.46;
  mix-blend-mode:overlay;
  background:
    repeating-linear-gradient(
      90deg,
      rgba(218,49,49,.62) 0px,
      rgba(218,49,49,.62) 2px,
      rgba(112,159,115,.5) 2px,
      rgba(112,159,115,.5) 4px,
      rgba(40,129,206,.62) 4px,
      rgba(40,129,206,.62) 6px,
      rgba(0,0,0,.24) 6px,
      rgba(0,0,0,.24) 8px
    ),
    radial-gradient(circle at 48% 42%,rgba(255,255,255,.12),transparent 56%);
  filter:blur(.18px);
}
.tv-mode-crt .tv-screen:after{
  content:"";
  position:absolute;
  inset:0;
  z-index:14;
  pointer-events:none;
  opacity:.42;
  mix-blend-mode:soft-light;
  background:
    radial-gradient(ellipse at center,transparent 48%,rgba(0,0,0,.2) 70%,rgba(0,0,0,.68) 100%),
    linear-gradient(90deg,rgba(255,0,80,.06),transparent 18%,transparent 82%,rgba(0,210,255,.06));
  animation:crt-tube-flicker 4.7s steps(1,end) infinite;
}
.tv-mode-crt .tv-static{
  opacity:.018 !important;
  filter:blur(.6px);
  mix-blend-mode:screen !important;
  animation:crt-noise-drift 1.1s steps(2,end) infinite !important;
}
.tv-mode-crt .tv-static:after{opacity:.018 !important}
.tv-mode-crt .tv-glitch-block{
  display:none !important;
}
.tv-mode-crt .tv-titlebar,
.tv-mode-crt .ticker-label{
  filter:blur(.15px) saturate(.92) brightness(.92);
}
.tv-mode-crt .metric-board div,
.tv-mode-crt .hourly-card,
.tv-mode-crt .daily-card,
.tv-mode-crt .travel-grid div,
.tv-mode-crt .summary-card,
.tv-mode-crt .radar-wrap{
  box-shadow:
    inset 0 0 26px rgba(150,220,255,.08),
    0 0 16px rgba(0,80,180,.18) !important;
  border-color:rgba(210,240,255,.46) !important;
}
.tv-mode-crt .tv-vignette{
  z-index:15 !important;
  box-shadow:
    inset 0 0 34px rgba(255,255,255,.035),
    inset 0 0 96px 34px rgba(0,0,0,.72),
    inset 0 0 180px 72px rgba(0,0,0,.36) !important;
}
.tv-mode-crt .tv-screen:fullscreen .tv-broadcast{
  filter:blur(.62px) contrast(1.08) saturate(1.18) brightness(.9) !important;
}
@keyframes crt-analog-glow{
  0%,100%{text-shadow:0 0 .12em currentColor,.8px 0 rgba(255,72,88,.24),-.8px 0 rgba(0,217,255,.22)}
  50%{text-shadow:0 0 .18em currentColor,1.05px 0 rgba(255,72,88,.28),-1.05px 0 rgba(0,217,255,.26)}
}
@keyframes tv-analog-sync{
  0%,88%,100%{clip-path:inset(0 0 0 0)}
  89%{clip-path:inset(1% 0 0 0)}
  90%{clip-path:inset(0 0 1% 0)}
  91%{clip-path:inset(0 0 0 0)}
}
@keyframes crt-scanline-breathe{
  0%,100%{opacity:.5;transform:translateY(0)}
  50%{opacity:.56;transform:translateY(1px)}
}
@keyframes crt-tube-flicker{
  0%,100%{opacity:.42}
  18%{opacity:.36}
  19%{opacity:.47}
  58%{opacity:.39}
  59%{opacity:.45}
  87%{opacity:.34}
  88%{opacity:.44}
}
.tv-mode-hd .tv-broadcast{filter:none !important;animation:none !important}

/* 20260519m: unstable broadcast frequency noise + authentic weather icons + English-only TV labels */
.current-panel{display:grid;grid-template-columns:auto 1fr;gap:24px;align-items:center;height:100%}
.weather-icon{display:inline-grid;place-items:center;font-style:normal;line-height:1;filter:drop-shadow(0 0 12px rgba(180,230,255,.32));text-shadow:none !important}.weather-icon-current{width:168px;height:168px;border:3px solid rgba(255,255,255,.58);border-radius:22px;background:rgba(0,20,64,.62);box-shadow:inset 0 0 32px rgba(180,230,255,.1),0 0 24px rgba(0,40,120,.28);font-size:96px}.hourly-card .weather-icon,.daily-card .weather-icon{display:block;margin:8px auto 6px;font-size:40px}.daily-card .weather-icon{font-size:36px}.tv-mode-crt .weather-icon{filter:blur(.22px) drop-shadow(0 0 14px rgba(190,235,255,.28));opacity:.92}
.tv-frequency{position:absolute;left:-8%;right:-8%;height:22px;z-index:16;pointer-events:none;opacity:0;mix-blend-mode:screen;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),rgba(80,190,255,.16),rgba(0,0,0,.18),transparent);filter:blur(1.2px)}.tv-frequency-a{top:18%;animation:tv-frequency-roll-a 7.8s steps(1,end) infinite}.tv-frequency-b{top:52%;height:38px;animation:tv-frequency-roll-b 10.4s steps(1,end) infinite}.tv-frequency-c{top:78%;height:14px;animation:tv-frequency-roll-c 13.2s steps(1,end) infinite}.tv-mode-hd .tv-frequency{display:none}.tv-mode-crt .tv-screen{animation:crt-voltage-breath 5.6s steps(1,end) infinite !important}.tv-mode-crt .tv-broadcast{animation:crt-analog-glow 3.8s ease-in-out infinite,tv-analog-sync-soft 8.5s steps(1,end) infinite !important}
@keyframes tv-frequency-roll-a{0%,86%,100%{opacity:0;transform:translateX(0) translateY(0)}87%{opacity:.62;transform:translateX(-18px) translateY(8px)}88%{opacity:.24;transform:translateX(22px) translateY(-4px)}89%{opacity:.4;transform:translateX(-9px) translateY(15px)}90%{opacity:0;transform:translateX(0) translateY(0)}}
@keyframes tv-frequency-roll-b{0%,91%,100%{opacity:0;transform:translateX(0) scaleY(1)}92%{opacity:.35;transform:translateX(36px) scaleY(1.4)}93%{opacity:.58;transform:translateX(-24px) scaleY(.8)}94%{opacity:.18;transform:translateX(12px) scaleY(1.2)}}
@keyframes tv-frequency-roll-c{0%,94%,100%{opacity:0;transform:translateX(0)}95%{opacity:.46;transform:translateX(-42px)}96%{opacity:.22;transform:translateX(28px)}97%{opacity:0;transform:translateX(0)}}
@keyframes crt-voltage-breath{0%,100%{filter:brightness(1)}18%{filter:brightness(.96)}19%{filter:brightness(1.04)}64%{filter:brightness(.98)}65%{filter:brightness(1.03)}88%{filter:brightness(.94)}89%{filter:brightness(1.02)}}
@keyframes tv-analog-sync-soft{0%,88%,100%{clip-path:inset(0 0 0 0)}89%{clip-path:inset(0.6% 0 0 0)}90%{clip-path:inset(0 0 .7% 0)}91%{clip-path:inset(0 0 0 0)}}
@media (max-width:850px){.current-panel{grid-template-columns:1fr;text-align:center}.weather-icon-current{width:118px;height:118px;font-size:70px;margin:0 auto}.hourly-card .weather-icon,.daily-card .weather-icon{font-size:32px}}

/* 20260519n: fix forecast card proportions and normalize weather icon sizing */
.current-panel{
  grid-template-columns:150px 1fr !important;
  gap:26px !important;
  align-items:center !important;
  height:100% !important;
}
.weather-icon{
  width:52px;
  height:52px;
  display:inline-grid !important;
  place-items:center !important;
  font-size:34px !important;
  line-height:1 !important;
  overflow:hidden;
  font-family:"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",system-ui,sans-serif;
}
.weather-icon-current{
  width:136px !important;
  height:136px !important;
  font-size:78px !important;
  border-radius:20px !important;
  flex:0 0 136px;
}
.hourly-strip{
  grid-template-columns:repeat(6,1fr) !important;
  gap:12px !important;
  align-items:stretch !important;
  margin:auto 0 !important;
}
.daily-grid{
  grid-template-columns:repeat(7,1fr) !important;
  gap:10px !important;
  align-items:stretch !important;
  margin:auto 0 !important;
}
.hourly-card,
.daily-card{
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
  justify-content:center !important;
  min-height:212px !important;
  padding:14px 10px !important;
  border-radius:12px !important;
  overflow:hidden !important;
}
.daily-card{min-height:224px !important;padding:13px 8px !important}
.hourly-card .weather-icon,
.daily-card .weather-icon{
  margin:7px auto 6px !important;
  flex:0 0 auto;
}
.hourly-card strong,
.daily-card strong{
  font-size:38px !important;
  line-height:.95 !important;
  margin:5px 0 6px !important;
  white-space:nowrap;
}
.daily-card strong{font-size:31px !important}
.hourly-card span,
.daily-card span{
  max-width:100%;
  overflow:hidden;
  text-overflow:ellipsis;
  text-align:center;
  line-height:1.08 !important;
}
.hourly-card span:first-child,
.daily-card span:first-child{
  font-size:17px !important;
  font-weight:950 !important;
}
.hourly-card span:last-child,
.daily-card span:last-child{
  font-size:13px !important;
  min-height:28px;
  display:-webkit-box !important;
  -webkit-line-clamp:2;
  -webkit-box-orient:vertical;
  white-space:normal !important;
}
.daily-card span:nth-of-type(2){font-size:13px !important;min-height:auto}
.tv-mode-crt .weather-icon{
  filter:blur(.16px) drop-shadow(0 0 10px rgba(190,235,255,.24)) !important;
}
@media (max-width:850px){
  .current-panel{grid-template-columns:1fr !important;gap:10px !important;text-align:center !important}
  .weather-icon-current{width:96px !important;height:96px !important;font-size:58px !important;margin:0 auto !important}
  .hourly-strip,.daily-grid{grid-template-columns:repeat(2,1fr) !important}
  .hourly-card,.daily-card{min-height:170px !important}
}
