index.css 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. :root{
  2. --bg: #05020f;
  3. --glass: rgba(12,8,35,.82);
  4. --border: rgba(0,255,240,.38);
  5. --text: #f8f9ff;
  6. --muted: #9ed4ff;
  7. --accent: #00ffea;
  8. --accent-2: #ff00c8;
  9. --glow: #00ffea;
  10. --outer-pad: clamp(16px, 1.8vw, 80px);
  11. --gap: clamp(12px, 1.3vw, 56px);
  12. --radius: clamp(18px, 1.4vw, 60px);
  13. --radius-sm: clamp(12px, 0.9vw, 40px);
  14. --font: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, "Noto Sans", Arial, sans-serif;
  15. --time-size: clamp(60px, 8.5vh, 200px);
  16. --date-size: clamp(22px, 2.5vh, 58px);
  17. --h2-size: clamp(18px, 2vh, 46px);
  18. --cond-size: clamp(20px, 2.3vh, 54px);
  19. --info-size: clamp(16px, 2vh, 46px);
  20. --table-head: clamp(14px, 1.6vh, 38px);
  21. --table-cell: clamp(14px, 1.9vh, 44px);
  22. }
  23. *{box-sizing:border-box}
  24. html,body{height:100%;width:100%;margin:0;padding:0}
  25. body{
  26. font-family:var(--font);
  27. color:var(--text);
  28. background:
  29. radial-gradient(1200px 600px at 20% 10%, rgba(0,255,234,.18), transparent 60%),
  30. radial-gradient(900px 500px at 85% 20%, rgba(255,0,200,.14), transparent 55%),
  31. radial-gradient(800px 600px at 50% 100%, rgba(120,0,255,.08), transparent 55%),
  32. var(--bg);
  33. overflow:hidden;
  34. -webkit-font-smoothing:antialiased;
  35. text-rendering:geometricPrecision;
  36. }
  37. .grid{
  38. height:100vh;
  39. width:100vw;
  40. padding:var(--outer-pad);
  41. display:grid;
  42. grid-template-columns:minmax(0,1fr) minmax(0,1.35fr);
  43. grid-template-rows:minmax(0,1fr) minmax(0,1fr);
  44. gap:var(--gap);
  45. filter:brightness(.98);
  46. }
  47. .grid>*{min-width:0;min-height:0}
  48. .topLeft,.topRight,.bottomLeft,.bottomRight{
  49. position:relative;
  50. min-width:0;
  51. min-height:0;
  52. border-radius:var(--radius);
  53. background:var(--glass);
  54. border:1px solid var(--border);
  55. box-shadow:0 10px 30px #00000059, inset 0 1px #ffffff0f, 0 0 0 1px rgba(0,255,234,.12);
  56. overflow:hidden;
  57. backdrop-filter:blur(16px);
  58. }
  59. /* -------- Top Left - weather description/logo NOW SAFELY to the RIGHT of date/time -------- */
  60. .topLeft{
  61. display:flex;
  62. flex-direction:column;
  63. padding:clamp(12px, 1.2vw, 54px);
  64. gap:clamp(10px, 1vh, 46px);
  65. }
  66. .dateTime{
  67. flex:0 0 auto;
  68. min-width:0;
  69. display: grid;
  70. grid-template-columns: 1fr 38%; /* fully responsive % — no more fixed px clipping */
  71. gap: clamp(8px, 0.9vh, 20px) clamp(24px, 2.8vw, 110px);
  72. padding:clamp(14px, 1.6vh, 38px) clamp(18px, 2vw, 80px);
  73. border-radius:var(--radius-sm);
  74. background:rgba(8,4,28,.85);
  75. border:1px solid rgba(0,255,234,.35);
  76. position: relative;
  77. align-items: start;
  78. min-height: auto; /* prevents collapse */
  79. }
  80. #date{
  81. grid-column: 1;
  82. margin:0;
  83. font-size:var(--date-size);
  84. letter-spacing:.35px;
  85. color:var(--muted);
  86. text-transform:uppercase;
  87. }
  88. #time{
  89. grid-column: 1;
  90. margin:2px 0 0 0;
  91. font-size:var(--time-size);
  92. font-weight:760;
  93. letter-spacing:.8px;
  94. line-height:1.02;
  95. color:var(--text);
  96. text-shadow:0 0 20px var(--glow);
  97. }
  98. /* weather description + logo moved to right column (flex column so they stack nicely) */
  99. .dateTime > div {
  100. grid-column: 2;
  101. grid-row: 1 / span 2;
  102. display:flex;
  103. flex-direction:column;
  104. align-items: flex-end;
  105. justify-content: center;
  106. gap: clamp(6px, 0.8vh, 18px);
  107. height: 100%;
  108. min-width:0;
  109. }
  110. #weatherDescription{
  111. font-size:clamp(36px, 3.5vh, 82px);
  112. font-weight:700;
  113. color:#fff;
  114. text-shadow:0 0 15px var(--accent);
  115. margin:0;
  116. text-align:right;
  117. line-height:1.05;
  118. white-space:nowrap;
  119. }
  120. #currentWeatherLogo{
  121. font-size:clamp(70px, 7vh, 165px);
  122. line-height:1;
  123. filter:drop-shadow(0 0 22px var(--accent-2));
  124. margin:0;
  125. }
  126. #conditionLogo{
  127. height: 100%;
  128. position: absolute;
  129. top: 0;
  130. right: 0;
  131. filter:drop-shadow(0 0 25px var(--glow));
  132. z-index: 1;
  133. pointer-events: none;
  134. }
  135. /* -------- weather block below (unchanged proportions) -------- */
  136. .weather{
  137. flex:1 1 auto;
  138. min-width:0;
  139. min-height:0;
  140. display:flex;
  141. }
  142. .weatherBlock{
  143. flex:1 1 auto;
  144. min-width:0;
  145. min-height:0;
  146. padding:clamp(10px, 1vw, 44px);
  147. }
  148. .weatherInfo{
  149. height: 100%;
  150. display:grid;
  151. grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  152. grid-template-rows:minmax(0,1fr) minmax(0,1fr);
  153. gap:clamp(6px, 0.7vh, 16px) clamp(8px, 0.8vw, 34px);
  154. align-content:stretch;
  155. align-items:stretch;
  156. }
  157. .weatherItem{
  158. margin:0;
  159. padding:clamp(6px, 1.1vh, 26px) clamp(9px, 1.3vw, 52px);
  160. border-radius:clamp(14px, 0.9vw, 36px);
  161. background:rgba(255,255,255,.09);
  162. border:1px solid rgba(0,255,234,.25);
  163. font-size:var(--info-size);
  164. line-height:1.00;
  165. display:flex;
  166. align-items:center;
  167. justify-content:center;
  168. box-shadow:0 4px 20px rgba(0,0,0,.4);
  169. }
  170. #temp,#feels,#wind,#dewPoint{
  171. color:var(--text);
  172. font-weight:700;
  173. }
  174. #wind svg{
  175. width:clamp(24px, 2.2vh, 52px);
  176. height:clamp(24px, 2.2vh, 52px);
  177. }
  178. /* -------- Top Right (Radar) -------- */
  179. .topRight{
  180. padding:clamp(12px, 1.2vw, 54px);
  181. display:flex;
  182. align-items:center;
  183. justify-content:center;
  184. background:radial-gradient(800px 520px at 70% 10%, rgba(255,0,200,.12), transparent 55%), rgba(8,4,28,.85);
  185. }
  186. #radar{
  187. width:100%;
  188. height:100%;
  189. object-fit:scale-down;
  190. object-position:center 52%;
  191. transform:scale(1.08);
  192. border-radius:calc(var(--radius) - 6px);
  193. border:1px solid rgba(0,255,234,.45);
  194. box-shadow:0 14px 40px #00000073, 0 0 25px rgba(0,255,234,.3);
  195. background:#00000038;
  196. display:block;
  197. }
  198. /* -------- Bottom Left (Forecast) -------- */
  199. .bottomLeft{padding:clamp(12px, 1.2vw, 54px);display:flex;min-width:0;min-height:0}
  200. table{
  201. width:100%;
  202. height:100%;
  203. border-collapse:separate;
  204. border-spacing:0;
  205. overflow:hidden;
  206. border-radius:calc(var(--radius) - 6px);
  207. background:rgba(8,4,28,.75);
  208. border:1px solid rgba(0,255,234,.3);
  209. table-layout:fixed;
  210. }
  211. thead th{
  212. padding:clamp(8px, 1.1vh, 26px) clamp(8px, 1.1vw, 44px);
  213. font-size:var(--table-head);
  214. line-height:1.1;
  215. color:#fff;
  216. letter-spacing:.4px;
  217. text-transform:uppercase;
  218. background:linear-gradient(90deg, rgba(0,255,234,.25), rgba(255,0,200,.2));
  219. border-bottom:1px solid rgba(0,255,234,.35);
  220. }
  221. tbody td{
  222. padding:clamp(6px, 1vh, 22px) clamp(8px, 1vw, 40px);
  223. font-size:var(--table-cell);
  224. line-height:1.1;
  225. color:var(--muted);
  226. border-bottom:1px solid rgba(255,255,255,.06);
  227. }
  228. tbody td:first-child{
  229. width:44%;
  230. color:#e0f8ff;
  231. font-weight:760;
  232. background:rgba(0,255,234,.1);
  233. border-right:1px solid rgba(0,255,234,.25);
  234. }
  235. tbody td:not(:first-child),thead th:not(:first-child){text-align:center}
  236. tbody tr:nth-child(odd) td{background:rgba(255,255,255,.04)}
  237. tbody tr:nth-child(2n) td{background:rgba(255,255,255,.07)}
  238. tbody tr:last-child td{border-bottom:none}
  239. /* -------- Bottom Right -------- */
  240. .bottomRight{
  241. padding:clamp(12px, 1.2vw, 54px);
  242. background:radial-gradient(900px 600px at 20% 20%, rgba(0,255,234,.1), transparent 55%), rgba(8,4,28,.85);
  243. }
  244. .bottomRight iframe{
  245. width:100%;
  246. height:100%;
  247. border:1px solid rgba(0,255,234,.35);
  248. border-radius:calc(var(--radius) - 6px);
  249. box-shadow:0 18px 50px #0000008c, 0 0 30px rgba(255,0,200,.3);
  250. background:#000;
  251. display:block;
  252. }
  253. :focus{outline:3px solid var(--accent);outline-offset:3px;border-radius:12px}