:root { --panel-ink: #08265d; --panel-muted: #315d91; --tile: rgba(219, 241, 253, 0.22); --tile-strong: rgba(244, 251, 255, 0.4); --tile-line: rgba(255, 255, 255, 0.9); --tile-line-soft: rgba(193, 226, 244, 0.5); --tile-shadow: 0 14px 32px rgba(23, 75, 111, 0.16), inset 0 1px 0 rgba(255,255,255,0.92), inset 1px 0 0 rgba(255,255,255,0.36); --panel-glass: rgba(211, 235, 248, 0.35); --panel-edge: rgba(255, 255, 255, 0.92); --blue-halo: rgba(25, 139, 255, 0.34); --green-halo: rgba(30, 205, 120, 0.34); --orange-halo: rgba(255, 126, 46, 0.3); } :root[data-theme="dark"] { --panel-ink: #edf8ff; --panel-muted: #9fc5df; --tile: rgba(28, 48, 65, 0.46); --tile-strong: rgba(45, 71, 89, 0.54); --tile-line: rgba(194, 229, 247, 0.3); --tile-line-soft: rgba(114, 176, 207, 0.22); --tile-shadow: 0 16px 38px rgba(0, 0, 0, 0.34), inset 0 1px 0 rgba(235,249,255,0.14), inset 1px 0 0 rgba(190,228,247,0.08); --panel-glass: rgba(13, 29, 41, 0.58); --panel-edge: rgba(187, 225, 244, 0.32); --blue-halo: rgba(30, 161, 255, 0.42); --green-halo: rgba(25, 225, 129, 0.35); --orange-halo: rgba(255, 126, 39, 0.34); } html { min-width: 320px; } body { min-height: 100vh; padding: clamp(0.7rem, 2vw, 2rem); color: var(--panel-ink); background: radial-gradient(ellipse at 8% 10%, rgba(244,253,255,.95) 0 7%, transparent 24%), radial-gradient(ellipse at 73% -8%, rgba(255,249,239,.85) 0 10%, transparent 29%), radial-gradient(ellipse at 93% 32%, rgba(90,152,125,.52) 0 10%, transparent 28%), radial-gradient(ellipse at 12% 80%, rgba(65,132,170,.46) 0 12%, transparent 31%), linear-gradient(115deg, rgba(184,222,239,.94), rgba(213,236,247,.82) 37%, rgba(239,232,217,.82) 66%, rgba(129,181,183,.88)); background-attachment: fixed; overflow-x: hidden; isolation: isolate; } :root[data-theme="dark"] body { background: radial-gradient(ellipse at 6% 2%, rgba(54,112,145,.44) 0 8%, transparent 28%), radial-gradient(ellipse at 78% -5%, rgba(138,103,60,.31) 0 9%, transparent 28%), radial-gradient(ellipse at 94% 36%, rgba(28,91,78,.44) 0 12%, transparent 31%), radial-gradient(ellipse at 15% 87%, rgba(17,84,122,.42) 0 13%, transparent 33%), linear-gradient(118deg, #081723, #122d3d 40%, #292c30 68%, #0c262c); } body::before { content: ""; position: fixed; inset: -7rem; z-index: -3; background: linear-gradient(90deg, transparent 0 13%, rgba(255,255,255,.55) 13% 16%, transparent 16% 34%, rgba(255,255,255,.35) 34% 37%, transparent 37% 68%, rgba(255,255,255,.42) 68% 71%, transparent 71%), linear-gradient(0deg, transparent 0 58%, rgba(228,244,251,.48) 58% 61%, transparent 61%), radial-gradient(ellipse at 50% 114%, rgba(36,111,68,.48) 0 17%, transparent 47%); filter: blur(26px); transform: scale(1.05); } body::after { content: ""; position: fixed; inset: 0; z-index: -2; pointer-events: none; background: radial-gradient(circle at 4% 22%, rgba(255,255,255,.88) 0 .8%, transparent 5%), radial-gradient(circle at 19% 74%, rgba(246,253,255,.68) 0 1.2%, transparent 7%), radial-gradient(circle at 62% 34%, rgba(255,241,210,.63) 0 1.3%, transparent 8%), radial-gradient(circle at 89% 13%, rgba(244,253,255,.66) 0 1%, transparent 6%), radial-gradient(circle at 82% 82%, rgba(209,238,228,.48) 0 1.5%, transparent 8%); filter: blur(8px); opacity: .86; } .ambient::before { width: 42rem; height: 42rem; left: -14rem; top: -18rem; background: #c9f2ff; opacity: .58; filter: blur(54px); } .ambient::after { width: 46rem; height: 46rem; right: -14rem; bottom: -21rem; background: #ebd5a7; opacity: .38; filter: blur(64px); } :root[data-theme="dark"] .ambient::before { background: #147db5; opacity: .24; } :root[data-theme="dark"] .ambient::after { background: #846630; opacity: .2; } .climate-panel { position: relative; isolation: isolate; overflow: hidden; width: min(100%, 104rem); min-height: calc(100vh - clamp(1.4rem, 4vw, 4rem)); margin: 0 auto; padding: clamp(0.65rem, 1.25vw, 1.25rem); border: 1px solid var(--panel-edge); outline: 1px solid rgba(255,255,255,.5); outline-offset: -5px; border-radius: 1.5rem; background: linear-gradient(125deg, rgba(255,255,255,.34), transparent 29%, rgba(255,255,255,.11) 67%, rgba(214,235,247,.2)), var(--panel-glass); box-shadow: 0 32px 90px rgba(20,60,89,.3), 0 2px 10px rgba(255,255,255,.35), inset 0 1px 0 rgba(255,255,255,.95), inset 0 -1px 0 rgba(114,162,192,.23); backdrop-filter: blur(34px) saturate(148%); -webkit-backdrop-filter: blur(34px) saturate(148%); } :root[data-theme="dark"] .climate-panel { outline-color: rgba(203,235,250,.12); box-shadow: 0 38px 100px rgba(0,0,0,.48), 0 0 42px rgba(21,120,171,.1), inset 0 1px 0 rgba(224,246,255,.2), inset 0 -1px 0 rgba(0,0,0,.35); } .climate-panel::before { content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none; border-radius: inherit; background: linear-gradient(112deg, rgba(255,255,255,.44) 0, rgba(255,255,255,.08) 17%, transparent 38%), radial-gradient(ellipse at 52% -16%, rgba(255,255,255,.54), transparent 48%), radial-gradient(ellipse at 100% 100%, rgba(102,178,219,.13), transparent 42%); } .climate-panel::after { content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none; opacity: .2; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.16'/%3E%3C/svg%3E"); mix-blend-mode: soft-light; } .climate-panel > * { position: relative; z-index: 1; } .glass-tile, .glass-section { position: relative; isolation: isolate; overflow: hidden; border: 1px solid var(--tile-line); outline: 1px solid var(--tile-line-soft); outline-offset: -3px; background: linear-gradient(132deg, rgba(255,255,255,.38), rgba(255,255,255,.06) 35%, transparent 63%), linear-gradient(145deg, var(--tile-strong), var(--tile)); box-shadow: var(--tile-shadow); backdrop-filter: blur(23px) saturate(145%); -webkit-backdrop-filter: blur(23px) saturate(145%); } .glass-tile::before, .glass-section::before { content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none; border-radius: inherit; background: linear-gradient(115deg, rgba(255,255,255,.35), transparent 25%, transparent 72%, rgba(255,255,255,.08)); } .glass-tile > *, .glass-section > * { position: relative; z-index: 1; } .speed-card::after, .temperature-card::after, .power-card::after, .heater-card::after { content: ""; position: absolute; z-index: 0; width: 13rem; height: 13rem; right: -5rem; bottom: -7rem; border-radius: 50%; pointer-events: none; filter: blur(17px); } .speed-card::after { background: var(--blue-halo); } .temperature-card::after { width: 18rem; background: linear-gradient(90deg, var(--blue-halo), var(--orange-halo)); } .power-card::after { background: var(--green-halo); opacity: .64; } .heater-card::after { background: var(--orange-halo); opacity: .58; } .panel-header { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 0 0.65rem 0.7rem; } .identity, .header-tools { display: flex; align-items: center; gap: 0.65rem; } .identity h1 { margin: 0 0.35rem 0 0; font-size: clamp(1.8rem, 3.1vw, 3rem); line-height: 1; letter-spacing: -0.045em; } .climate-panel .pill { min-height: 2.05rem; padding: .38rem .82rem; border-color: rgba(255,255,255,.62); box-shadow: inset 0 1px 0 rgba(255,255,255,.72), 0 6px 18px rgba(26,75,108,.1); backdrop-filter: blur(14px); } .climate-panel .pill.good { box-shadow: 0 0 21px rgba(28,204,117,.18), inset 0 1px 0 rgba(255,255,255,.74); } .climate-panel .pill.warn { box-shadow: 0 0 21px rgba(242,145,56,.17), inset 0 1px 0 rgba(255,255,255,.74); } .climate-panel .pill.info { box-shadow: 0 0 21px rgba(31,145,236,.16), inset 0 1px 0 rgba(255,255,255,.74); } .climate-panel .icon-button { border-color: var(--tile-line); background: linear-gradient(145deg, var(--tile-strong), var(--tile)); box-shadow: var(--tile-shadow); backdrop-filter: blur(16px); } .header-tools { justify-content: flex-end; } .ventilation-badge { display: flex; align-items: center; gap: 0.7rem; min-width: 22rem; padding: 0.55rem 1rem; border-radius: 1rem; } .ventilation-badge svg { width: 2.5rem; color: #1977d2; filter: drop-shadow(0 0 9px rgba(26,128,226,.34)); } .ventilation-badge strong, .ventilation-badge small { display: block; } .ventilation-badge strong { font-size: 0.9rem; } .ventilation-badge small { margin-top: 0.1rem; color: var(--panel-muted); font-size: 0.68rem; } .primary-controls { display: grid; grid-template-columns: 2.05fr 2.05fr .95fr .95fr; gap: 0.75rem; } .control-card, .switch-card { min-height: 17.6rem; border-radius: 1.15rem; padding: 1rem; } .control-card { display: flex; flex-direction: column; } .card-title { display: flex; align-items: flex-start; gap: 0.72rem; } .card-title.compact { align-items: center; } .card-title h2 { margin: 0; font-size: clamp(1rem, 1.55vw, 1.28rem); letter-spacing: -0.02em; } .card-title p { margin: 0.18rem 0 0; color: var(--panel-muted); font-size: 0.72rem; } .feature-icon { display: grid; place-items: center; flex: 0 0 auto; width: 2.1rem; height: 2.1rem; color: #1389f4; font-size: 1.75rem; font-weight: 800; line-height: 1; text-shadow: 0 0 16px rgba(20,139,244,.46); } .feature-icon.green { color: #08a95a; text-shadow: 0 0 20px rgba(20,210,112,.62); } .feature-icon.orange { color: #f06419; text-shadow: 0 0 18px rgba(255,105,29,.46); } .fan-icon { font-size: 2.2rem; } .hero-control { display: grid; grid-template-columns: 4.3rem 1fr 4.3rem; align-items: center; gap: 1rem; margin: auto 0 0.75rem; } .hero-value { text-align: center; font-size: clamp(3.2rem, 5vw, 4.35rem); line-height: 1; letter-spacing: -0.06em; font-variant-numeric: tabular-nums; } .hero-step { display: grid; place-items: center; width: 4.3rem; height: 4.3rem; border: 1.5px solid rgba(255,255,255,.85); border-radius: 1rem; color: #176dbb; background: linear-gradient(145deg, rgba(245,252,255,.42), rgba(191,224,244,.2)); box-shadow: 0 10px 24px rgba(35,92,132,.15), inset 0 1px 0 rgba(255,255,255,.9), 0 0 0 1px rgba(185,226,248,.24); cursor: pointer; font-size: 2.3rem; font-weight: 500; transition: transform .15s ease, filter .15s ease; } .hero-step.primary { color: white; background: linear-gradient(145deg, #57b5ff, #1376e4 76%); box-shadow: 0 12px 28px rgba(16,103,220,.35), 0 0 26px var(--blue-halo), inset 0 1px 0 rgba(255,255,255,.8), inset 0 -2px 5px rgba(0,67,156,.24); } .hero-step:hover { transform: translateY(-2px); filter: brightness(1.08); box-shadow: 0 14px 32px rgba(25,112,219,.35), 0 0 32px var(--blue-halo), inset 0 1px 0 rgba(255,255,255,.78); } .hero-step:active { transform: scale(.98); } .speed-range { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); clip-path: inset(50%); white-space: nowrap; } .speed-segments { display: grid; grid-template-columns: repeat(6, 1fr); gap: 0.16rem; } .speed-segments button { height: 1.12rem; padding: 0; border: 1px solid rgba(255,255,255,.88); border-radius: .55rem; background: linear-gradient(180deg, rgba(173,207,229,.32), rgba(98,151,190,.2)); box-shadow: inset 0 1px 2px rgba(27,70,105,.08), 0 2px 5px rgba(32,86,126,.08); cursor: pointer; transition: background .12s ease, box-shadow .12s ease, transform .12s ease; } .speed-segments button:hover { transform: translateY(-1px); } .speed-segments button.active { background: linear-gradient(90deg, #0e82ed, #37b8ff); box-shadow: 0 0 17px rgba(25,143,247,.56), inset 0 1px 0 rgba(255,255,255,.74), inset 0 -2px 4px rgba(0,84,182,.22); } .speed-labels, .temperature-labels { display: flex; justify-content: space-between; margin-top: 0.45rem; padding: 0 .55rem; color: var(--panel-muted); font-size: 0.68rem; } .temperature-range { height: 1.45rem; } .temperature-range::-webkit-slider-runnable-track { height: .78rem; background: linear-gradient(90deg, #0878ed, #53c7f5 38%, #f3c26e 72%, #ff6b31); border: 1px solid rgba(255,255,255,.92); box-shadow: 0 0 16px rgba(37,153,239,.24), 0 0 14px rgba(255,114,41,.14), inset 0 1px 2px rgba(255,255,255,.5); } .temperature-range::-webkit-slider-thumb { width: 1.9rem; height: 1.9rem; margin-top: -.58rem; border-width: .28rem; box-shadow: 0 0 0 2px rgba(255,255,255,.55), 0 0 22px rgba(29,139,241,.58), 0 5px 13px rgba(17,79,143,.3); } .temperature-range::-moz-range-track { height: .78rem; background: linear-gradient(90deg, #0878ed, #53c7f5 38%, #f3c26e 72%, #ff6b31); } .temperature-range::-moz-range-progress { background: transparent; } .switch-card { display: flex; flex-direction: column; justify-content: space-between; } .glass-switch { width: 100%; min-height: 6rem; border: 1.5px solid rgba(255,255,255,.9); border-radius: 1rem; color: var(--panel-ink); background: rgba(199,222,235,.28); box-shadow: var(--tile-shadow); cursor: pointer; font-size: 1.75rem; font-weight: 850; text-shadow: 0 1px 0 rgba(255,255,255,.35); transition: transform .15s ease, background .2s ease, box-shadow .2s ease, filter .2s ease; } .glass-switch:hover { transform: translateY(-2px); filter: brightness(1.06); } .glass-switch[aria-pressed="true"].green { background: linear-gradient(145deg, rgba(145,255,198,.9), rgba(38,194,113,.62)); border-color: rgba(213,255,232,.96); box-shadow: 0 14px 32px rgba(11,153,81,.3), 0 0 32px var(--green-halo), inset 0 1px 0 rgba(255,255,255,.9), inset 0 -4px 10px rgba(0,125,62,.18); } .glass-switch[aria-pressed="true"].orange { background: linear-gradient(145deg, rgba(255,202,130,.88), rgba(245,112,40,.58)); border-color: rgba(255,236,213,.95); box-shadow: 0 14px 32px rgba(210,91,25,.3), 0 0 30px var(--orange-halo), inset 0 1px 0 rgba(255,255,255,.88), inset 0 -4px 10px rgba(168,54,0,.17); } .content-section { margin-top: 0.75rem; padding: 0.7rem; border-radius: 1.15rem; } .section-title { display: flex; align-items: center; gap: 0.65rem; min-height: 2.35rem; padding: 0 0.35rem 0.5rem; } .section-title > div { display: flex; align-items: center; gap: 0.55rem; } .section-title h2 { margin: 0; font-size: clamp(1rem, 1.55vw, 1.28rem); } .section-icon { display: grid; place-items: center; width: 1.8rem; height: 1.8rem; color: #207bcc; font-size: 1.55rem; text-shadow: 0 0 14px rgba(26,124,210,.38); } .section-icon.leaf { color: #069c51; transform: rotate(-18deg); text-shadow: 0 0 15px rgba(8,173,88,.42); } .section-title .updated { margin-left: auto; color: var(--panel-muted); font-size: 0.7rem; } .air-grid { display: grid; grid-template-columns: 1.55fr 1fr .9fr 1fr 1fr 1.28fr; gap: 0.55rem; } .metric-card { min-width: 0; min-height: 9.4rem; padding: 0.85rem; border-radius: 1rem; } .metric-head, .metric-heading { display: flex; align-items: center; gap: 0.55rem; color: var(--panel-muted); font-size: 0.76rem; } .metric-head { justify-content: space-between; } .metric-icon { color: #137edc; font-size: 1.7rem; line-height: 1; text-shadow: 0 0 14px rgba(20,124,221,.34); } .metric-icon.dots { letter-spacing: -.2rem; } .metric-card > strong { display: block; margin-top: 0.75rem; font-size: clamp(1.55rem, 2.4vw, 2.2rem); line-height: 1; font-variant-numeric: tabular-nums; white-space: nowrap; } .metric-card strong small { color: var(--panel-muted); font-size: .63rem; font-weight: 600; } .quality-chip { display: inline-flex; justify-content: center; padding: .35rem .72rem; border: 1px solid rgba(109,237,167,.82); border-radius: 999px; color: #076d3d; background: linear-gradient(145deg, rgba(179,255,214,.7), rgba(92,218,151,.48)); box-shadow: 0 0 17px rgba(33,203,116,.24), inset 0 1px 0 rgba(255,255,255,.88); font-size: .66rem; font-weight: 750; } :root[data-theme="dark"] .quality-chip { color: #b9ffda; } .quality-chip.small { margin-top: .8rem; min-width: 5.5rem; } .co2-card > p { height: 1rem; margin: .2rem 0 .55rem; color: var(--panel-muted); font-size: .58rem; overflow: hidden; } .meter { height: .82rem; border: 1px solid rgba(255,255,255,.8); border-radius: 999px; background: rgba(91,145,181,.18); overflow: hidden; } .meter i { display: block; height: 100%; width: 0; border-radius: inherit; background: linear-gradient(90deg, #08a350, #36dc83); box-shadow: 0 0 18px rgba(18,199,104,.58), inset 0 1px 0 rgba(255,255,255,.64); transition: width .35s ease; } .meter-labels { display: flex; justify-content: space-between; margin-top: .27rem; color: rgba(22,69,108,.78); font-size: .6rem; font-weight: 650; text-shadow: 0 1px 0 rgba(255,255,255,.48); } :root[data-theme="dark"] .meter-labels { color: rgba(211,235,248,.76); text-shadow: 0 1px 2px rgba(0,0,0,.58); } .filter-line { display: flex; align-items: center; gap: .45rem; margin-top: 1rem; } .filter-meter { flex: 1; } .filter-meter i { background: linear-gradient(90deg, #176dec, #36c1ff); box-shadow: 0 0 18px rgba(31,144,247,.55), inset 0 1px 0 rgba(255,255,255,.58); } .filter-line > span { font-size: .65rem; font-weight: 750; } .bottom-grid { display: grid; grid-template-columns: 1.4fr 1fr; gap: 0.75rem; } .schedule-layout { display: grid; grid-template-columns: 1.35fr 1fr; gap: 0.7rem; } .schedule-times { display: grid; grid-template-columns: 1fr 1px 1fr; gap: 1rem; align-items: center; min-height: 8.2rem; padding: 1rem 1.3rem; border-radius: 1rem; } .schedule-times > i { width: 1px; height: 80%; background: rgba(49,93,145,.25); } .schedule-times div { display: grid; gap: .22rem; } .schedule-times span, .schedule-times small { color: var(--panel-muted); font-size: .68rem; } .schedule-times strong { font-size: clamp(1.65rem, 2.8vw, 2.3rem); font-variant-numeric: tabular-nums; } .schedule-buttons { display: grid; gap: .55rem; } .schedule-button { display: grid; grid-template-columns: 2.4rem 1fr; align-items: center; gap: .65rem; min-height: 3.8rem; padding: .55rem .8rem; border: 1.5px solid; border-radius: .9rem; text-align: left; cursor: pointer; } .schedule-button strong, .schedule-button small { display: block; } .schedule-button strong { font-size: .84rem; } .schedule-button small { margin-top: .12rem; font-size: .62rem; } .schedule-button.auto { color: #096bda; border-color: rgba(83,176,255,.9); background: linear-gradient(145deg, rgba(224,244,255,.67), rgba(133,201,250,.26)); box-shadow: 0 9px 24px rgba(23,113,212,.19), 0 0 20px rgba(42,153,243,.13), inset 0 1px 0 rgba(255,255,255,.92); } .schedule-button.pause { color: #a73512; border-color: rgba(250,174,102,.9); background: linear-gradient(145deg, rgba(255,240,217,.72), rgba(246,177,107,.28)); box-shadow: 0 9px 24px rgba(202,104,44,.17), 0 0 20px rgba(244,131,50,.12), inset 0 1px 0 rgba(255,255,255,.92); } .schedule-button:hover { filter: brightness(1.06); transform: translateY(-1px); } .action-symbol { font-size: 2rem; font-weight: 800; text-align: center; } .mode-banner { display: flex; gap: .4rem; align-items: center; margin-top: .5rem; padding: .45rem .7rem; border-radius: .65rem; color: var(--panel-muted); background: rgba(255,255,255,.14); font-size: .62rem; } .mode-banner small::before { content: "ยท "; } .extras-grid { display: grid; grid-template-columns: .9fr 1.3fr; gap: .55rem; } .extra-card { display: flex; align-items: center; gap: .8rem; min-height: 8.2rem; padding: 1rem; border-radius: 1rem; } .extra-icon { color: #267fd3; font-size: 3.4rem; line-height: 1; text-shadow: 0 0 19px rgba(33,126,211,.32); } .extra-icon.wind { font-size: 3.8rem; transform: rotate(90deg); } .extra-card small, .extra-card strong, .extra-card em { display: block; } .extra-card small { color: var(--panel-muted); font-size: .7rem; } .extra-card strong { margin-top: .18rem; font-size: clamp(1.3rem, 2.2vw, 2rem); font-style: normal; } .extra-card em { margin-top: .18rem; color: var(--panel-muted); font-size: .62rem; font-style: normal; } .mode-card { display: grid; grid-template-columns: auto 1fr; } .mode-card strong { font-size: .85rem; } .segments { grid-column: 1 / -1; display: flex; gap: .3rem; } .segment { flex: 1; padding: .42rem; border: 1px solid rgba(255,255,255,.55); border-radius: .55rem; color: var(--panel-muted); background: rgba(255,255,255,.14); cursor: pointer; font-size: .58rem; } .segment.active { color: white; background: linear-gradient(145deg, #45a7f4, #1976d2); } .micro-settings { display: flex; align-items: center; gap: .65rem; margin-top: .55rem; padding: 0 .25rem; color: var(--panel-muted); font-size: .58rem; } .micro-settings > span:nth-child(2) { margin-right: auto; } .micro-toggle { padding: .32rem .55rem; border: 1px solid var(--tile-line); border-radius: 999px; color: var(--panel-muted); background: var(--tile); cursor: pointer; font-size: .56rem; } .micro-toggle[aria-pressed="true"] { color: #087848; background: rgba(105,222,160,.38); } .demo-note { display: block; margin-top: .55rem; color: var(--panel-muted); text-align: center; font-size: .62rem; } /* Dark aeroglass keeps the same optical depth, with colder edges and brighter local halos so active controls do not disappear into the glass. */ :root[data-theme="dark"] body::after { opacity: .42; mix-blend-mode: screen; } :root[data-theme="dark"] .climate-panel::before { background: linear-gradient(112deg, rgba(205,239,255,.14), rgba(255,255,255,.025) 21%, transparent 42%), radial-gradient(ellipse at 52% -16%, rgba(112,202,244,.13), transparent 50%), radial-gradient(ellipse at 100% 100%, rgba(23,139,186,.12), transparent 44%); } :root[data-theme="dark"] .glass-tile, :root[data-theme="dark"] .glass-section { background: linear-gradient(132deg, rgba(211,240,253,.105), rgba(255,255,255,.018) 38%, transparent 65%), linear-gradient(145deg, var(--tile-strong), var(--tile)); } :root[data-theme="dark"] .glass-tile::before, :root[data-theme="dark"] .glass-section::before { background: linear-gradient(115deg, rgba(218,243,255,.12), transparent 26%, transparent 74%, rgba(80,181,222,.045)); } :root[data-theme="dark"] .hero-step { color: #8ed3ff; border-color: rgba(184,226,247,.28); background: linear-gradient(145deg, rgba(89,137,166,.2), rgba(20,48,67,.23)); box-shadow: 0 12px 28px rgba(0,0,0,.28), inset 0 1px 0 rgba(224,246,255,.14), 0 0 0 1px rgba(60,157,205,.08); } :root[data-theme="dark"] .hero-step.primary { color: white; background: linear-gradient(145deg, #42b8ff, #096bd3 78%); box-shadow: 0 13px 32px rgba(0,65,139,.5), 0 0 30px var(--blue-halo), inset 0 1px 0 rgba(220,248,255,.52), inset 0 -3px 7px rgba(0,27,91,.38); } :root[data-theme="dark"] .speed-segments button { border-color: rgba(192,226,244,.25); background: linear-gradient(180deg, rgba(91,136,162,.23), rgba(24,55,74,.28)); } :root[data-theme="dark"] .speed-segments button.active { border-color: rgba(117,207,255,.55); background: linear-gradient(90deg, #0877df, #20b7ff); box-shadow: 0 0 20px rgba(24,156,255,.66), inset 0 1px 0 rgba(223,248,255,.42); } :root[data-theme="dark"] .glass-switch { color: #ddecf4; border-color: rgba(193,228,245,.25); background: linear-gradient(145deg, rgba(77,112,133,.23), rgba(20,44,59,.28)); text-shadow: 0 1px 2px rgba(0,0,0,.4); } :root[data-theme="dark"] .glass-switch[aria-pressed="true"].green { color: #eafff4; border-color: rgba(118,255,185,.54); background: linear-gradient(145deg, rgba(56,221,137,.76), rgba(8,120,69,.67)); box-shadow: 0 15px 36px rgba(0,0,0,.3), 0 0 38px var(--green-halo), inset 0 1px 0 rgba(218,255,236,.48); } :root[data-theme="dark"] .glass-switch[aria-pressed="true"].orange { color: #fff5e9; border-color: rgba(255,185,118,.53); background: linear-gradient(145deg, rgba(244,145,61,.76), rgba(143,58,14,.68)); box-shadow: 0 15px 36px rgba(0,0,0,.3), 0 0 36px var(--orange-halo), inset 0 1px 0 rgba(255,237,216,.48); } :root[data-theme="dark"] .quality-chip { color: #caffdf; border-color: rgba(89,232,158,.42); background: linear-gradient(145deg, rgba(45,186,113,.35), rgba(11,101,60,.3)); box-shadow: 0 0 20px rgba(20,218,118,.18), inset 0 1px 0 rgba(210,255,232,.16); } :root[data-theme="dark"] .schedule-button.auto { color: #a8ddff; border-color: rgba(76,176,241,.48); background: linear-gradient(145deg, rgba(38,125,187,.29), rgba(15,61,91,.28)); box-shadow: 0 10px 27px rgba(0,0,0,.23), 0 0 24px rgba(27,150,237,.13), inset 0 1px 0 rgba(211,241,255,.13); } :root[data-theme="dark"] .schedule-button.pause { color: #ffc18c; border-color: rgba(242,147,70,.48); background: linear-gradient(145deg, rgba(167,82,27,.3), rgba(73,40,25,.27)); box-shadow: 0 10px 27px rgba(0,0,0,.23), 0 0 24px rgba(244,117,35,.12), inset 0 1px 0 rgba(255,230,207,.12); } :root[data-theme="dark"] .meter { border-color: rgba(200,232,247,.24); background: rgba(3,22,34,.34); box-shadow: inset 0 2px 5px rgba(0,0,0,.2); } :root[data-theme="dark"] .micro-toggle { border-color: rgba(190,226,244,.2); background: rgba(76,117,141,.15); } :root[data-theme="dark"] .micro-toggle[aria-pressed="true"] { color: #b8ffda; border-color: rgba(67,213,139,.35); background: rgba(21,149,85,.26); box-shadow: 0 0 15px rgba(20,208,114,.12); } /* Photographic aeroglass refinement. The backdrop already contains optical blur, so the UI only adds a restrained haze instead of whitening the scene. */ :root { --tile: rgba(214, 238, 251, 0.14); --tile-strong: rgba(247, 252, 255, 0.27); --tile-line: rgba(255, 255, 255, 0.82); --tile-line-soft: rgba(206, 235, 249, 0.43); --panel-glass: rgba(200, 228, 244, 0.2); --blue-halo: rgba(23, 137, 248, 0.16); --green-halo: rgba(28, 196, 113, 0.16); --orange-halo: rgba(246, 126, 50, 0.14); } :root[data-theme="dark"] { --tile: rgba(16, 37, 51, 0.28); --tile-strong: rgba(52, 78, 96, 0.31); --tile-line: rgba(203, 234, 248, 0.25); --tile-line-soft: rgba(114, 176, 207, 0.16); --panel-glass: rgba(7, 22, 33, 0.48); --blue-halo: rgba(29, 153, 245, 0.22); --green-halo: rgba(27, 210, 121, 0.19); --orange-halo: rgba(246, 125, 46, 0.18); } body { background-color: #b7d5e3; background-image: none; } :root[data-theme="dark"] body { background-color: #091722; background-image: none; } body::before { inset: -1.25rem; background-image: linear-gradient(118deg, rgba(180,220,239,.15), rgba(238,247,251,.025) 45%, rgba(247,226,204,.09)), url("../assets/mountain-lake-light.jpg"); background-position: center; background-size: cover; background-repeat: no-repeat; filter: blur(6px) saturate(108%); transform: scale(1.025); opacity: 1; pointer-events: none; } :root[data-theme="dark"] body::before { background-image: linear-gradient(118deg, rgba(2,15,25,.66), rgba(8,27,40,.57) 48%, rgba(20,25,29,.64)), url("../assets/mountain-lake-dark.jpg"); background-position: center; background-size: cover; filter: blur(7px) saturate(106%); opacity: 1; } body::after { background: radial-gradient(circle at 11% 18%, rgba(255,255,255,.33) 0 .5%, transparent 5%), radial-gradient(circle at 64% 23%, rgba(255,244,218,.28) 0 .6%, transparent 6%), radial-gradient(circle at 91% 79%, rgba(225,250,237,.22) 0 .8%, transparent 7%); filter: blur(11px); opacity: .5; } :root[data-theme="dark"] body::after { opacity: .26; } .ambient::before { opacity: .14; filter: blur(76px); } .ambient::after { opacity: .11; filter: blur(82px); } :root[data-theme="dark"] .ambient::before { opacity: .12; } :root[data-theme="dark"] .ambient::after { opacity: .08; } .climate-panel { background: linear-gradient(125deg, rgba(255,255,255,.22), transparent 31%, rgba(255,255,255,.055) 69%, rgba(196,224,240,.1)), var(--panel-glass); box-shadow: 0 27px 68px rgba(22,66,95,.24), 0 2px 8px rgba(255,255,255,.28), inset 0 1px 0 rgba(255,255,255,.88), inset 0 -1px 0 rgba(113,163,192,.17); backdrop-filter: blur(13px) saturate(124%); -webkit-backdrop-filter: blur(13px) saturate(124%); } .climate-panel::before { background: linear-gradient(112deg, rgba(255,255,255,.25), rgba(255,255,255,.035) 18%, transparent 39%), radial-gradient(ellipse at 50% -20%, rgba(255,255,255,.25), transparent 47%); } .climate-panel::after { opacity: .1; } :root[data-theme="dark"] .climate-panel { box-shadow: 0 33px 78px rgba(0,0,0,.43), 0 0 28px rgba(19,112,158,.06), inset 0 1px 0 rgba(221,243,252,.17), inset 0 -1px 0 rgba(0,0,0,.28); } :root[data-theme="dark"] .climate-panel::before { background: linear-gradient(112deg, rgba(203,238,253,.1), transparent 24%, transparent 72%, rgba(71,163,202,.035)); } .glass-tile, .glass-section { background: linear-gradient(132deg, rgba(255,255,255,.25), rgba(255,255,255,.035) 35%, transparent 64%), linear-gradient(145deg, var(--tile-strong), var(--tile)); box-shadow: 0 10px 25px rgba(24,72,105,.12), inset 0 1px 0 rgba(255,255,255,.78), inset 1px 0 0 rgba(255,255,255,.24); backdrop-filter: blur(16px) saturate(127%); -webkit-backdrop-filter: blur(16px) saturate(127%); } .glass-tile::before, .glass-section::before { opacity: .62; } :root[data-theme="dark"] .glass-tile, :root[data-theme="dark"] .glass-section { background: linear-gradient(132deg, rgba(213,240,252,.075), rgba(255,255,255,.012) 38%, transparent 65%), linear-gradient(145deg, var(--tile-strong), var(--tile)); box-shadow: 0 13px 29px rgba(0,0,0,.26), inset 0 1px 0 rgba(226,246,255,.11), inset 1px 0 0 rgba(186,226,245,.055); } .speed-card::after, .temperature-card::after, .power-card::after, .heater-card::after { filter: blur(32px); opacity: .48; } .power-card::after { opacity: .38; } .heater-card::after { opacity: .34; } .hero-step.primary { box-shadow: 0 10px 23px rgba(16,103,220,.25), 0 0 15px var(--blue-halo), inset 0 1px 0 rgba(255,255,255,.76), inset 0 -2px 5px rgba(0,67,156,.2); } .hero-step:hover { box-shadow: 0 12px 27px rgba(25,112,219,.27), 0 0 19px var(--blue-halo), inset 0 1px 0 rgba(255,255,255,.75); } .speed-segments button.active { box-shadow: 0 0 9px rgba(25,143,247,.34), inset 0 1px 0 rgba(255,255,255,.66), inset 0 -2px 4px rgba(0,84,182,.18); } .temperature-range::-webkit-slider-runnable-track { box-shadow: 0 0 8px rgba(37,153,239,.15), 0 0 7px rgba(255,114,41,.09), inset 0 1px 2px rgba(255,255,255,.46); } .temperature-range::-webkit-slider-thumb { box-shadow: 0 0 0 2px rgba(255,255,255,.48), 0 0 12px rgba(29,139,241,.34), 0 4px 10px rgba(17,79,143,.24); } .glass-switch[aria-pressed="true"].green { box-shadow: 0 12px 27px rgba(11,153,81,.22), 0 0 19px var(--green-halo), inset 0 1px 0 rgba(255,255,255,.84), inset 0 -4px 10px rgba(0,125,62,.14); } .glass-switch[aria-pressed="true"].orange { box-shadow: 0 12px 27px rgba(210,91,25,.2), 0 0 18px var(--orange-halo), inset 0 1px 0 rgba(255,255,255,.83), inset 0 -4px 10px rgba(168,54,0,.13); } .quality-chip { box-shadow: 0 0 10px rgba(33,203,116,.13), inset 0 1px 0 rgba(255,255,255,.83); } .meter i { box-shadow: 0 0 10px rgba(18,199,104,.35), inset 0 1px 0 rgba(255,255,255,.58); } .filter-meter i { box-shadow: 0 0 10px rgba(31,144,247,.32), inset 0 1px 0 rgba(255,255,255,.54); } .schedule-button.auto, .schedule-button.pause { box-shadow: 0 7px 18px rgba(31,83,119,.12), inset 0 1px 0 rgba(255,255,255,.82); } :root[data-theme="dark"] .hero-step.primary { box-shadow: 0 11px 27px rgba(0,65,139,.4), 0 0 18px var(--blue-halo), inset 0 1px 0 rgba(220,248,255,.42), inset 0 -3px 7px rgba(0,27,91,.3); } :root[data-theme="dark"] .speed-segments button.active { box-shadow: 0 0 12px rgba(24,156,255,.4), inset 0 1px 0 rgba(223,248,255,.36); } :root[data-theme="dark"] .glass-switch[aria-pressed="true"].green { box-shadow: 0 12px 28px rgba(0,0,0,.28), 0 0 20px var(--green-halo), inset 0 1px 0 rgba(218,255,236,.4); } :root[data-theme="dark"] .glass-switch[aria-pressed="true"].orange { box-shadow: 0 12px 28px rgba(0,0,0,.28), 0 0 20px var(--orange-halo), inset 0 1px 0 rgba(255,237,216,.4); } /* Natural highlights: state colors tint the glass, but do not paint opaque neon blocks over the photographic background. Heater ON is a healthy green state too; its orange icon still communicates heat. */ .speed-card::after, .temperature-card::after { opacity: .18; filter: blur(42px); } .power-card::after, .heater-card::after { background: var(--green-halo); opacity: .16; filter: blur(44px); } .hero-step.primary { box-shadow: 0 9px 20px rgba(15,92,183,.22), 0 0 9px rgba(48,151,239,.14), inset 0 1px 0 rgba(255,255,255,.78), inset 0 -2px 5px rgba(0,67,156,.18); } .hero-step:hover { box-shadow: 0 11px 23px rgba(20,101,190,.24), 0 0 12px rgba(48,151,239,.16), inset 0 1px 0 rgba(255,255,255,.76); } .speed-segments button.active { box-shadow: 0 0 6px rgba(25,143,247,.24), inset 0 1px 0 rgba(255,255,255,.68), inset 0 -2px 4px rgba(0,84,182,.16); } .glass-switch[aria-pressed="true"].green, .glass-switch[aria-pressed="true"].orange { background: linear-gradient(145deg, rgba(139,244,190,.72), rgba(55,194,122,.48)); border-color: rgba(218,255,235,.84); box-shadow: 0 10px 23px rgba(18,143,80,.18), 0 0 11px rgba(38,199,116,.13), inset 0 1px 0 rgba(255,255,255,.82), inset 0 -3px 8px rgba(0,114,57,.1); } :root[data-theme="dark"] .speed-card::after, :root[data-theme="dark"] .temperature-card::after { opacity: .2; } :root[data-theme="dark"] .power-card::after, :root[data-theme="dark"] .heater-card::after { opacity: .18; } :root[data-theme="dark"] .hero-step.primary { box-shadow: 0 10px 24px rgba(0,53,119,.38), 0 0 11px rgba(41,162,244,.19), inset 0 1px 0 rgba(220,248,255,.4), inset 0 -3px 7px rgba(0,27,91,.27); } :root[data-theme="dark"] .speed-segments button.active { box-shadow: 0 0 7px rgba(24,156,255,.27), inset 0 1px 0 rgba(223,248,255,.34); } :root[data-theme="dark"] .glass-switch[aria-pressed="true"].green, :root[data-theme="dark"] .glass-switch[aria-pressed="true"].orange { color: #effff6; border-color: rgba(127,242,182,.4); background: linear-gradient(145deg, rgba(51,190,119,.58), rgba(9,102,59,.55)); box-shadow: 0 11px 25px rgba(0,0,0,.25), 0 0 12px rgba(37,207,121,.15), inset 0 1px 0 rgba(218,255,236,.34); } /* Final material and icon polish. */ .ui-icon { display: block; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; } .feature-icon { padding: .08rem; filter: drop-shadow(0 0 6px rgba(20,139,244,.2)); text-shadow: none; } .feature-icon.green { filter: drop-shadow(0 0 6px rgba(20,190,104,.24)); } .feature-icon.orange { filter: drop-shadow(0 0 6px rgba(244,105,31,.22)); } .fan-icon { font-size: inherit; } .section-icon { padding: .06rem; filter: drop-shadow(0 0 5px rgba(26,124,210,.17)); text-shadow: none; } .section-icon.leaf { filter: drop-shadow(0 0 5px rgba(8,160,81,.2)); } .metric-icon { width: 1.7rem; height: 1.7rem; flex: 0 0 auto; filter: drop-shadow(0 0 4px rgba(20,124,221,.15)); text-shadow: none; } .metric-icon.particles { padding: .05rem; } .action-symbol { width: 2rem; height: 2rem; font-size: inherit; } .extra-icon { width: 3.4rem; height: 3.4rem; flex: 0 0 auto; filter: drop-shadow(0 0 7px rgba(33,126,211,.17)); text-shadow: none; } .extra-icon.wind { width: 3.8rem; height: 3.8rem; font-size: inherit; transform: none; } :root[data-theme="light"] { --tile: rgba(104, 126, 139, 0.16); --tile-strong: rgba(214, 226, 232, 0.2); --tile-line-soft: rgba(189, 211, 221, 0.38); } :root[data-theme="light"] .glass-tile, :root[data-theme="light"] .glass-section { background: linear-gradient(132deg, rgba(244,248,250,.22), rgba(159,178,188,.055) 38%, transparent 66%), linear-gradient(145deg, var(--tile-strong), var(--tile)); backdrop-filter: blur(14px) saturate(116%); -webkit-backdrop-filter: blur(14px) saturate(116%); } .metric-card:not(.co2-card) { display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; } .metric-card:not(.co2-card) .metric-heading { width: 100%; justify-content: center; text-align: left; } .metric-card:not(.co2-card) > strong { margin-top: .7rem; } .metric-card:not(.co2-card) .quality-chip { align-self: center; } .filter-card .filter-line { width: 100%; } .hero-step.primary { background: radial-gradient(circle at 24% 5%, rgba(255,255,255,.55), transparent 38%), linear-gradient(135deg, rgba(255,255,255,.16), transparent 42%, rgba(0,73,170,.1)), linear-gradient(145deg, #55b4ff, #1479e8 72%); box-shadow: 0 8px 18px rgba(15,92,183,.18), 0 0 7px rgba(48,151,239,.1), inset 0 1px 0 rgba(255,255,255,.86), inset 0 -3px 7px rgba(0,67,156,.16); } .hero-step.primary:hover { box-shadow: 0 10px 21px rgba(20,101,190,.21), 0 0 9px rgba(48,151,239,.12), inset 0 1px 0 rgba(255,255,255,.88); } .speed-segments button.active { background: linear-gradient(180deg, rgba(255,255,255,.32), transparent 48%), linear-gradient(90deg, #1685ec, #35afff); box-shadow: 0 0 5px rgba(25,143,247,.19), inset 0 1px 0 rgba(255,255,255,.75), inset 0 -2px 4px rgba(0,84,182,.13); } .glass-switch { overflow: hidden; } .glass-switch[aria-pressed="true"].green, .glass-switch[aria-pressed="true"].orange { background: radial-gradient(circle at 25% -8%, rgba(255,255,255,.67), transparent 42%), linear-gradient(132deg, rgba(255,255,255,.15), transparent 40%, rgba(0,125,62,.06)), linear-gradient(145deg, rgba(139,244,190,.67), rgba(55,194,122,.43)); box-shadow: 0 8px 19px rgba(18,143,80,.14), 0 0 8px rgba(38,199,116,.09), inset 0 1px 0 rgba(255,255,255,.9), inset 0 -4px 9px rgba(0,114,57,.08); } .schedule-button.auto { background: radial-gradient(circle at 19% -30%, rgba(255,255,255,.55), transparent 44%), linear-gradient(135deg, rgba(255,255,255,.13), transparent 43%), linear-gradient(145deg, rgba(211,239,255,.52), rgba(100,179,235,.18)); } .schedule-button.pause { background: radial-gradient(circle at 19% -30%, rgba(255,255,255,.58), transparent 44%), linear-gradient(135deg, rgba(255,255,255,.13), transparent 43%), linear-gradient(145deg, rgba(255,231,199,.55), rgba(235,151,76,.18)); } :root[data-theme="dark"] .hero-step.primary { background: radial-gradient(circle at 24% 5%, rgba(214,246,255,.32), transparent 38%), linear-gradient(135deg, rgba(255,255,255,.08), transparent 42%, rgba(0,32,95,.17)), linear-gradient(145deg, #33aaf4, #0869d0 74%); } :root[data-theme="dark"] .glass-switch[aria-pressed="true"].green, :root[data-theme="dark"] .glass-switch[aria-pressed="true"].orange { background: radial-gradient(circle at 25% -8%, rgba(218,255,236,.3), transparent 42%), linear-gradient(132deg, rgba(255,255,255,.07), transparent 40%, rgba(0,45,23,.12)), linear-gradient(145deg, rgba(51,190,119,.52), rgba(9,102,59,.49)); box-shadow: 0 9px 21px rgba(0,0,0,.22), 0 0 9px rgba(37,207,121,.1), inset 0 1px 0 rgba(218,255,236,.32), inset 0 -3px 8px rgba(0,31,16,.16); } :root[data-theme="dark"] .schedule-button.auto { background: radial-gradient(circle at 19% -30%, rgba(208,243,255,.17), transparent 45%), linear-gradient(145deg, rgba(38,125,187,.26), rgba(15,61,91,.25)); } :root[data-theme="dark"] .schedule-button.pause { background: radial-gradient(circle at 19% -30%, rgba(255,226,199,.16), transparent 45%), linear-gradient(145deg, rgba(167,82,27,.27), rgba(73,40,25,.25)); } @media (min-width: 1300px) and (min-height: 760px) { .climate-panel { width: 100%; max-width: none; display: grid; grid-template-rows: auto minmax(18rem, 1.4fr) minmax(11rem, .78fr) minmax(13rem, .9fr) auto; gap: .75rem; } .panel-header { padding-bottom: 0; } .primary-controls, .bottom-grid { min-height: 0; height: 100%; } .control-card, .switch-card { min-height: 0; height: 100%; } .content-section { min-height: 0; height: 100%; margin-top: 0; display: flex; flex-direction: column; } .air-grid { min-height: 0; flex: 1; } .metric-card { min-height: 0; height: 100%; } .schedule-layout, .extras-grid { min-height: 0; flex: 1; } .schedule-times, .extra-card { min-height: 0; height: 100%; } } @media (min-width: 1700px) { html { font-size: 18px; } .climate-panel { padding: 1.2rem; } } @media (max-width: 1120px) { .primary-controls { grid-template-columns: 1fr 1fr; } .switch-card { min-height: 9rem; } .glass-switch { min-height: 3.8rem; } .air-grid { grid-template-columns: repeat(3, 1fr); } .bottom-grid { grid-template-columns: 1fr; } } @media (max-width: 760px) { body { padding: .5rem; } .climate-panel { border-radius: 1.1rem; } .panel-header, .identity, .header-tools { flex-wrap: wrap; } .panel-header { align-items: flex-start; } .header-tools { width: 100%; justify-content: flex-start; } .ventilation-badge { min-width: 0; flex: 1; } .primary-controls { grid-template-columns: 1fr; } .control-card, .switch-card { min-height: auto; } .hero-control { margin: 1.4rem 0 .75rem; } .air-grid { grid-template-columns: 1fr 1fr; } .co2-card, .filter-card { grid-column: 1 / -1; } .schedule-layout { grid-template-columns: 1fr; } } @media (max-width: 480px) { .identity h1 { width: 100%; } .ventilation-badge small { display: none; } .air-grid, .extras-grid { grid-template-columns: 1fr; } .co2-card, .filter-card { grid-column: auto; } .schedule-times { grid-template-columns: 1fr; } .schedule-times > i { width: 100%; height: 1px; } .micro-settings { flex-wrap: wrap; } } @media (prefers-reduced-motion: reduce) { .hero-step:hover { transform: none; } } /* Schedule controls and editor. */ .schedule-title-tools { margin-left: auto; } .schedule-edit-button { display: inline-flex; align-items: center; gap: .4rem; min-height: 2.05rem; padding: .36rem .68rem; border: 1px solid var(--tile-line); border-radius: .7rem; color: #126fc4; background: radial-gradient(circle at 20% -35%, rgba(255,255,255,.48), transparent 48%), linear-gradient(145deg, rgba(220,241,253,.42), rgba(100,173,220,.13)); box-shadow: 0 6px 15px rgba(27,91,135,.1), inset 0 1px 0 rgba(255,255,255,.76); cursor: pointer; font-size: .65rem; font-weight: 750; transition: transform .15s ease, filter .15s ease; } .schedule-edit-button svg { width: 1rem; height: 1rem; } .schedule-edit-button:hover { transform: translateY(-1px); filter: brightness(1.06); } .schedule-button:disabled { cursor: not-allowed; opacity: .5; filter: saturate(.38); box-shadow: none; } .schedule-button:disabled:hover { transform: none; filter: saturate(.38); } .schedule-button[aria-busy="true"] { cursor: wait; } #schedule-state.warn { color: #8d3b00; border-color: rgba(247,162,73,.78); background: linear-gradient(145deg, rgba(255,232,190,.82), rgba(240,157,69,.42)); box-shadow: 0 0 12px rgba(237,130,39,.13), inset 0 1px 0 rgba(255,255,255,.86); font-size: .66rem; letter-spacing: .07em; } :root[data-theme="dark"] #schedule-state.warn { color: #ffe2b8; border-color: rgba(255,166,83,.57); background: linear-gradient(145deg, rgba(177,87,24,.52), rgba(95,45,17,.48)); box-shadow: 0 0 13px rgba(242,129,38,.15), inset 0 1px 0 rgba(255,228,198,.18); } .schedule-dialog { width: min(72rem, calc(100vw - 2rem)); max-width: none; max-height: calc(100vh - 2rem); padding: 0; border: 1px solid var(--panel-edge); border-radius: 1.35rem; color: var(--panel-ink); background: linear-gradient(125deg, rgba(255,255,255,.28), transparent 32%, rgba(255,255,255,.06) 72%), rgba(201,229,244,.72); box-shadow: 0 28px 90px rgba(8,45,70,.42), inset 0 1px 0 rgba(255,255,255,.9); backdrop-filter: blur(28px) saturate(135%); -webkit-backdrop-filter: blur(28px) saturate(135%); overflow: hidden; } .schedule-dialog::backdrop { background: rgba(5,20,31,.46); backdrop-filter: blur(9px); -webkit-backdrop-filter: blur(9px); } :root[data-theme="dark"] .schedule-dialog { background: linear-gradient(125deg, rgba(205,239,255,.1), transparent 34%), rgba(7,24,36,.88); box-shadow: 0 30px 100px rgba(0,0,0,.64), inset 0 1px 0 rgba(221,243,252,.15); } .schedule-editor { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; max-height: calc(100vh - 2rem); } .editor-header, .editor-footer { display: flex; align-items: center; gap: .7rem; padding: .8rem 1rem; } .editor-header { justify-content: space-between; border-bottom: 1px solid var(--tile-line-soft); } .editor-heading { display: flex; align-items: center; gap: .65rem; } .editor-heading > svg { width: 2rem; height: 2rem; color: #1883df; filter: drop-shadow(0 0 5px rgba(24,131,223,.2)); } .editor-heading h2 { margin: 0; font-size: 1.15rem; } .editor-heading small { display: block; margin-top: .15rem; color: var(--panel-muted); font-size: .63rem; } .editor-close { width: 2.2rem; height: 2.2rem; padding: 0; border: 1px solid var(--tile-line); border-radius: .75rem; color: var(--panel-muted); background: var(--tile); cursor: pointer; font-size: 1.45rem; line-height: 1; } .editor-scroll { display: grid; gap: .7rem; padding: .85rem 1rem 1rem; overflow: auto; } .schedule-enabled { display: flex; align-items: center; gap: .7rem; padding: .72rem .82rem; border: 1px solid var(--tile-line); border-radius: .9rem; background: linear-gradient(145deg, rgba(255,255,255,.22), rgba(120,169,195,.08)); cursor: pointer; } .schedule-enabled input { width: 1.1rem; height: 1.1rem; accent-color: var(--blue); } .schedule-enabled span { display: grid; gap: .12rem; } .schedule-enabled strong { font-size: .76rem; } .schedule-enabled small { color: var(--panel-muted); font-size: .61rem; } .editor-section { padding: .8rem; border: 1px solid var(--tile-line); border-radius: 1rem; background: linear-gradient(145deg, rgba(255,255,255,.19), rgba(94,148,179,.075)); box-shadow: inset 0 1px 0 rgba(255,255,255,.48); } :root[data-theme="dark"] .editor-section, :root[data-theme="dark"] .schedule-enabled { background: linear-gradient(145deg, rgba(205,236,249,.055), rgba(2,19,30,.12)); box-shadow: inset 0 1px 0 rgba(224,246,255,.07); } .editor-section-title { display: flex; align-items: end; justify-content: space-between; gap: .75rem; margin-bottom: .65rem; } .editor-section-title h3 { margin: 0; font-size: .86rem; } .editor-section-title small { display: block; margin-top: .13rem; color: var(--panel-muted); font-size: .6rem; } .day-assignments { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: .42rem; } .day-assignment { display: grid; gap: .3rem; color: var(--panel-muted); font-size: .58rem; font-weight: 700; } .day-assignment select, .template-toolbar select, .point-editor input, .point-editor select { min-width: 0; height: 2.25rem; padding: .38rem .48rem; border: 1px solid var(--tile-line); border-radius: .62rem; color: var(--panel-ink); background: rgba(245,251,253,.48); outline: none; font-size: .66rem; } :root[data-theme="dark"] .day-assignment select, :root[data-theme="dark"] .template-toolbar select, :root[data-theme="dark"] .point-editor input, :root[data-theme="dark"] .point-editor select { background: rgba(16,38,52,.72); } .day-assignment select:focus, .template-toolbar select:focus, .point-editor input:focus, .point-editor select:focus { border-color: rgba(45,151,230,.7); box-shadow: 0 0 0 3px rgba(34,145,226,.11); } .template-toolbar > label { display: grid; gap: .25rem; min-width: 10rem; color: var(--panel-muted); font-size: .57rem; font-weight: 700; } .template-actions { display: flex; align-items: end; gap: .35rem; } .template-actions button { min-height: 2.25rem; padding: .4rem .65rem; border: 1px solid var(--tile-line); border-radius: .62rem; color: #126fc4; background: rgba(52,150,220,.08); cursor: pointer; font-size: .61rem; font-weight: 700; } .template-actions #delete-template { color: var(--red); border-color: rgba(223,91,105,.28); background: var(--red-soft); } .template-actions button:disabled { cursor: not-allowed; opacity: .45; } .schedule-points { display: grid; gap: .55rem; } .point-editor { padding: .68rem; border: 1px solid var(--tile-line); border-radius: .85rem; background: linear-gradient(145deg, rgba(255,255,255,.22), rgba(116,160,183,.065)); box-shadow: inset 0 1px 0 rgba(255,255,255,.45); } :root[data-theme="dark"] .point-editor { background: linear-gradient(145deg, rgba(197,231,247,.055), rgba(2,18,29,.13)); box-shadow: inset 0 1px 0 rgba(224,246,255,.06); } .point-header { display: grid; grid-template-columns: auto minmax(7rem, .7fr) minmax(9rem, 1fr) auto; align-items: end; gap: .55rem; } .point-number { align-self: center; display: grid; place-items: center; width: 1.85rem; height: 1.85rem; border-radius: 50%; color: #1478cc; background: var(--blue-soft); font-size: .62rem; font-weight: 800; } .point-header label, .point-setting { display: grid; gap: .25rem; color: var(--panel-muted); font-size: .56rem; font-weight: 700; } .remove-point { width: 2.25rem; height: 2.25rem; padding: 0; border: 1px solid rgba(223,91,105,.32); border-radius: .62rem; color: var(--red); background: var(--red-soft); cursor: pointer; font-size: 1.1rem; } .point-settings { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: .48rem; margin-top: .55rem; } .point-editor.auto [data-set-only] { display: none; } .point-editor.auto .point-settings { grid-template-columns: repeat(2, minmax(0, 1fr)); } .empty-points { padding: 1.4rem; border: 1px dashed var(--tile-line); border-radius: .8rem; color: var(--panel-muted); text-align: center; font-size: .68rem; } .add-schedule-point { width: 100%; min-height: 2.55rem; margin-top: .6rem; border: 1px dashed rgba(37,131,205,.55); border-radius: .75rem; color: #126fc4; background: rgba(52,150,220,.08); cursor: pointer; font-size: .68rem; font-weight: 750; } .editor-footer { border-top: 1px solid var(--tile-line-soft); justify-content: flex-end; } .editor-status { margin-right: auto; color: var(--panel-muted); font-size: .63rem; } .editor-status.error { color: var(--red); } .editor-button { min-height: 2.5rem; padding: .58rem .9rem; border-radius: .75rem; cursor: pointer; font-size: .69rem; font-weight: 750; } .editor-button.secondary { border: 1px solid var(--tile-line); color: var(--panel-ink); background: var(--tile); } .editor-button.primary { border: 1px solid rgba(182,226,255,.76); color: white; background: radial-gradient(circle at 20% -30%, rgba(255,255,255,.5), transparent 48%), linear-gradient(145deg, #3aa9eb, #1476c9); box-shadow: 0 7px 17px rgba(18,102,170,.2), inset 0 1px 0 rgba(255,255,255,.75); } @media (max-width: 900px) { .day-assignments { grid-template-columns: repeat(4, minmax(0, 1fr)); } .point-settings { grid-template-columns: repeat(3, minmax(0, 1fr)); } } @media (max-width: 600px) { .schedule-dialog { width: calc(100vw - .7rem); max-height: calc(100vh - .7rem); border-radius: 1rem; } .schedule-editor { max-height: calc(100vh - .7rem); } .editor-header, .editor-footer { padding: .7rem; } .editor-scroll { padding: .7rem; } .day-assignments { grid-template-columns: repeat(2, minmax(0, 1fr)); } .editor-section-title { align-items: stretch; flex-direction: column; } .template-toolbar > label { min-width: 0; } .template-actions { align-items: stretch; } .template-actions button { flex: 1; } .point-header { grid-template-columns: auto 1fr auto; } .point-header .point-action { grid-column: 2 / -1; } .point-settings, .point-editor.auto .point-settings { grid-template-columns: repeat(2, minmax(0, 1fr)); } .editor-footer { flex-wrap: wrap; } .editor-status { width: 100%; } .schedule-edit-button span { display: none; } } /* CO2 state drives both the label and the meter, so the visual state cannot disagree with the air-quality text returned by airQuality(). */ .co2-card { --air-color: #7896ac; --air-glow: rgba(93, 140, 171, .22); --air-track: rgba(181, 203, 200, .28); } .co2-card[data-air-tone="good"] { --air-color: #1fbd69; --air-glow: rgba(18, 199, 104, .34); } .co2-card[data-air-tone="warn"] { --air-color: #efa12b; --air-glow: rgba(244, 161, 42, .35); } .co2-card[data-air-tone="bad"] { --air-color: #e8495c; --air-glow: rgba(235, 74, 83, .36); } .co2-card .co2-meter { height: .84rem; border-color: rgba(255,255,255,.82); background-color: var(--air-track); background-image: linear-gradient(180deg, rgba(255,255,255,.15), transparent 52%, rgba(0,20,36,.045)); box-shadow: inset 0 1px 3px rgba(20,61,78,.14), 0 1px 4px rgba(8,43,72,.07); transition: background-color .65s ease; } .co2-card .co2-meter i { background-color: var(--air-color); background-image: linear-gradient(180deg, rgba(255,255,255,.28), rgba(255,255,255,.045) 48%, rgba(0,35,20,.1)); box-shadow: 0 0 8px var(--air-glow), inset 0 1px 0 rgba(255,255,255,.58), inset 0 -1px 2px rgba(0,34,19,.1); transition: width .35s ease, background-color .65s ease, box-shadow .65s ease; } :root[data-theme="dark"] .co2-card .co2-meter { border-color: rgba(205,235,248,.3); box-shadow: inset 0 1px 4px rgba(0,0,0,.27), 0 1px 5px rgba(0,0,0,.12); } .co2-card .quality-chip.muted { color: var(--panel-muted); border-color: var(--tile-line-soft); background: rgba(199,222,235,.2); box-shadow: inset 0 1px 0 rgba(255,255,255,.55); } .co2-card .quality-chip.good { color: #076d3d; border-color: rgba(109,237,167,.65); background: linear-gradient(145deg, rgba(179,255,214,.58), rgba(92,218,151,.39)); box-shadow: 0 0 9px rgba(33,203,116,.12), inset 0 1px 0 rgba(255,255,255,.82); } .co2-card .quality-chip.warn { color: #9c5513; border-color: rgba(244,183,106,.67); background: linear-gradient(145deg, rgba(255,232,188,.56), rgba(239,168,80,.34)); box-shadow: 0 0 9px rgba(235,153,53,.11), inset 0 1px 0 rgba(255,255,255,.8); } .co2-card .quality-chip.bad { color: #a62f3d; border-color: rgba(242,135,147,.62); background: linear-gradient(145deg, rgba(255,209,216,.53), rgba(225,105,120,.3)); box-shadow: 0 0 9px rgba(224,83,101,.12), inset 0 1px 0 rgba(255,255,255,.78); } :root[data-theme="dark"] .co2-card { --air-track: rgba(8,28,39,.38); } :root[data-theme="dark"] .co2-card[data-air-tone="good"] { --air-glow: rgba(30,224,128,.3); } :root[data-theme="dark"] .co2-card[data-air-tone="warn"] { --air-glow: rgba(255,176,49,.3); } :root[data-theme="dark"] .co2-card[data-air-tone="bad"] { --air-glow: rgba(255,82,102,.32); } :root[data-theme="dark"] .co2-card .quality-chip.good { color: #b9ffda; background: linear-gradient(145deg, rgba(45,186,113,.35), rgba(11,101,60,.3)); } :root[data-theme="dark"] .co2-card .quality-chip.warn { color: #ffd59e; background: linear-gradient(145deg, rgba(176,115,30,.34), rgba(91,58,15,.3)); } :root[data-theme="dark"] .co2-card .quality-chip.bad { color: #ffc0c8; background: linear-gradient(145deg, rgba(174,58,75,.34), rgba(91,25,37,.31)); } :root[data-theme="dark"] .co2-card .quality-chip.muted { color: var(--panel-muted); background: rgba(42,70,88,.25); }