Files
weather/.tmp/imgdiff/style.diff
T

2074 lines
109 KiB
Diff

diff --git a/.tmp/imgdiff/old/style.css b/.tmp/imgdiff/new/style.css
index 71c96f7..92ea4d9 100644
--- a/.tmp/imgdiff/old/style.css
+++ b/.tmp/imgdiff/new/style.css
@@ -1,1031 +1,1304 @@
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
- --ink: #102539;
- --ink-soft: #476a82;
- --ink-muted: #6f90a4;
- --paper: #e7f2f8;
- --paper-deep: #d6e7f1;
- --surface: rgba(255, 255, 255, 0.9);
- --surface-soft: rgba(255, 255, 255, 0.74);
- --line: rgba(96, 138, 166, 0.35);
- --brand: #f0722f;
- --brand-strong: #d75f1f;
- --info: #1d87bf;
- --ok: #1f9c79;
- --danger: #c84b2f;
- --radius-xl: 22px;
- --radius-lg: 16px;
- --radius-md: 12px;
- --shadow-lg: 0 14px 36px rgba(11, 35, 52, 0.16);
- --shadow-md: 0 8px 22px rgba(11, 35, 52, 0.12);
- --ui: 'Manrope', 'Avenir Next', 'Segoe UI', sans-serif;
- --display: 'Playfair Display', Georgia, serif;
+ --ink: #1a1a1a;
+ --ink-mid: #3d3730;
+ --ink-light: #5f5649;
+ --paper: #f5f2ec;
+ --paper-dark: #ece7db;
+ --paper-darker: #ddd6c7;
+ --border: #b9ae9b;
+ --accent: #c25a2a;
+ --cool: #2a6b8a;
+ --mono: 'Segoe UI Rounded', 'Trebuchet MS', 'Avenir Next', 'Segoe UI', sans-serif;
+ --serif: 'Segoe UI Rounded', 'Trebuchet MS', 'Avenir Next', 'Segoe UI', sans-serif;
+ --card-bg: var(--paper-dark);
+ --card-bg-soft: var(--paper-darker);
+ --card-ink: var(--ink);
+ --card-sub: var(--ink-light);
+ --surface-border: 1px solid rgba(255, 255, 255, 0.08);
+ --surface-radius-lg: 16px;
+ --surface-radius-md: 12px;
+ --surface-shadow: 0 8px 18px rgba(0, 0, 0, 0.16);
}
@media (prefers-color-scheme: dark) {
:root {
- --ink: #ecf6fd;
- --ink-soft: #bed1dd;
- --ink-muted: #92aebf;
- --paper: #0b1721;
- --paper-deep: #122433;
- --surface: rgba(26, 46, 61, 0.88);
- --surface-soft: rgba(28, 49, 65, 0.7);
- --line: rgba(118, 152, 176, 0.34);
- --brand: #ff8d4d;
- --brand-strong: #ef7330;
- --info: #63c2ef;
- --ok: #38c89f;
- --danger: #f77257;
- --shadow-lg: 0 16px 40px rgba(0, 0, 0, 0.45);
- --shadow-md: 0 9px 22px rgba(0, 0, 0, 0.35);
+ --ink: #ece7dc;
+ --ink-mid: #d2c8b1;
+ --ink-light: #beb399;
+ --paper: #191510;
+ --paper-dark: #201c16;
+ --paper-darker: #2b2620;
+ --border: #3a342a;
+ --accent: #e07848;
+ --cool: #5ab0d8;
}
}
html, body {
min-height: 100%;
- font-family: var(--ui);
- font-size: 18px;
- line-height: 1.45;
- color: var(--ink);
background: var(--paper);
+ color: var(--ink);
+ font-family: var(--mono);
+ font-size: 16px;
+ line-height: 1.6;
overflow-x: hidden;
}
-body {
- background:
- radial-gradient(circle at 8% -6%, rgba(255, 255, 255, 0.86), transparent 46%),
- radial-gradient(circle at 100% 0%, rgba(111, 184, 222, 0.25), transparent 35%),
- linear-gradient(180deg, var(--paper) 0%, var(--paper-deep) 100%);
- transition: background 0.6s ease;
+.app {
+ max-width: 900px;
+ margin: 0 auto;
+ padding: 2rem 1.5rem 4rem;
}
-body.weather-clear {
- background:
- radial-gradient(circle at 15% 0%, rgba(255, 255, 255, 0.95), transparent 44%),
- radial-gradient(circle at 95% 5%, rgba(255, 214, 131, 0.4), transparent 30%),
- linear-gradient(180deg, #dff2ff 0%, #cbe6f7 45%, #b6d9ee 100%);
-}
+a { color: var(--cool); text-decoration: none; }
+a:hover { text-decoration: underline; }
-body.weather-cloud {
- background:
- radial-gradient(circle at 10% -5%, rgba(255, 255, 255, 0.75), transparent 46%),
- radial-gradient(circle at 85% 0%, rgba(175, 203, 220, 0.35), transparent 35%),
- linear-gradient(180deg, #d7e8f1 0%, #c6dbe7 55%, #b5cfde 100%);
+/* ΓöÇΓöÇ Masthead ΓöÇΓöÇ */
+.masthead {
+ display: grid;
+ grid-template-columns: 1fr;
+ align-items: center;
+ justify-items: center;
+ gap: 0.8rem;
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-lg);
+ background: linear-gradient(180deg, var(--card-bg-soft), var(--paper-dark));
+ color: var(--card-ink);
+ padding: 1rem 1.1rem;
+ margin-bottom: 1.5rem;
+ box-shadow: var(--surface-shadow);
}
-body.weather-rain {
- background:
- radial-gradient(circle at 20% -8%, rgba(196, 220, 235, 0.45), transparent 45%),
- radial-gradient(circle at 100% 0%, rgba(109, 162, 191, 0.32), transparent 35%),
- linear-gradient(180deg, #a8c1d2 0%, #8eaabd 55%, #748fa5 100%);
+.masthead h1 {
+ font-family: var(--serif);
+ font-size: 2.35rem;
+ font-weight: 700;
+ letter-spacing: -0.5px;
+ color: var(--card-ink);
+ white-space: nowrap;
+ text-align: center;
}
-body.weather-snow {
- background:
- radial-gradient(circle at 12% 0%, rgba(255, 255, 255, 0.9), transparent 45%),
- radial-gradient(circle at 92% 0%, rgba(225, 241, 252, 0.8), transparent 36%),
- linear-gradient(180deg, #ebf4fa 0%, #dfeef8 55%, #d2e4f1 100%);
+.tagline {
+ font-size: 0.74rem;
+ letter-spacing: 0.12em;
+ color: var(--card-sub);
+ text-transform: uppercase;
+ white-space: nowrap;
}
-body.weather-storm {
- background:
- radial-gradient(circle at 30% -10%, rgba(140, 160, 181, 0.36), transparent 44%),
- radial-gradient(circle at 100% 5%, rgba(80, 111, 142, 0.45), transparent 34%),
- linear-gradient(180deg, #6f8598 0%, #576d83 55%, #42566c 100%);
+/* ΓöÇΓöÇ Tabs ΓöÇΓöÇ */
+.tabs {
+ display: flex;
+ gap: 0;
+ border: 1px solid var(--border);
+ border-radius: 10px;
+ overflow: hidden;
}
-body.weather-fog {
- background:
- radial-gradient(circle at 15% 0%, rgba(241, 246, 249, 0.9), transparent 44%),
- radial-gradient(circle at 92% 0%, rgba(214, 224, 231, 0.6), transparent 36%),
- linear-gradient(180deg, #d9e3e9 0%, #cdd9e0 55%, #c0ced7 100%);
+.tab {
+ background: transparent;
+ border: none;
+ border-right: 1px solid var(--border);
+ padding: 0.4rem 1rem;
+ font-family: var(--mono);
+ font-size: 0.84rem;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+ color: var(--ink-mid);
+ cursor: pointer;
+ transition: background 0.15s, color 0.15s;
}
-body.weather-night {
- background:
- radial-gradient(circle at 15% -10%, rgba(123, 145, 173, 0.2), transparent 44%),
- radial-gradient(circle at 100% 0%, rgba(74, 104, 131, 0.28), transparent 34%),
- linear-gradient(180deg, #0b1722 0%, #102131 55%, #13283b 100%);
+.tab:last-child { border-right: none; }
+.tab:hover { background: var(--paper-dark); color: var(--ink); }
+.tab.active { background: var(--ink); color: var(--paper); }
+
+/* ΓöÇΓöÇ Search ΓöÇΓöÇ */
+.search-wrap {
+ position: relative;
+ margin-bottom: 2rem;
+ background: var(--card-bg);
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-md);
+ padding: 0.55rem;
+ box-shadow: var(--surface-shadow);
}
-a { color: var(--info); text-decoration: none; }
-a:hover { text-decoration: underline; }
-.hidden { display: none !important; }
+.search-row { display: flex; }
-.app {
- width: 100%;
- max-width: 100%;
- padding: calc(0.7rem + env(safe-area-inset-top, 0px)) 0.75rem calc(6.9rem + env(safe-area-inset-bottom, 0px));
+.search-row input {
+ flex: 1;
+ min-width: 0;
+ background: rgba(0, 0, 0, 0.18);
+ border: 1px solid rgba(255, 255, 255, 0.14);
+ border-right: none;
+ padding: 0.6rem 1rem;
+ font-family: var(--mono);
+ font-size: 0.95rem;
+ color: var(--card-ink);
+ outline: none;
+ border-radius: 0;
+ transition: background 0.15s;
}
-/* Header */
-.masthead {
- position: sticky;
- top: env(safe-area-inset-top, 0px);
- z-index: 220;
- padding: 0.55rem 0.55rem 0.45rem;
- border: 1px solid var(--line);
- border-radius: var(--radius-xl);
- background: linear-gradient(180deg, var(--surface) 0%, var(--surface-soft) 100%);
- backdrop-filter: blur(9px);
- box-shadow: var(--shadow-md);
- margin-bottom: 0.6rem;
+.search-row input::placeholder { color: var(--card-sub); }
+.search-row input:focus { background: rgba(0, 0, 0, 0.25); }
+
+.search-row button {
+ background: rgba(0, 0, 0, 0.24);
+ color: var(--card-ink);
+ border: 1px solid rgba(255, 255, 255, 0.14);
+ padding: 0.6rem 1.1rem;
+ font-family: var(--mono);
+ font-size: 0.84rem;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+ cursor: pointer;
+ border-radius: 0;
+ transition: opacity 0.15s;
+ white-space: nowrap;
}
-.masthead h1 {
- font-family: var(--display);
- font-size: 1.7rem;
- letter-spacing: -0.3px;
- margin-bottom: 0.35rem;
- color: #111;
- text-shadow:
- 0 1px 2px rgba(255,255,255,0.7),
- 0 0 8px rgba(255,255,255,0.5);
+.search-row button:hover { opacity: 0.72; }
+
+#locate-btn {
+ background: rgba(0, 0, 0, 0.22) !important;
+ color: var(--card-ink) !important;
+ border-left: none !important;
+ font-size: 1.2rem !important;
+ letter-spacing: 0 !important;
+ padding: 0.6rem 0.9rem !important;
}
-.tagline {
- display: block;
- margin-top: 0.35rem;
- font-size: 0.76rem;
- letter-spacing: 0.04em;
- color: rgba(0,0,0,0.65);
- text-shadow: 0 1px 2px rgba(255,255,255,0.6);
+#units-btn {
+ background: rgba(0, 0, 0, 0.22) !important;
+ color: var(--card-ink) !important;
+ border-left: none !important;
+ min-width: 76px;
}
-/* Bottom nav */
-.tabs {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- width: 100vw;
- max-width: 100vw;
- z-index: 300;
- display: grid;
- grid-template-columns: repeat(5, minmax(0, 1fr));
- gap: 0.22rem;
- padding: 0.45rem 0.28rem calc(0.45rem + env(safe-area-inset-bottom, 0px));
- background: rgba(9, 28, 40, 0.92);
- backdrop-filter: blur(12px);
- border-top: 1px solid rgba(121, 165, 191, 0.36);
-}
-
-@supports (bottom: env(safe-area-inset-bottom)) {
- .tabs {
- bottom: 0;
- padding-bottom: calc(0.45rem + env(safe-area-inset-bottom));
- }
+.saved-wrap { margin-top: 0.6rem; }
+.saved-head {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ font-size: 0.62rem;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+ color: var(--ink-light);
+ margin-bottom: 0.35rem;
}
-.tab {
- border: none;
- border-radius: 12px;
- min-width: 0;
- min-height: 58px;
- padding: 0.32rem 0.15rem;
+.saved-locations {
display: flex;
- flex-direction: column;
+ flex-wrap: wrap;
+ gap: 0.35rem;
+ font-size: 0.72rem;
+ color: var(--ink-mid);
+}
+
+/* ΓöÇΓöÇ Toggle Switch ΓöÇΓöÇ */
+.switch-toggle {
+ display: inline-flex;
align-items: center;
- justify-content: center;
- gap: 0.24rem;
- background: rgba(255, 255, 255, 0.04);
- color: #d8eaf4;
+ position: relative;
+ width: 50px;
+ height: 28px;
cursor: pointer;
- font-family: var(--ui);
+ user-select: none;
}
-.tab-icon {
- font-family: 'Apple Color Emoji', 'Segoe UI Emoji', 'Noto Color Emoji', sans-serif;
- font-size: 1.18rem;
- line-height: 1;
+.switch-toggle input {
+ display: none;
}
-.tab-text {
- font-size: 0.67rem;
- line-height: 1;
- letter-spacing: 0.02em;
- font-weight: 600;
+.toggle-slider {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba(255, 255, 255, 0.1);
+ border: 1px solid var(--surface-border);
+ border-radius: 14px;
+ transition: all 0.3s ease;
+ display: flex;
+ align-items: center;
}
-.tab.active {
- color: #fff;
- background: linear-gradient(180deg, var(--brand) 0%, var(--brand-strong) 100%);
+.toggle-slider::before {
+ content: '';
+ position: absolute;
+ width: 22px;
+ height: 22px;
+ border-radius: 50%;
+ background-color: var(--ink-light);
+ left: 2px;
+ transition: all 0.3s ease;
}
-/* Search */
-.search-wrap {
- margin-bottom: 0.4rem;
+.switch-toggle input:checked + .toggle-slider {
+ background-color: var(--accent);
+ border-color: var(--accent);
}
-.search-row {
- display: flex;
- align-items: center;
- flex-wrap: nowrap;
- gap: 0;
- border: 1px solid var(--line);
- border-radius: var(--radius-lg);
- overflow: hidden;
- background: var(--surface);
- box-shadow: var(--shadow-md);
+.switch-toggle input:checked + .toggle-slider::before {
+ left: 26px;
+ background-color: #fff;
}
-button, input, select { font-family: var(--ui); }
+.switch-toggle input:disabled + .toggle-slider {
+ opacity: 0.5;
+ cursor: not-allowed;
+}
-.search-row input,
-.search-row button,
-.maps-control select,
-.settings-btn {
- font-size: 16px; /* prevent iOS focus zoom */
+.auto-detect-toggle {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.45rem;
+ margin-bottom: 0.45rem;
+ font-size: 0.68rem;
+ color: var(--ink-mid);
+ cursor: pointer;
+ user-select: none;
}
-.search-row input {
- flex: 1;
- min-width: 0;
- min-height: 46px;
- border: none;
- background: transparent;
- color: var(--ink);
- padding: 0 0.75rem;
+.auto-detect-toggle input {
+ accent-color: var(--accent);
}
-.search-row button {
- flex: 0 0 auto;
- min-height: 46px;
- border: none;
- border-left: 1px solid var(--line);
+.toggle-label {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.45rem;
+ margin-bottom: 0.45rem;
+ font-size: 0.68rem;
+ color: var(--ink-mid);
cursor: pointer;
- padding: 0 0.65rem;
+ user-select: none;
}
-#search-btn {
- background: linear-gradient(180deg, #15445f 0%, #11344c 100%);
- color: #f2f8fc;
- min-width: 52px;
- width: 52px;
- font-size: 0;
- letter-spacing: 0;
- text-transform: none;
- padding: 0;
+.toggle-label input {
+ accent-color: var(--accent);
}
-#search-btn::before {
- content: '🔎';
- font-size: 1rem;
- line-height: 1;
+.toggle-label span {
+ min-width: 24px;
}
-#locate-btn,
-#units-btn {
- background: var(--surface) !important;
- color: var(--ink) !important;
- min-width: 48px;
+.saved-item {
+ display: inline-flex;
+ border: 1px solid var(--border);
+ background: var(--paper-dark);
}
-#locate-btn {
- font-size: 1.05rem !important;
+.saved-chip,
+.saved-remove {
+ border: none;
+ background: transparent;
+ color: var(--ink);
+ padding: 0.35rem 0.45rem;
+ font-family: var(--mono);
+ cursor: pointer;
}
-@media (max-width: 390px) {
- #search-btn,
- #locate-btn,
- #units-btn {
- min-width: 46px;
- width: 46px;
- padding: 0 0.5rem;
- }
+.saved-remove {
+ border-left: 1px solid var(--border);
+ color: var(--ink-light);
}
+/* Suggestions */
.suggestions {
+ position: absolute;
+ top: 100%;
+ left: 0; right: 0;
+ background: var(--paper-darker);
+ border: 1px solid var(--border);
+ border-top: none;
+ z-index: 200;
list-style: none;
- margin-top: 0.3rem;
- border-radius: var(--radius-lg);
- overflow: hidden;
- border: 1px solid var(--line);
- background: var(--surface);
- box-shadow: var(--shadow-lg);
}
.suggestions li {
- padding: 0.72rem 0.8rem;
- border-bottom: 1px solid var(--line);
- font-size: 0.88rem;
+ padding: 0.6rem 1rem;
cursor: pointer;
+ font-size: 0.82rem;
+ border-bottom: 0.5px solid var(--border);
+ transition: background 0.1s;
}
.suggestions li:last-child { border-bottom: none; }
-.suggestions li:hover { background: rgba(29, 135, 191, 0.09); }
-.sug-country { color: var(--ink-muted); font-size: 0.8rem; margin-left: 0.35rem; }
+.suggestions li:hover { background: var(--paper-dark); }
+.sug-country { color: var(--ink-light); margin-left: 0.5rem; font-size: 0.75rem; }
-.error {
- margin-top: 0.35rem;
- color: var(--danger);
- font-size: 0.84rem;
-}
+/* ΓöÇΓöÇ Error / Loading ΓöÇΓöÇ */
+.error { font-size: 0.78rem; color: var(--accent); margin-top: 0.5rem; }
-/* Generic cards */
-.tab-panel {
- width: 100%;
- min-height: calc(100dvh - 11.6rem);
-}
-
-.loc-header,
-.radar-embed-wrap,
-.radar-full-wrap,
-.maps-wrap,
-.alerts-wrap,
-.panel-note,
-.settings-wrap,
-.daily-list,
-.hourly-scroll,
-.stats-bar,
-.astro-grid,
-.aq-grid {
- border: 1px solid var(--line);
- border-radius: var(--radius-xl);
- background: var(--surface-soft);
- box-shadow: var(--shadow-md);
+.loading {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: calc(100vh - 200px);
+ padding: 3rem;
}
-.loading {
+.loading-container {
display: flex;
+ flex-direction: column;
align-items: center;
- gap: 0.65rem;
- color: var(--ink-soft);
- font-size: 0.88rem;
- padding: 1rem 0.35rem;
+ gap: 2rem;
+ text-align: center;
}
-.loading-dot {
- width: 11px;
- height: 11px;
- border-radius: 50%;
- background: var(--brand);
- animation: pulse 1.1s ease-in-out infinite;
+.loading-icon {
+ font-size: 6rem;
+ animation: float 2s ease-in-out infinite;
}
-@keyframes pulse {
- 0%, 100% { opacity: 0.4; transform: scale(0.9); }
- 50% { opacity: 1; transform: scale(1.08); }
+.loading-text {
+ font-size: 1.5rem;
+ font-weight: 500;
+ color: var(--ink);
+ letter-spacing: 0.05em;
}
-.loc-header {
- padding: 0.9rem;
- margin-bottom: 0.75rem;
+.loading-dots {
display: flex;
- flex-direction: column;
- gap: 0.4rem;
+ gap: 0.5rem;
+ justify-content: center;
}
-.loc-name {
- font-family: var(--display);
- font-size: 1.5rem;
- line-height: 1.1;
+.loading-dots span {
+ width: 10px;
+ height: 10px;
+ border-radius: 50%;
+ background: var(--accent);
+ animation: bounce 1.4s ease-in-out infinite;
}
-.loc-sub,
-.loc-time {
- font-size: 0.8rem;
- color: var(--ink-muted);
+.loading-dots span:nth-child(1) { animation-delay: 0s; }
+.loading-dots span:nth-child(2) { animation-delay: 0.2s; }
+.loading-dots span:nth-child(3) { animation-delay: 0.4s; }
+
+@keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-20px); } }
+@keyframes bounce { 0%, 100% { transform: translateY(0); opacity: 0.4; } 50% { transform: translateY(-15px); opacity: 1; } }
+
+.hidden { display: none !important; }
+
+/* ΓöÇΓöÇ Tab panels ΓöÇΓöÇ */
+.tab-panel { width: 100%; }
+
+/* ΓöÇΓöÇ Location header ΓöÇΓöÇ */
+.loc-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-end;
+ margin-bottom: 1.5rem;
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-lg);
+ background: var(--card-bg-soft);
+ padding: 0.9rem 1rem;
+}
+
+.loc-name { font-family: var(--serif); font-size: 1.6rem; font-weight: 400; line-height: 1.1; }
+.loc-name { color: var(--card-ink); }
+.loc-sub { font-size: 0.8rem; color: var(--card-sub); letter-spacing: 0.06em; margin-top: 0.2rem; text-transform: uppercase; }
+.loc-time { font-size: 0.8rem; color: var(--card-sub); text-align: right; letter-spacing: 0.04em; line-height: 1.5; }
+.loc-actions { display: flex; flex-direction: column; align-items: flex-end; gap: 0.35rem; }
+
+/* ΓöÇΓöÇ HERO ΓöÇΓöÇ */
+.hero {
+ display: grid;
+ grid-template-columns: 1fr 1.5fr 1fr;
+ align-items: center;
+ gap: 1rem;
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-lg);
+ background: var(--card-bg);
+ color: var(--card-ink);
+ padding: 1.4rem 1rem;
+ margin-bottom: 1.8rem;
}
-.loc-actions {
+.hero-left {
display: flex;
flex-direction: column;
align-items: flex-start;
- gap: 0.32rem;
+ gap: 0.4rem;
}
-.link-btn {
- border: none;
- background: none;
- color: var(--info);
- cursor: pointer;
- font-size: 0.84rem;
+.hero-icon { font-size: 3.5rem; line-height: 1; }
+.hero-desc { font-size: 0.9rem; font-weight: 500; }
+.hero-sub { font-size: 0.82rem; color: var(--card-sub); margin-top: 0.15rem; }
+
+.hero-center { text-align: center; }
+
+.hero-temp {
+ font-family: var(--serif);
+ font-size: 6.5rem;
+ font-weight: 400;
+ line-height: 1;
+ letter-spacing: -4px;
}
-.section-head {
+.deg { font-family: var(--mono); font-size: 2rem; color: var(--card-sub); vertical-align: super; letter-spacing: 0; display: inline; }
+.feels { font-size: 0.86rem; color: var(--card-sub); margin-top: 0.5rem; }
+
+.hero-right { display: flex; justify-content: flex-end; }
+
+.hero-hilo {
display: flex;
flex-direction: column;
- gap: 0.22rem;
- margin: 0.35rem 0.45rem 0.5rem;
+ align-items: center;
+ gap: 0.6rem;
+ background: rgba(0, 0, 0, 0.2);
+ border: 1px solid rgba(255, 255, 255, 0.12);
+ padding: 1rem 1.4rem;
+ min-width: 80px;
}
-.section-label {
- font-size: 0.74rem;
- color: var(--ink-soft);
- text-transform: uppercase;
- letter-spacing: 0.08em;
- font-weight: 700;
+.hilo-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ line-height: 1.2;
+ font-size: 1.3rem;
+ font-weight: 500;
}
-.section-note {
- color: var(--ink-muted);
- font-size: 0.79rem;
+.hilo-arrow { font-size: 0.75rem; color: var(--ink-light); }
+.hilo-label { font-size: 0.55rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--card-sub); margin-top: 0.15rem; }
+.hilo-divider { width: 100%; height: 1px; background: rgba(255, 255, 255, 0.12); }
+
+/* ΓöÇΓöÇ Sun & Moon Timeline ΓöÇΓöÇ */
+.sun-section {
+ border: var(--surface-border);
+ background: var(--card-bg);
+ color: var(--card-ink);
+ border-radius: var(--surface-radius-md);
+ padding: 1rem 1.1rem;
+ margin-bottom: 2rem;
}
-.section-actions {
- display: inline-flex;
- flex-wrap: wrap;
- gap: 0.62rem;
+.sun-timeline-wrap {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+ margin-bottom: 0.65rem;
}
-/* Current */
-.current-grid {
- display: grid;
- gap: 0.6rem;
- margin-bottom: 0.75rem;
+.sun-endpoint {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 0.2rem;
+ flex-shrink: 0;
}
-.current-grid > * {
- border-radius: var(--radius-lg);
- border: 1px solid var(--line);
- background: var(--surface);
- padding: 1rem 0.85rem;
- box-shadow: var(--shadow-md);
+.sun-ep-icon { font-size: 1.6rem; line-height: 1; }
+.sun-ep-time { font-size: 0.8rem; font-weight: 600; color: var(--card-sub); white-space: nowrap; }
+
+.sun-track-wrap { flex: 1; position: relative; }
+
+.sun-track {
+ height: 6px;
+ background: rgba(255, 255, 255, 0.14);
+ border-radius: 3px;
+ position: relative;
+ overflow: visible;
}
-.temp-big {
- font-family: var(--display);
- font-size: 3.75rem;
- line-height: 0.92;
- letter-spacing: -1.5px;
+.sun-progress {
+ height: 100%;
+ background: linear-gradient(90deg, #fb923c, #fbbf24);
+ border-radius: 3px;
+ transition: width 0.6s ease;
}
-.deg {
- font-size: 1.35rem;
- color: var(--ink-soft);
- vertical-align: super;
+.sun-dot {
+ position: absolute;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ font-size: 1.2rem;
+ pointer-events: none;
+ transition: left 0.6s ease;
}
-.feels,
-.hi-lo,
-.cond-sub {
- font-size: 0.84rem;
- color: var(--ink-soft);
+.moon-row {
+ display: flex;
+ align-items: center;
+ gap: 0.6rem;
+ font-size: 0.85rem;
+ font-weight: 500;
+ color: var(--card-sub);
+ border-top: 1px solid rgba(255, 255, 255, 0.12);
+ padding-top: 0.6rem;
}
-.current-cond { display: flex; flex-direction: column; justify-content: center; }
-.cond-icon { font-size: 2.2rem; margin-bottom: 0.15rem; }
-.cond-desc { font-size: 1.08rem; font-weight: 700; }
+.moon-emoji { font-size: 1.2rem; }
+.daylight-info { margin-left: auto; font-size: 0.78rem; font-weight: 500; color: var(--card-sub); }
-/* Stat blocks */
-.stats-bar,
-.astro-grid,
-.aq-grid {
+/* ΓöÇΓöÇ Card Group ΓöÇΓöÇ */
+.card-group {
display: grid;
- gap: 0.52rem;
- border: none;
- background: transparent;
- box-shadow: none;
- margin-bottom: 0.78rem;
+ grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
+ gap: 1px;
+ background: rgba(255, 255, 255, 0.08);
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-md);
+ overflow: hidden;
+ margin-bottom: 2rem;
}
-.stats-bar { grid-template-columns: repeat(2, minmax(0, 1fr)); }
-
-.stat,
-.astro-card,
-.aq-card,
-.maps-card,
-.settings-row,
-.alert-item {
- border: 1px solid var(--line);
- border-radius: var(--radius-md);
- background: var(--surface);
- box-shadow: var(--shadow-md);
+.stat-card {
+ background: var(--card-bg);
+ padding: 1rem 0.9rem;
+ display: flex;
+ flex-direction: column;
+ gap: 0.3rem;
}
-.stat { padding: 0.78rem 0.58rem; text-align: center; }
-
-.stat-label {
- font-size: 0.64rem;
+.stat-card .stat-label {
+ font-size: 0.68rem;
+ letter-spacing: 0.12em;
text-transform: uppercase;
- letter-spacing: 0.08em;
- color: var(--ink-muted);
- margin-bottom: 0.2rem;
font-weight: 700;
+ color: var(--card-sub);
}
-.stat-val { font-size: 1.02rem; font-weight: 700; }
-.unit { font-size: 0.72rem; color: var(--ink-soft); }
+.stat-card .stat-val {
+ font-size: 1.65rem;
+ font-weight: 600;
+ line-height: 1.2;
+ color: var(--card-ink);
+}
-.astro-card,
-.aq-card,
-.maps-card { padding: 0.74rem 0.7rem; }
-.astro-val,
-.aq-val,
-.maps-value { font-size: 0.98rem; font-weight: 700; }
+.stat-unit { font-size: 0.85rem; font-weight: 600; color: var(--card-sub); margin-left: 2px; }
+.stat-sub { font-size: 0.8rem; font-weight: 500; color: var(--card-sub); }
-/* Radar & maps */
-.radar-embed-wrap,
-.radar-full-wrap,
-.maps-wrap,
-.alerts-wrap,
-.settings-wrap {
- padding: 0.7rem;
- margin-bottom: 0.85rem;
+/* ΓöÇΓöÇ Details Drawer ΓöÇΓöÇ */
+.details-drawer {
+ border: var(--surface-border);
+ margin-bottom: 2rem;
+ background: var(--card-bg);
+ border-radius: var(--surface-radius-md);
+ overflow: hidden;
}
-.radar-map,
-.map-overview {
- width: 100%;
- height: 235px;
- border-radius: var(--radius-md);
- border: 1px solid var(--line);
- overflow: hidden;
+.drawer-summary {
+ list-style: none;
+ font-size: 0.68rem;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+ color: var(--card-sub);
+ padding: 0.75rem 1rem;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ user-select: none;
}
-.radar-map-full {
- height: calc(100dvh - 20rem);
- min-height: 310px;
+.drawer-summary::-webkit-details-marker { display: none; }
+.drawer-summary:focus { outline: none; }
+
+.drawer-chevron {
+ font-size: 1.1rem;
+ transition: transform 0.2s;
+ display: inline-block;
}
-.radar-controls {
+details[open] .drawer-chevron { transform: rotate(90deg); }
+
+.drawer-body { border-top: 1px solid rgba(255, 255, 255, 0.1); }
+.drawer-card-group { margin-bottom: 0; border: none; }
+
+/* ΓöÇΓöÇ What to Bring ΓöÇΓöÇ */
+.recs-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(90px, 1fr));
+ gap: 0.5rem;
+ margin-bottom: 2rem;
+}
+
+.rec-item {
+ background: var(--card-bg);
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-md);
+ padding: 0.85rem 0.6rem;
+ text-align: center;
display: flex;
- flex-wrap: wrap;
+ flex-direction: column;
align-items: center;
- gap: 0.45rem;
- margin-top: 0.62rem;
+ gap: 0.4rem;
}
-.radar-btn {
- width: 46px;
- height: 46px;
- border: none;
- border-radius: 12px;
- background: #0f3248;
- color: #f5fbfe;
- cursor: pointer;
- font-size: 0.86rem;
+.rec-icon { font-size: 2rem; line-height: 1; }
+.rec-label { font-size: 0.72rem; font-weight: 600; color: var(--card-sub); letter-spacing: 0.04em; line-height: 1.3; }
+
+.alerts-wrap {
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-md);
+ padding: 0.75rem;
+ margin-bottom: 1.2rem;
+ background: var(--card-bg);
}
-.layer-btn { background: var(--brand); }
+.alerts-list {
+ display: grid;
+ gap: 0.5rem;
+}
-.radar-timeline {
- order: 3;
- flex-basis: 100%;
- height: 32px;
- display: flex;
- gap: 2px;
+.alert-item {
+ display: grid;
+ gap: 0.2rem;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ border-radius: 10px;
+ padding: 0.55rem;
+ background: var(--card-bg-soft);
+ font-size: 0.72rem;
}
-.tl-tick {
- flex: 1;
- border-radius: 7px;
- border: 1px solid var(--line);
- background: rgba(255, 255, 255, 0.52);
- cursor: pointer;
+.panel-note {
+ font-size: 0.72rem;
+ color: var(--ink-light);
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-md);
+ padding: 0.75rem;
+ background: var(--card-bg);
}
-.tl-tick.active { background: var(--info); border-color: var(--info); }
-.tl-tick.forecast { opacity: 0.6; }
+.settings-wrap {
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-md);
+ background: var(--card-bg);
+ padding: 0.9rem;
+ display: grid;
+ gap: 1rem;
+}
-.radar-ts { font-size: 0.75rem; color: var(--ink-soft); }
-.radar-legend { display: inline-flex; align-items: center; gap: 0.35rem; }
-.legend-label { font-size: 0.64rem; color: var(--ink-muted); }
-.legend-bar {
- width: 84px;
- height: 10px;
- border-radius: 999px;
- border: 1px solid var(--line);
- background: linear-gradient(to right, #00d8ff, #00a0e0, #0070d0, #00c800, #ffff00, #ff6000, #ff0000);
+.settings-row {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ border-radius: 10px;
+ background: var(--card-bg-soft);
+ padding: 0.65rem 0.75rem;
}
-.radar-attribution,
-.footer-note {
- font-size: 0.74rem;
- color: var(--ink-muted);
- margin-bottom: 0.8rem;
+.settings-label {
+ font-size: 0.72rem;
+ color: var(--ink-mid);
+ text-transform: uppercase;
+ letter-spacing: 0.08em;
}
-/* Hourly */
-.hourly-summary {
- margin: 0.22rem 0.38rem 0.45rem;
+.settings-value {
font-size: 0.8rem;
- color: var(--ink-soft);
+ color: var(--ink);
+ text-align: right;
}
-.hourly-scroll {
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- margin-bottom: 0.85rem;
- padding: 0.42rem;
+.settings-btn {
+ border: 1px solid rgba(255, 255, 255, 0.14);
+ border-radius: 10px;
+ background: var(--card-bg-soft);
+ color: var(--ink);
+ padding: 0.45rem 0.7rem;
+ font-family: var(--mono);
+ font-size: 0.72rem;
+ cursor: pointer;
}
-.hourly-track { display: flex; min-width: max-content; }
+.settings-btn:hover { background: var(--card-bg); }
-.hour-cell {
- min-width: 90px;
- padding: 0.72rem 0.45rem;
- text-align: center;
- border-radius: 12px;
- border: 1px solid var(--line);
- background: var(--surface);
- margin-right: 0.3rem;
+.maps-wrap {
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-md);
+ background: var(--card-bg);
+ padding: 1rem;
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
}
-.hour-cell.now {
- background: linear-gradient(180deg, rgba(29, 135, 191, 0.18) 0%, var(--surface) 100%);
+.maps-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 0.5rem;
}
-.hour-time { font-size: 0.7rem; color: var(--ink-muted); margin-bottom: 0.28rem; }
-.hour-icon { font-size: 1.35rem; margin-bottom: 0.18rem; }
-.hour-temp { font-size: 1rem; font-weight: 700; }
-.hour-feels,
-.hour-precip { font-size: 0.68rem; color: var(--ink-soft); }
+.maps-header h3 {
+ margin: 0;
+ font-size: 1.1rem;
+ font-weight: 600;
+ color: var(--card-ink);
+}
-/* Daily */
-.daily-list {
- padding: 0.4rem;
- margin-bottom: 0.9rem;
+.maps-quick-toggles {
+ display: flex;
+ gap: 0.5rem;
}
-.day-row {
- display: grid;
- grid-template-columns: 1fr auto;
- grid-template-areas:
- 'name temps'
- 'desc desc';
- gap: 0.28rem 0.55rem;
- border-radius: 12px;
- border: 1px solid var(--line);
- background: var(--surface);
- padding: 0.72rem;
- margin-bottom: 0.34rem;
-}
-
-.day-row:last-child { margin-bottom: 0; }
-.day-row.today { outline: 1px solid rgba(29, 135, 191, 0.45); }
-.day-name { grid-area: name; font-size: 0.9rem; font-weight: 700; }
-.day-icon { display: none; }
-.day-desc {
- grid-area: desc;
- font-size: 0.78rem;
- color: var(--ink-soft);
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
+.overlay-toggle {
+ padding: 0.5rem 1rem;
+ border: 1px solid var(--surface-border);
+ border-radius: var(--surface-radius-sm);
+ background: var(--card-bg-soft);
+ color: var(--card-sub);
+ font-size: 0.85rem;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.2s ease;
}
-.day-temps { grid-area: temps; font-size: 0.88rem; font-weight: 700; }
-.day-lo { color: var(--ink-muted); }
-.day-meta { display: none; }
-/* Lists and settings */
-.panel-note {
- padding: 0.75rem;
- font-size: 0.82rem;
- color: var(--ink-soft);
+.overlay-toggle:hover {
+ background: var(--card-bg);
+ border-color: var(--accent);
}
-.alerts-list,
-.saved-locations,
-.maps-controls,
-.maps-meta {
- display: grid;
- gap: 0.5rem;
+.overlay-toggle.active {
+ background: var(--accent);
+ color: #fff;
+ border-color: var(--accent);
}
-.alert-item {
- padding: 0.72rem;
- display: grid;
- gap: 0.22rem;
- font-size: 0.82rem;
+.map-overview {
+ height: 360px;
+ border: var(--surface-border);
+ border-radius: 10px;
+ box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.2);
}
-.maps-control {
+.maps-legend {
display: grid;
- gap: 0.3rem;
- font-size: 0.68rem;
- color: var(--ink-muted);
- text-transform: uppercase;
- letter-spacing: 0.05em;
+ grid-template-columns: 1fr 1fr;
+ gap: 1rem;
+ padding: 0.75rem;
+ background: rgba(255, 255, 255, 0.04);
+ border: var(--surface-border);
+ border-radius: 8px;
}
-.maps-control input,
-.maps-control select,
-.settings-btn {
- min-height: 44px;
- border: 1px solid var(--line);
- border-radius: 12px;
- background: var(--surface);
- color: var(--ink);
- padding: 0.35rem 0.55rem;
+.legend-section {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
}
-#maps-fullscreen-btn {
- font-size: 0.78rem;
- font-weight: 700;
+.legend-title {
+ font-size: 0.8rem;
+ font-weight: 600;
+ color: var(--card-ink);
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
}
-body.map-fullscreen-lock {
- overflow: hidden;
+.legend-item {
+ display: flex;
+ align-items: center;
+ gap: 0.6rem;
+ font-size: 0.75rem;
+ color: var(--card-sub);
}
-.maps-wrap.is-fullscreen {
- position: fixed;
- inset: 0;
- z-index: 520;
- margin: 0;
- border-radius: 0;
- border: none;
- background: var(--paper);
- overflow-y: auto;
- padding: calc(0.65rem + env(safe-area-inset-top, 0px)) 0.65rem calc(0.65rem + env(safe-area-inset-bottom, 0px));
+.legend-item svg {
+ flex-shrink: 0;
}
-.maps-wrap.is-fullscreen .map-overview {
- height: calc(100dvh - 210px);
- min-height: 320px;
+.maps-data {
+ display: grid;
+ grid-template-columns: 1fr 1.2fr;
+ gap: 1rem;
}
-.wind-legend {
+.maps-card {
+ background: var(--card-bg-soft);
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-sm);
+ padding: 1rem;
display: flex;
- align-items: center;
- flex-wrap: wrap;
- gap: 0.42rem;
- margin-top: 0.52rem;
- font-size: 0.71rem;
- color: var(--ink-muted);
+ flex-direction: column;
+ gap: 0.75rem;
}
-.wind-legend-scale {
- width: 126px;
- height: 10px;
- border-radius: 999px;
- border: 1px solid var(--line);
- background: linear-gradient(to right, #d2f0ff, #84ccff, #3f9fff, #1879df);
+.card-title {
+ font-size: 0.8rem;
+ font-weight: 600;
+ color: var(--card-sub);
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+}
+
+.maps-value {
+ font-size: 1rem;
+ font-weight: 500;
+ color: var(--card-ink);
}
-.saved-wrap { margin-top: 0.1rem; }
+.wind-stats {
+ display: grid;
+ grid-template-columns: 1fr 1fr 1fr;
+ gap: 0.75rem;
+}
-.saved-head {
+.wind-stat {
display: flex;
flex-direction: column;
- align-items: flex-start;
- gap: 0.3rem;
- margin-bottom: 0.32rem;
- color: var(--ink-muted);
+ gap: 0.25rem;
+}
+
+.wind-stat .stat-label {
+ font-size: 0.7rem;
+ color: var(--card-sub);
text-transform: uppercase;
- letter-spacing: 0.07em;
- font-size: 0.67rem;
+ letter-spacing: 0.05em;
}
-.saved-help {
- margin-bottom: 0.38rem;
- font-size: 0.74rem;
- color: var(--ink-muted);
+.wind-stat .stat-value {
+ font-size: 1.1rem;
+ font-weight: 600;
+ color: var(--accent);
}
-.saved-item {
- display: grid;
- grid-template-columns: 36px 1fr 36px 36px 36px;
- border: 1px solid var(--line);
- border-radius: 12px;
- background: var(--surface);
- overflow: hidden;
+.stat-label { font-size: 0.58rem; letter-spacing: 0.1em; color: var(--ink-light); text-transform: uppercase; margin-bottom: 0.3rem; }
+
+/* ΓöÇΓöÇ Section heads ΓöÇΓöÇ */
+.section-head {
+ display: flex;
+ justify-content: space-between;
+ align-items: baseline;
+ margin-bottom: 0.6rem;
}
-.saved-chip,
-.saved-remove,
-.saved-default,
-.saved-move {
- min-height: 44px;
+.section-label { font-size: 0.74rem; font-weight: 800; letter-spacing: 0.14em; color: var(--ink); text-transform: uppercase; }
+.section-note { font-size: 0.72rem; color: var(--card-sub); font-style: italic; }
+
+.link-btn {
+ background: none;
border: none;
- background: transparent;
- color: var(--ink);
+ font-family: var(--mono);
+ font-size: 0.82rem;
+ font-weight: 600;
+ color: var(--cool);
cursor: pointer;
+ padding: 0.35rem 0.65rem;
+ font-style: italic;
}
-.saved-chip {
- padding: 0 0.58rem;
- text-align: left;
- border-left: 1px solid var(--line);
- border-right: 1px solid var(--line);
- white-space: nowrap;
+.link-btn:hover { text-decoration: underline; }
+
+/* ΓöÇΓöÇ Radar maps ΓöÇΓöÇ */
+.radar-embed-wrap {
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-md);
overflow: hidden;
- text-overflow: ellipsis;
+ margin-bottom: 2rem;
+ background: #1a1f2e;
}
-.saved-default { color: var(--brand); }
-.saved-move { border-right: 1px solid var(--line); }
-.saved-remove { border-right: 1px solid var(--line); color: var(--ink-muted); }
-.saved-move:disabled { opacity: 0.35; cursor: not-allowed; }
-.saved-meta { display: none; }
+.radar-map {
+ width: 100%;
+ height: 320px;
+}
-.settings-wrap { display: grid; gap: 0.62rem; }
+.radar-map-full {
+ height: calc(100vh - 280px);
+ min-height: 420px;
+}
-.settings-row {
+.radar-full-wrap {
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-md);
+ background: #1a1f2e;
+ margin-bottom: 0.5rem;
+ overflow: hidden;
+}
+
+/* ΓöÇΓöÇ Radar controls ΓöÇΓöÇ */
+.radar-controls {
display: flex;
- flex-direction: column;
- align-items: flex-start;
- gap: 0.45rem;
- padding: 0.74rem;
+ align-items: center;
+ gap: 0.75rem;
+ padding: 0.6rem 0.75rem;
+ background: var(--paper-darker);
+ border-top: 1px solid var(--border);
}
-.settings-label {
- font-size: 0.72rem;
- color: var(--ink-muted);
- text-transform: uppercase;
- letter-spacing: 0.05em;
- font-weight: 700;
+.radar-controls-full { padding: 0.75rem 1rem; }
+
+.radar-btn {
+ background: var(--ink);
+ color: var(--paper);
+ border: none;
+ width: 28px; height: 28px;
+ display: flex; align-items: center; justify-content: center;
+ font-size: 0.7rem;
+ cursor: pointer;
+ flex-shrink: 0;
+ transition: opacity 0.15s;
}
-.settings-value { font-size: 0.88rem; color: var(--ink); }
+.radar-btn:hover { opacity: 0.72; }
+.layer-btn { background: var(--accent); }
-.auto-detect-toggle,
-.toggle-label {
- display: inline-flex;
+.radar-timeline {
+ flex: 1;
+ display: flex;
+ gap: 2px;
align-items: center;
- gap: 0.48rem;
- color: var(--ink-soft);
- font-size: 0.9rem;
+ height: 28px;
+}
+
+.tl-tick {
+ flex: 1;
+ height: 100%;
+ background: var(--paper-dark);
+ border: 1px solid var(--border);
+ cursor: pointer;
+ transition: background 0.1s;
+ position: relative;
}
-.auto-detect-toggle input,
-.toggle-label input { accent-color: var(--brand); }
+.tl-tick:hover { background: var(--paper); }
+.tl-tick.active { background: var(--cool); border-color: var(--cool); }
+.tl-tick.forecast { opacity: 0.55; }
-button:focus-visible,
-input:focus-visible,
-select:focus-visible {
- outline: 2px solid var(--brand);
- outline-offset: 2px;
+.radar-ts {
+ font-size: 0.74rem;
+ color: var(--ink);
+ font-weight: 600;
+ letter-spacing: 0.04em;
+ white-space: nowrap;
+ min-width: 80px;
+ text-align: right;
}
-/* Leaflet */
-.leaflet-container { background: #1a2430; }
-.leaflet-control-zoom a {
- background: var(--surface) !important;
- color: var(--ink) !important;
- border-color: var(--line) !important;
-}
-
-/* High contrast */
-body.high-contrast {
- --ink: #0a0a0a;
- --ink-soft: #1f1f1f;
- --ink-muted: #3b3b3b;
- --paper: #fff;
- --paper-deep: #f2f2f2;
- --surface: #fff;
- --surface-soft: #fff;
- --line: #111;
- --brand: #a93a00;
- --brand-strong: #8d2f00;
- --info: #005a82;
-}
-
-/* Desktop second */
-@media (min-width: 940px) {
- html, body { font-size: 16px; }
+/* Radar legend */
+.radar-legend {
+ display: flex;
+ align-items: center;
+ gap: 0.4rem;
+ margin-left: 0.5rem;
+}
- .app {
- max-width: 1120px;
- margin: 0 auto;
- padding: 1.35rem 1.3rem calc(6.9rem + env(safe-area-inset-bottom, 0px));
- }
+.legend-label { font-size: 0.66rem; color: var(--ink-mid); letter-spacing: 0.06em; }
- .masthead {
- position: static;
- display: grid;
- grid-template-columns: auto 1fr;
- align-items: center;
- gap: 1rem;
- margin-bottom: 1rem;
- padding: 0;
- border: none;
- box-shadow: none;
- background: transparent;
- backdrop-filter: none;
- }
+.legend-bar {
+ width: 80px;
+ height: 8px;
+ background: linear-gradient(to right,
+ #00d8ff, #00a0e0, #0070d0,
+ #00c800, #80e000, #ffff00,
+ #ffc000, #ff6000, #ff0000, #c00000
+ );
+ border: 0.5px solid var(--border);
+}
- .masthead h1 { margin: 0; font-size: 2rem; }
+.radar-attribution {
+ font-size: 0.62rem;
+ color: var(--ink-light);
+ padding-top: 0.5rem;
+}
- .tabs {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- width: 100vw;
- max-width: 100vw;
- z-index: 300;
- display: grid;
- grid-template-columns: repeat(5, minmax(0, 1fr));
- gap: 0.22rem;
- padding: 0.45rem 0.28rem calc(0.45rem + env(safe-area-inset-bottom, 0px));
- background: rgba(9, 28, 40, 0.92);
- backdrop-filter: blur(12px);
- border-top: 1px solid rgba(121, 165, 191, 0.36);
- border-radius: 0;
- }
+/* ΓöÇΓöÇ Hourly scroll ΓöÇΓöÇ */
+.hourly-scroll {
+ overflow-x: auto;
+ margin-bottom: 2rem;
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-md);
+ scrollbar-width: thin;
+ scrollbar-color: var(--border) transparent;
+}
- .tab {
- min-height: 58px;
- flex-direction: column;
- border-radius: 12px;
- border-right: none;
- padding: 0.32rem 0.15rem;
- background: rgba(255, 255, 255, 0.04);
- color: #d8eaf4;
- gap: 0.24rem;
- }
+.hourly-track { display: flex; min-width: max-content; }
- .tab-icon {
- font-family: 'Apple Color Emoji', 'Segoe UI Emoji', 'Noto Color Emoji', sans-serif;
- font-size: 1.18rem;
- line-height: 1;
- }
+.hour-cell {
+ min-width: 72px;
+ padding: 0.75rem 0.5rem;
+ text-align: center;
+ border-right: 0.5px solid var(--border);
+ background: var(--card-bg);
+ transition: background 0.12s;
+}
- .tab-text {
- font-size: 0.67rem;
- line-height: 1;
- letter-spacing: 0.02em;
- font-weight: 600;
- }
+.hour-cell:last-child { border-right: none; }
+.hour-cell:hover { background: var(--paper-dark); }
+.hour-cell.now { background: var(--paper-darker); }
- .tab.active {
- color: #fff;
- background: linear-gradient(180deg, var(--brand) 0%, var(--brand-strong) 100%);
- }
+.hour-time { font-size: 0.6rem; color: var(--card-sub); letter-spacing: 0.06em; margin-bottom: 0.35rem; text-transform: uppercase; }
+.hour-icon { font-size: 1.4rem; margin-bottom: 0.3rem; }
+.hour-temp { font-size: 0.88rem; font-weight: 500; color: var(--card-ink); }
+.hour-precip { font-size: 0.64rem; color: #1f5f7e; margin-top: 0.2rem; font-weight: 600; }
- .tagline { margin: 0; }
+/* ΓöÇΓöÇ Daily forecast ΓöÇΓöÇ */
+.daily-list {
+ border: none;
+ display: grid;
+ gap: 0.55rem;
+ margin-bottom: 2rem;
+}
- .search-row input { min-height: 48px; }
- #search-btn { min-width: 140px; }
+.day-row {
+ display: grid;
+ grid-template-columns: 120px 44px 1fr 80px 60px;
+ align-items: center;
+ gap: 1rem;
+ padding: 0.85rem 1.1rem;
+ border: var(--surface-border);
+ border-radius: var(--surface-radius-md);
+ background: var(--card-bg);
+ transition: background 0.12s;
+}
+
+.day-row:last-child { border-bottom: var(--surface-border); }
+.day-row:hover { background: var(--paper-dark); }
+.day-row.today { background: var(--paper-dark); }
+
+.day-name { font-size: 0.8rem; font-weight: 500; color: var(--card-ink); }
+.day-icon { font-size: 1.5rem; text-align: center; }
+.day-desc { font-size: 0.75rem; color: var(--ink-mid); }
+.day-temps { text-align: right; font-size: 0.82rem; font-weight: 500; white-space: nowrap; color: var(--card-ink); }
+.day-lo { color: var(--ink-mid); }
+.day-meta { text-align: right; font-size: 0.62rem; color: var(--ink-mid); line-height: 1.6; }
+
+/* ΓöÇΓöÇ Footer ΓöÇΓöÇ */
+.footer-note {
+ font-size: 0.72rem;
+ color: var(--ink-light);
+ letter-spacing: 0.04em;
+ border-top: 0.5px solid var(--border);
+ padding-top: 0.75rem;
+}
- .loc-header {
- flex-direction: row;
- justify-content: space-between;
- align-items: flex-end;
+/* ΓöÇΓöÇ PWA: safe area insets (iPhone notch / home bar) ΓöÇΓöÇ */
+@supports (padding: env(safe-area-inset-bottom)) {
+ .app {
+ padding-top: max(2rem, calc(1rem + env(safe-area-inset-top)));
+ padding-left: max(1.5rem, calc(1rem + env(safe-area-inset-left)));
+ padding-right: max(1.5rem, calc(1rem + env(safe-area-inset-right)));
+ padding-bottom: max(4rem, calc(2rem + env(safe-area-inset-bottom)));
+ }
+ .radar-map-full {
+ height: calc(100vh - 280px - env(safe-area-inset-top) - env(safe-area-inset-bottom));
}
+}
- .loc-actions { align-items: flex-end; }
+/* ΓöÇΓöÇ PWA: status bar area when running standalone ΓöÇΓöÇ */
+@media (display-mode: standalone) {
+ .masthead { padding-top: max(1rem, calc(0.75rem + env(safe-area-inset-top))); }
+}
- .current-grid { grid-template-columns: 1fr 1fr; }
- .stats-bar { grid-template-columns: repeat(6, minmax(0, 1fr)); }
+/* ── Touch-friendly tap targets (min 44 × 44 px) ── */
+.tab {
+ min-height: 44px;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+}
+.search-row input,
+.search-row button { min-height: 44px; }
+.radar-btn { width: 44px; height: 44px; font-size: 0.8rem; }
+.tl-tick { min-height: 36px; }
- .astro-grid,
- .aq-grid,
- .maps-meta,
- .maps-controls { grid-template-columns: repeat(3, minmax(0, 1fr)); }
+/* iOS momentum scrolling */
+.hourly-scroll { -webkit-overflow-scrolling: touch; }
- .maps-controls { grid-template-columns: 1fr 1fr; }
- .alerts-list { grid-template-columns: 1fr 1fr; }
+/* ΓöÇΓöÇ Leaflet overrides ΓöÇΓöÇ */
+.leaflet-container { background: #1a1f2e; }
+.leaflet-tile { transition: opacity 0.24s linear; }
+.leaflet-control-zoom a {
+ background: var(--paper-dark) !important;
+ color: var(--ink) !important;
+ border-color: var(--border) !important;
+}
- .day-row {
- grid-template-columns: 120px 44px 1fr 84px 64px;
- grid-template-areas: none;
- align-items: center;
- gap: 0.8rem;
- }
+/* ΓöÇΓöÇ Mobile Bottom Navigation ΓöÇΓöÇ */
+.bottom-nav {
+ display: none;
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ width: 100vw;
+ z-index: 300;
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
+ background: rgba(25, 21, 16, 0.96);
+ backdrop-filter: blur(6px);
+ padding-bottom: env(safe-area-inset-bottom, 0px);
+}
- .day-name { grid-area: auto; }
- .day-icon { display: block; font-size: 1.36rem; text-align: center; }
- .day-desc { grid-area: auto; white-space: normal; }
- .day-temps { grid-area: auto; text-align: right; }
- .day-meta {
- display: block;
- text-align: right;
- font-size: 0.67rem;
- color: var(--ink-muted);
- line-height: 1.35;
+.bottom-tab {
+ flex: 1;
+ min-height: 56px;
+ border: none;
+ border-right: 1px solid rgba(255, 255, 255, 0.08);
+ background: transparent;
+ color: #efe8dc;
+ font-family: var(--mono);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 0.15rem;
+ cursor: pointer;
+}
+
+.bottom-tab:last-child { border-right: none; }
+.bottom-icon { font-size: 1rem; line-height: 1; }
+.bottom-label { font-size: 0.58rem; letter-spacing: 0.05em; text-transform: uppercase; }
+
+.bottom-tab.active {
+ background: var(--accent);
+ color: #fff;
+}
+
+/* ΓöÇΓöÇ Responsive ΓöÇΓöÇ */
+@media (max-width: 640px) {
+ html, body { font-size: 16px; }
+ .app { padding: max(1.2rem, calc(0.8rem + env(safe-area-inset-top, 0px))) 0.9rem max(5.25rem, calc(4.5rem + env(safe-area-inset-bottom, 0px))); }
+ .masthead {
+ grid-template-columns: 1fr;
+ grid-template-rows: auto;
+ gap: 0.35rem;
+ padding: 0.75rem 0.9rem;
}
+ .masthead h1 { font-size: 2.2rem; line-height: 1.08; }
+ .tagline { display: none; }
+ .tabs { display: none; }
+ .bottom-nav { display: flex; }
- .saved-item { grid-template-columns: 36px 1fr 36px 36px 36px auto; }
- .saved-meta {
- display: block;
- padding: 0 0.58rem;
- font-size: 0.68rem;
- color: var(--ink-muted);
+ #tab-radar-full {
+ padding-bottom: max(6.4rem, calc(5.7rem + env(safe-area-inset-bottom, 0px)));
}
- .settings-row {
- flex-direction: row;
- justify-content: space-between;
+ .radar-controls-full {
+ display: grid;
+ grid-template-columns: auto auto minmax(0, 1fr);
+ grid-template-areas:
+ 'play layer ts'
+ 'timeline timeline timeline';
+ gap: 0.45rem 0.5rem;
+ padding: 0.55rem 0.65rem;
align-items: center;
}
- .section-head {
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- margin-left: 0;
- margin-right: 0;
+ .radar-controls-full .play-btn { grid-area: play; }
+ .radar-controls-full .layer-btn { grid-area: layer; }
+ .radar-controls-full .radar-ts {
+ grid-area: ts;
+ min-width: 0;
+ text-align: right;
+ font-size: 0.66rem;
}
- .radar-timeline {
- order: 0;
- flex-basis: auto;
- flex: 1;
- min-width: 180px;
+ .radar-controls-full .radar-timeline {
+ grid-area: timeline;
+ width: 100%;
+ height: 24px;
}
- .radar-ts { margin-left: auto; }
+ .radar-controls-full .radar-legend { display: none; }
+ .radar-attribution {
+ overflow-wrap: anywhere;
+ padding-bottom: 0.3rem;
+ }
- .radar-map-full {
- height: calc(100vh - 300px);
- min-height: 440px;
+ .tab { min-width: 88px; }
+ .search-wrap { padding: 0.45rem; }
+ .search-row {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) auto auto auto;
+ gap: 0;
+ }
+ .search-row input {
+ font-size: 0.84rem;
+ padding: 0.58rem 0.68rem;
}
+ .search-row button {
+ font-size: 0.64rem;
+ padding: 0.58rem 0.62rem;
+ letter-spacing: 0.04em;
+ }
+ #locate-btn { font-size: 1rem !important; padding: 0.58rem 0.55rem !important; }
+ #units-btn { min-width: 56px; }
- .tab-panel { min-height: auto; }
+ .loc-header {
+ flex-direction: column;
+ align-items: center;
+ text-align: center;
+ gap: 0.45rem;
+ }
+ .loc-name { font-size: 2rem; }
+ .loc-sub { font-size: 0.88rem; }
+ .loc-actions { align-items: center; margin-top: 0; }
+ .loc-time { text-align: center; font-size: 0.88rem; }
+
+ .hero { grid-template-columns: 1fr; text-align: center; }
+ .hero-left { align-items: center; }
+ .hero-right { justify-content: center; }
+ .hero-temp { font-size: 5.4rem; }
+ .hero-desc { font-size: 1.55rem; }
+ .hero-sub { font-size: 0.92rem; }
+ .feels { font-size: 0.95rem; }
+ .hilo-item { font-size: 1.35rem; }
+ .hilo-label { font-size: 0.78rem; }
+
+ .section-label { font-size: 0.76rem; font-weight: 800; }
+ .section-note { font-size: 0.78rem; color: var(--ink-mid); }
+ .stat-card .stat-label { font-size: 0.75rem; font-weight: 700; }
+ .stat-card .stat-val { font-size: 1.8rem; font-weight: 600; }
+ .stat-unit { font-size: 0.95rem; font-weight: 600; }
+ .stat-sub { font-size: 0.95rem; font-weight: 600; }
+
+ /* Sun & moon section */
+ .sun-ep-icon { font-size: 1.8rem; }
+ .sun-ep-time { font-size: 0.9rem; font-weight: 600; }
+ .moon-row { font-size: 0.95rem; font-weight: 500; }
+ .moon-emoji { font-size: 1.4rem; }
+ .daylight-info { font-size: 0.88rem; font-weight: 500; }
+
+ /* What to bring */
+ .rec-item { padding: 0.95rem 0.68rem; }
+ .rec-icon { font-size: 2.2rem; }
+ .rec-label { font-size: 0.82rem; font-weight: 600; }
+
+ /* Hourly readability */
+ .hour-cell { min-width: 88px; padding: 0.8rem 0.55rem; }
+ .hour-time { font-size: 0.74rem; }
+ .hour-icon { font-size: 1.6rem; }
+ .hour-temp { font-size: 1.08rem; }
+ .hour-precip { font-size: 0.78rem; }
+
+ /* 7-day readability */
+ .day-row { padding: 0.95rem 0.95rem; }
+ .day-name { font-size: 0.98rem; }
+ .day-icon { font-size: 1.35rem; }
+ .day-desc { font-size: 0.9rem; }
+ .day-temps { font-size: 0.95rem; }
+
+ /* Bottom nav readability */
+ .bottom-tab { min-height: 62px; gap: 0.2rem; }
+ .bottom-icon { font-size: 1.2rem; }
+ .bottom-label { font-size: 0.68rem; letter-spacing: 0.04em; }
+
+ .hero-hilo { flex-direction: row; gap: 1.5rem; padding: 0.75rem 1.2rem; }
+ .hilo-divider { width: 1px; height: 2rem; }
+ .card-group { grid-template-columns: repeat(2, 1fr); }
+ .recs-grid { grid-template-columns: repeat(3, 1fr); }
+ .day-row { grid-template-columns: 80px 36px 1fr 70px; }
+ .day-meta { display: none; }
+ .radar-map { height: 240px; }
+ .legend-bar { width: 50px; }
+ .settings-row { flex-direction: column; align-items: flex-start; gap: 0.5rem; }
+ .settings-value { text-align: left; }
+ .map-overview { height: 280px; }
+ .maps-data { grid-template-columns: 1fr; }
+ .maps-legend { grid-template-columns: 1fr; }
+ .wind-stats { grid-template-columns: 1fr 1fr; }
}