2074 lines
109 KiB
Diff
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; }
|
|
}
|