Browse Source

Another style update

Lee Morgan 6 months ago
parent
commit
a61265f798
1 changed files with 104 additions and 134 deletions
  1. 104 134
      index.css

+ 104 - 134
index.css

@@ -1,5 +1,5 @@
 /* =========
-   Dark TV Dashboard Theme (TV-safe)
+   Dark 4K TV Dashboard Theme (grid-only, no media queries)
    Copy/paste into <style>...</style>
    ========= */
 
@@ -17,14 +17,12 @@
   /* Accents */
   --accent: #4cc9f0;     /* cool cyan */
   --accent-2: #a78bfa;   /* soft purple */
-  --good: #34d399;
-  --warn: #fbbf24;
 
-  /* Layout */
-  --radius: 18px;
-  --radius-sm: 12px;
-  --pad: 18px;
-  --gap: 16px;
+  /* 4K layout tuning */
+  --pad: 26px;
+  --gap: 22px;
+  --radius: 22px;
+  --radius-sm: 14px;
 
   /* Type */
   --font: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, "Noto Sans", Arial, sans-serif;
@@ -38,87 +36,41 @@ body{
   font-family: var(--font);
   color: var(--text);
   background:
-    radial-gradient(1200px 600px at 20% 10%, rgba(76,201,240,0.12), transparent 60%),
-    radial-gradient(900px 500px at 85% 20%, rgba(167,139,250,0.10), transparent 55%),
-    radial-gradient(800px 600px at 50% 100%, rgba(255,255,255,0.06), transparent 55%),
+    radial-gradient(1600px 800px at 20% 10%, rgba(76,201,240,0.12), transparent 60%),
+    radial-gradient(1200px 700px at 85% 20%, rgba(167,139,250,0.10), transparent 55%),
+    radial-gradient(1200px 900px at 50% 100%, rgba(255,255,255,0.06), transparent 55%),
     var(--bg);
-  overflow:hidden; /* TV: never scroll */
-
+  overflow:hidden; /* never scroll on TV */
   -webkit-font-smoothing: antialiased;
   text-rendering: geometricPrecision;
 }
 
 /* =========
-   Layout: flex fallback + grid when supported
+   Grid Layout (2x2 always)
    ========= */
-
-/* Fallback first (works even on weak TV browsers) */
 .grid{
   height:100vh;
   width:100vw;
-  padding: 18px;
-
-  display:flex;
-  flex-wrap:wrap;
+  padding: var(--pad);
+  display:grid;
+  grid-template-columns: minmax(0, 1.05fr) minmax(0, 1.45fr);
+  grid-template-rows: minmax(0, 1fr) minmax(0, 1fr);
   gap: var(--gap);
-
   filter: brightness(0.98);
 }
 
-/* 2x2 tiles using flex fallback */
-.grid > .topLeft,
-.grid > .topRight,
-.grid > .bottomLeft,
-.grid > .bottomRight{
+/* Ensure grid children can shrink and never overflow their column */
+.topLeft, .topRight, .bottomLeft, .bottomRight{
   position:relative;
+  min-width: 0;
   min-height: 0;
   border-radius: var(--radius);
   background: linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.03));
   border: 1px solid var(--border);
   box-shadow:
-    0 10px 30px rgba(0,0,0,0.35),
+    0 14px 40px rgba(0,0,0,0.38),
     inset 0 1px 0 rgba(255,255,255,0.06);
   overflow:hidden;
-
-  flex: 1 1 calc(50% - (var(--gap) / 2));
-  height: calc(50vh - (18px + (var(--gap) / 2)));
-  min-width: 520px;
-}
-
-/* Prefer CSS Grid if supported */
-@supports (display: grid){
-  .grid{
-    display:grid;
-    grid-template-columns: 1.1fr 1.4fr;
-    grid-template-rows: 1fr 1fr;
-    gap: var(--gap);
-  }
-
-  .grid > .topLeft,
-  .grid > .topRight,
-  .grid > .bottomLeft,
-  .grid > .bottomRight{
-    height: auto;
-    min-width: 0;
-  }
-}
-
-/* Only stack on truly small screens (avoid TVs triggering this) */
-@media (max-width: 720px){
-  .grid{
-    display:flex;
-    flex-direction:column;
-    flex-wrap:nowrap;
-  }
-
-  .grid > .topLeft,
-  .grid > .topRight,
-  .grid > .bottomLeft,
-  .grid > .bottomRight{
-    flex: 0 0 auto;
-    height: auto;
-    min-width: 0;
-  }
 }
 
 /* =========
@@ -128,15 +80,18 @@ body{
   display:flex;
   flex-direction:column;
   padding: var(--pad);
-  gap: 14px;
+  gap: 18px;
+  min-width: 0;
+  min-height: 0;
 }
 
 /* Date/Time card */
 .dateTime{
+  flex: 0 0 auto;
   display:flex;
   flex-direction:column;
-  gap: 6px;
-  padding: 14px 16px;
+  gap: 8px;
+  padding: 16px 18px;
   border-radius: var(--radius-sm);
   background: rgba(0,0,0,0.22);
   border: 1px solid rgba(255,255,255,0.08);
@@ -144,50 +99,48 @@ body{
 
 #date{
   margin:0;
-  font-size: 22px;
+  font-size: clamp(20px, 1.05vw, 34px);
   letter-spacing: 0.4px;
   color: var(--muted);
 }
 
 #time{
   margin:0;
-  font-size: 56px;
-  font-weight: 700;
+  font-size: clamp(52px, 2.6vw, 104px);
+  font-weight: 720;
   letter-spacing: 1.2px;
-  line-height: 1.05;
+  line-height: 1.02;
   color: var(--text);
 }
 
-@media (max-width: 720px){
-  #time{ font-size: 48px; }
-}
-
 /* Weather block */
 .weather{
-  flex: 1;
+  flex: 1 1 auto;
   min-height: 0;
+  min-width: 0;
   display:flex;
 }
 
 .weatherBlock{
-  flex: 1;
+  flex: 1 1 auto;
   min-height: 0;
-  padding: 16px;
+  min-width: 0;
+  padding: 18px;
   border-radius: var(--radius-sm);
   background:
-    radial-gradient(600px 240px at 20% 10%, rgba(76,201,240,0.10), transparent 60%),
+    radial-gradient(900px 320px at 20% 10%, rgba(76,201,240,0.10), transparent 60%),
     rgba(0,0,0,0.18);
   border: 1px solid rgba(255,255,255,0.08);
   display:flex;
   flex-direction:column;
-  gap: 12px;
+  gap: 14px;
 }
 
 .weatherBlock h2{
   margin:0;
-  font-size: 18px;
-  font-weight: 700;
-  letter-spacing: 0.5px;
+  font-size: clamp(18px, 0.9vw, 26px);
+  font-weight: 750;
+  letter-spacing: 0.6px;
   color: var(--text);
   display:flex;
   align-items:center;
@@ -207,95 +160,101 @@ body{
 .condition{
   display:flex;
   align-items:center;
-  gap: 12px;
-  padding: 10px 12px;
-  border-radius: 14px;
+  gap: 14px;
+  padding: 12px 14px;
+  border-radius: 16px;
   background: rgba(255,255,255,0.04);
   border: 1px solid rgba(255,255,255,0.06);
+  min-width: 0;
 }
 
 .condition img{
-  width: 54px;
-  height: 54px;
+  width: clamp(48px, 2.0vw, 72px);
+  height: clamp(48px, 2.0vw, 72px);
   object-fit: contain;
-  filter: drop-shadow(0 6px 10px rgba(0,0,0,0.45));
+  filter: drop-shadow(0 8px 14px rgba(0,0,0,0.45));
+  flex: 0 0 auto;
 }
 
 .conditionText{
   margin:0;
-  font-size: 22px;
-  font-weight: 650;
+  font-size: clamp(20px, 1.05vw, 34px);
+  font-weight: 680;
   letter-spacing: 0.2px;
   color: var(--text);
+  overflow:hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
 }
 
 /* Weather info list */
 .weatherInfo{
   display:grid;
-  grid-template-columns: 1fr 1fr;
-  gap: 10px 12px;
+  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
+  gap: 12px 14px;
   margin-top: 2px;
-}
-
-@media (max-width: 720px){
-  .weatherInfo{ grid-template-columns: 1fr; }
+  min-width: 0;
 }
 
 .weatherInfo p{
   margin:0;
-  padding: 10px 12px;
-  border-radius: 14px;
+  padding: 12px 14px;
+  border-radius: 16px;
   background: rgba(255,255,255,0.035);
   border: 1px solid rgba(255,255,255,0.06);
-  font-size: 18px;
+  font-size: clamp(16px, 0.85vw, 26px);
   color: var(--muted);
   display:flex;
   align-items:center;
   justify-content:space-between;
+  min-width: 0;
 }
 
 .weatherInfo p strong{
   color: var(--text);
 }
 
-/* If you don't wrap labels/values in <strong>, still make the numbers pop a bit */
 #temp, #feels, #wind, #humidity{ color: var(--text); }
-#temp{ font-size: 20px; font-weight: 650; }
-#feels, #wind, #humidity{ font-weight: 550; }
+#temp{ font-weight: 750; }
+#feels, #wind, #humidity{ font-weight: 600; }
 
 /* =========
    Top Right: Radar Image
    ========= */
 .topRight{
-  padding: 12px;
+  padding: 14px;
   display:flex;
   align-items:center;
   justify-content:center;
   background:
-    radial-gradient(800px 520px at 70% 10%, rgba(167,139,250,0.09), transparent 55%),
+    radial-gradient(1200px 800px at 70% 10%, rgba(167,139,250,0.09), transparent 55%),
     rgba(0,0,0,0.10);
+  min-width: 0;
+  min-height: 0;
 }
 
 #radar{
   width:100%;
   height:100%;
   object-fit: cover;
-  border-radius: calc(var(--radius) - 6px);
+  border-radius: calc(var(--radius) - 8px);
   border: 1px solid rgba(255,255,255,0.08);
-  box-shadow: 0 14px 40px rgba(0,0,0,0.45);
+  box-shadow: 0 18px 55px rgba(0,0,0,0.50);
   filter: contrast(1.04) saturate(1.05);
+  display:block;
 }
 
+/* Label overlay */
 .topRight::after{
   content:"Radar";
   position:absolute;
-  top: 12px;
-  left: 14px;
-  padding: 6px 10px;
-  font-size: 14px;
-  letter-spacing: 0.6px;
+  top: 14px;
+  left: 16px;
+  padding: 8px 12px;
+  font-size: clamp(12px, 0.65vw, 18px);
+  letter-spacing: 0.8px;
   text-transform: uppercase;
-  color: rgba(255,255,255,0.72);
+  color: rgba(255,255,255,0.74);
   background: rgba(0,0,0,0.40);
   border: 1px solid rgba(255,255,255,0.08);
   border-radius: 999px;
@@ -306,8 +265,10 @@ body{
    Bottom Left: Forecast Table
    ========= */
 .bottomLeft{
-  padding: 12px;
+  padding: 14px;
   display:flex;
+  min-width: 0;
+  min-height: 0;
 }
 
 table{
@@ -316,41 +277,47 @@ table{
   border-collapse: separate;
   border-spacing: 0;
   overflow:hidden;
-  border-radius: calc(var(--radius) - 6px);
+  border-radius: calc(var(--radius) - 8px);
   background: rgba(0,0,0,0.18);
   border: 1px solid rgba(255,255,255,0.08);
+  table-layout: fixed; /* prevents the left column from blowing out widths */
 }
 
 /* Head row */
 thead th{
-  padding: 12px 10px;
-  font-size: 15px;
-  color: rgba(255,255,255,0.80);
-  letter-spacing: 0.4px;
+  padding: 14px 10px;
+  font-size: clamp(13px, 0.70vw, 18px);
+  color: rgba(255,255,255,0.82);
+  letter-spacing: 0.7px;
   text-transform: uppercase;
-  background:
-    linear-gradient(90deg, rgba(76,201,240,0.10), rgba(167,139,250,0.08));
+  background: linear-gradient(90deg, rgba(76,201,240,0.10), rgba(167,139,250,0.08));
   border-bottom: 1px solid rgba(255,255,255,0.10);
+  overflow:hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
 }
 
 tbody td{
-  padding: 12px 10px;
-  font-size: 16px;
+  padding: 14px 10px;
+  font-size: clamp(14px, 0.78vw, 20px);
   color: var(--muted);
   border-bottom: 1px solid rgba(255,255,255,0.06);
+  overflow:hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
 }
 
 /* Left column labels */
 tbody td:first-child{
-  width: 38%;
-  color: rgba(255,255,255,0.86);
-  font-weight: 650;
+  width: 42%;
+  color: rgba(255,255,255,0.88);
+  font-weight: 720;
   letter-spacing: 0.2px;
   background: rgba(255,255,255,0.03);
   border-right: 1px solid rgba(255,255,255,0.06);
 }
 
-/* Center the forecast values */
+/* Center values */
 tbody td:not(:first-child),
 thead th:not(:first-child){
   text-align:center;
@@ -368,19 +335,22 @@ tbody tr:last-child td{ border-bottom: none; }
    Bottom Right: YouTube iframe
    ========= */
 .bottomRight{
-  padding: 10px;
+  padding: 14px;
   background:
-    radial-gradient(900px 600px at 20% 20%, rgba(76,201,240,0.08), transparent 55%),
+    radial-gradient(1400px 900px at 20% 20%, rgba(76,201,240,0.08), transparent 55%),
     rgba(0,0,0,0.10);
+  min-width: 0;
+  min-height: 0;
 }
 
 .bottomRight iframe{
   width:100%;
   height:100%;
   border: 1px solid rgba(255,255,255,0.10);
-  border-radius: calc(var(--radius) - 6px);
-  box-shadow: 0 18px 50px rgba(0,0,0,0.55);
+  border-radius: calc(var(--radius) - 8px);
+  box-shadow: 0 22px 70px rgba(0,0,0,0.58);
   background: #000;
+  display:block;
 }
 
 /* =========