:root { --bg-1: #f8f2e6; --bg-2: #dce9f4; --panel: #f9f8f3; --panel-line: #d8d1c4; --ink: #1f2633; --muted: #586173; --primary: #0a5f94; --primary-press: #084d79; --disabled: #9fa9b8; --white: #ffffff; --shadow-base: #12324a; --border-dark: #1c293e; --controls-height: 10svh; --controls-safe: env(safe-area-inset-bottom); --controls-total-height: calc(var(--controls-height) + var(--controls-safe)); } * { box-sizing: border-box; } html, body { margin: 0; height: 100%; } body { color: var(--ink); font-family: 'Trebuchet MS', 'Avenir Next', 'Segoe UI', sans-serif; background: radial-gradient(circle at 16% 18%, color-mix(in srgb, var(--white) 85%, transparent) 0%, transparent 44%), linear-gradient(140deg, var(--bg-1), var(--bg-2)); overflow: hidden; } .home-layout { position: relative; height: 100svh; width: 100%; padding: 1rem; padding-bottom: calc(var(--controls-total-height) + 1rem); overflow: hidden; } .website-zone { height: 100%; min-height: 0; } .website-panel { height: 100%; border-radius: 1rem; border: 1px solid var(--panel-line); background: var(--panel); box-shadow: 0 1.2rem 2.2rem color-mix(in srgb, var(--shadow-base) 12%, transparent), inset 0 0.1rem 0.2rem color-mix(in srgb, var(--white) 70%, transparent); display: grid; grid-template-rows: auto 1fr; overflow: hidden; } .website-panel__header { border-bottom: 1px solid var(--panel-line); padding: 0.75rem 1rem; background: linear-gradient(180deg, color-mix(in srgb, var(--white) 70%, transparent), color-mix(in srgb, var(--bg-1) 90%, transparent)); } .website-panel__label { margin: 0; text-transform: uppercase; letter-spacing: 0.12em; font-size: 0.68rem; font-weight: 700; color: var(--muted); } .website-panel__url { margin: 0.25rem 0 0; font-size: clamp(0.82rem, 2.2vw, 0.96rem); color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .website-panel__content { min-height: 0; } .website-panel__frame { width: 100%; height: 100%; border: none; background: var(--white); } .radio-controls-wrap { position: fixed; left: 0; right: 0; bottom: 0; height: var(--controls-total-height); padding: 0.5rem 1rem; padding-bottom: calc(0.5rem + var(--controls-safe)); border-top: 1px solid color-mix(in srgb, var(--border-dark) 16%, transparent); background: linear-gradient(180deg, color-mix(in srgb, var(--bg-1) 95%, transparent), color-mix(in srgb, var(--bg-1) 98%, var(--panel-line))); backdrop-filter: blur(7px); } .radio-controls { height: 100%; max-width: 48rem; margin: 0 auto; display: grid; gap: 0.55rem; grid-template-columns: 1fr auto; align-items: center; } .radio-controls__status { margin: 0; color: var(--muted); font-size: clamp(0.8rem, 2.2vw, 1rem); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .radio-controls__buttons { display: grid; grid-auto-flow: column; gap: 0.6rem; } .radio-controls button { appearance: none; border: none; border-radius: 0.7rem; background: var(--primary); color: var(--white); font-size: 1rem; font-weight: 700; padding: 0.78rem 1rem; cursor: pointer; transition: transform 120ms ease, background 120ms ease; } .radio-controls button.playpause { width: clamp(2.9rem, 9vw, 4rem); aspect-ratio: 1 / 1; font-size: clamp(1.15rem, 4vw, 1.7rem); padding: 0; } .radio-controls button:hover:not(:disabled) { background: var(--primary-press); } .radio-controls button:active:not(:disabled) { transform: translateY(1px); } .radio-controls button:disabled { cursor: not-allowed; background: var(--disabled); } @media (max-width: 560px) { .home-layout { padding: 0.65rem; padding-bottom: calc(var(--controls-total-height) + 0.65rem); } .radio-controls-wrap { padding-left: 0.65rem; padding-right: 0.65rem; } .radio-controls { grid-template-columns: minmax(0, 1fr) auto; gap: 0.5rem; } .radio-controls__buttons { justify-content: end; } }