* { margin:0; padding:0; box-sizing:border-box; } body { background: #0f1117; color: #c8cdd4; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; min-height: 100vh; } .page { max-width: 1500px; margin: 0 auto; padding: 24px 28px; } .header { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 28px; padding-bottom: 14px; border-bottom: 1px solid #1e2130; } .header h1 { font-size: 24px; font-weight: 600; color: #e8eaed; letter-spacing: 0.02em; } /* ── grid ── */ .card-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; } @media (max-width: 1100px) { .card-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 600px) { .card-grid { grid-template-columns: 1fr; } } /* ── card ── */ .card { background: #161822; border: 1px solid #1e2130; border-radius: 12px; padding: 22px 26px; transition: border-color 0.3s, box-shadow 0.3s; position: relative; } .card:hover { border-color: #2a2e40; } /* ── card-top ── */ .card-top { display: flex; align-items: center; gap: 8px; margin-bottom: 14px; font-size: 15px; flex-wrap: wrap; } .city-name { color: #e0e3e8; font-weight: 700; } .airport { color: #6a7180; font-weight: 400; } .local-time { margin-left: auto; color: #4a5160; font-variant-numeric: tabular-nums; font-size: 14px; } .badge { font-size: 12px; padding: 2px 7px; border-radius: 4px; font-weight: 600; } .new-high { background: rgba(124, 58, 237, 0.18); color: #a78bfa; } .new-high-card { border-color: rgba(124, 58, 237, 0.30); } /* ── temp ── */ .card-temp { margin: 8px 0 10px; font-weight: 700; line-height: 1.15; } .temp-value { font-size: 52px; color: #e8eaed; letter-spacing: -0.03em; } .temp-value.na { color: #3a4050; font-size: 32px; } .temp-value.warm { color: #f59e0b; } .temp-value.new-high-val { color: #c084fc; } .temp-unit { font-size: 22px; color: #5a6170; margin-left: 3px; } /* ── meta ── */ .card-meta { display: flex; flex-direction: column; gap: 5px; margin-bottom: 2px; } .meta-row { display: flex; align-items: baseline; gap: 8px; font-size: 14px; } .meta-row .label { color: #4a5160; } .meta-row .value { color: #9aa0b0; font-variant-numeric: tabular-nums; } .meta-row .value.na { color: #3a4050; } .meta-row .trend { margin-left: auto; } /* ── trend ── */ .trend { font-size: 18px; font-weight: 700; } .trend.rising { color: #34d399; } .trend.falling { color: #60a5fa; } .trend.flat { color: #5a6170; } /* ── runway ── */ .card-runway { margin-top: 12px; } .runway-divider { height: 1px; background: #1e2130; margin-bottom: 8px; } .runway-row { display: flex; justify-content: space-between; font-size: 13px; margin-bottom: 2px; } .runway-label { color: #4a5160; } .runway-temp { color: #7a8290; font-variant-numeric: tabular-nums; } /* ── obs age ── */ .obs-age { font-size: 13px; color: #5a6170; } /* ── HTMX indicator ── */ .htmx-indicator { text-align: center; padding: 14px; font-size: 14px; color: #3a4050; display: none; } .htmx-request .htmx-indicator, .htmx-request.htmx-indicator { display: block; }