Brajmovech commited on
Commit
3773031
·
1 Parent(s): 7cbea93

fix: align dashboard card grid to 3-column layout with spanning headlines card

Browse files
Files changed (2) hide show
  1. static/style.css +46 -70
  2. templates/index.html +32 -21
static/style.css CHANGED
@@ -450,44 +450,52 @@ header {
450
 
451
  .dashboard-3col {
452
  display: grid;
453
- grid-template-columns: 1fr 1fr 1.45fr;
454
- gap: 1.5rem;
 
455
  align-items: stretch;
456
  margin-bottom: 2rem;
457
  }
458
 
459
- .dash-col {
 
 
 
460
  display: flex;
461
  flex-direction: column;
462
- gap: 1.5rem;
463
- height: 100%;
464
- min-height: 0; /* lets flex children shrink below content size */
465
  }
466
 
467
- /* Left column: two cards share the full column height equally */
468
- .dash-col--left {
469
- height: 100%;
470
- min-height: 0;
471
  }
472
 
473
- .dash-col--left .card {
474
- flex: 1;
475
- min-height: 0;
 
476
  display: flex;
477
  flex-direction: column;
 
478
  }
479
 
480
- /* Engine indicator fills leftover vertical space inside Risk card */
481
- .dash-col--left .engine-indicator {
482
- flex: 1;
483
  display: flex;
484
  flex-direction: column;
485
- align-items: center;
486
- justify-content: center;
487
  }
488
 
489
- /* Sentiment body fills leftover space inside Sentiment card */
490
- .dash-col--left .sentiment-meter {
 
 
 
 
 
 
 
 
491
  flex: 1;
492
  display: flex;
493
  flex-direction: column;
@@ -495,51 +503,32 @@ header {
495
  justify-content: center;
496
  }
497
 
498
- /* Middle column */
499
- .dash-col--mid {
500
- height: 100%;
501
- min-height: 0;
502
- }
503
-
504
- .dash-col--mid .price-card {
505
- flex-shrink: 0;
506
- }
507
-
508
- .dash-col--mid .llm-card {
509
  flex: 1;
510
- min-height: 0;
511
  display: flex;
512
  flex-direction: column;
513
- overflow: hidden;
 
514
  }
515
 
516
- .dash-col--mid .llm-card .llm-info {
 
517
  flex: 1;
518
  min-height: 0;
519
  overflow-y: auto;
520
  }
521
 
522
- /* Right column: headlines card fills full height and scrolls internally */
523
- .dash-col--right {
524
- height: 100%;
525
- min-height: 0;
526
- }
527
-
528
- .dash-col--right .headlines-card {
529
- flex: 1;
530
- min-height: 0;
531
- display: flex;
532
- flex-direction: column;
533
- overflow: hidden;
534
- }
535
-
536
- .dash-col--right .headlines-card h3 {
537
  flex-shrink: 0;
538
  }
539
 
540
- .dash-col--right .headlines-card .headlines-list {
541
- height: 80%;
 
542
  padding-right: 0.25rem;
 
543
  }
544
 
545
  /* Predicted price: RED for uptrend, GREEN for downtrend (contrarian risk signal) */
@@ -1165,38 +1154,25 @@ footer p {
1165
  width: 100%; /* Full width tap-target for thumbs */
1166
  }
1167
 
1168
- /* Layout Grid */
1169
  .dashboard-3col {
1170
  grid-template-columns: 1fr;
1171
  grid-template-rows: none;
1172
- height: auto;
1173
- }
1174
-
1175
- /* Dashboard columns reset */
1176
- .dash-col,
1177
- .dash-col--left,
1178
- .dash-col--mid,
1179
- .dash-col--right {
1180
- display: block;
1181
  }
1182
 
 
1183
  .engine-light-card,
1184
- .sentiment-card,
1185
  .price-card,
 
 
1186
  .llm-card {
1187
  grid-column: auto;
1188
  grid-row: auto;
1189
  }
1190
 
1191
  .headlines-card {
1192
- grid-column: auto;
1193
- grid-row: auto;
1194
- height: auto;
1195
- }
1196
-
1197
- .dashboard-3col .card,
1198
- .dashboard-3col .glass-panel {
1199
- height: auto;
1200
  }
1201
 
1202
  .headlines-list {
 
450
 
451
  .dashboard-3col {
452
  display: grid;
453
+ grid-template-columns: 1fr 1fr 1fr;
454
+ grid-template-rows: auto auto;
455
+ gap: 1.25rem;
456
  align-items: stretch;
457
  margin-bottom: 2rem;
458
  }
459
 
460
+ /* ── Explicit grid placement for each dashboard card ── */
461
+ .engine-light-card {
462
+ grid-column: 1;
463
+ grid-row: 1;
464
  display: flex;
465
  flex-direction: column;
 
 
 
466
  }
467
 
468
+ .price-card {
469
+ grid-column: 2;
470
+ grid-row: 1;
 
471
  }
472
 
473
+ /* Headlines spans both rows in the third column */
474
+ .headlines-card {
475
+ grid-column: 3;
476
+ grid-row: 1 / span 2;
477
  display: flex;
478
  flex-direction: column;
479
+ overflow: hidden;
480
  }
481
 
482
+ .sentiment-card {
483
+ grid-column: 1;
484
+ grid-row: 2;
485
  display: flex;
486
  flex-direction: column;
 
 
487
  }
488
 
489
+ .llm-card {
490
+ grid-column: 2;
491
+ grid-row: 2;
492
+ display: flex;
493
+ flex-direction: column;
494
+ overflow: hidden;
495
+ }
496
+
497
+ /* Engine indicator centred vertically inside Risk card */
498
+ .engine-light-card .engine-indicator {
499
  flex: 1;
500
  display: flex;
501
  flex-direction: column;
 
503
  justify-content: center;
504
  }
505
 
506
+ /* Sentiment meter centred vertically inside Sentiment card */
507
+ .sentiment-card .sentiment-meter {
 
 
 
 
 
 
 
 
 
508
  flex: 1;
 
509
  display: flex;
510
  flex-direction: column;
511
+ align-items: center;
512
+ justify-content: center;
513
  }
514
 
515
+ /* LLM Insights: scrollable content area */
516
+ .llm-card .llm-info {
517
  flex: 1;
518
  min-height: 0;
519
  overflow-y: auto;
520
  }
521
 
522
+ /* Headlines: fixed title, scrollable list */
523
+ .headlines-card h3 {
 
 
 
 
 
 
 
 
 
 
 
 
 
524
  flex-shrink: 0;
525
  }
526
 
527
+ .headlines-card .headlines-list {
528
+ flex: 1;
529
+ overflow-y: auto;
530
  padding-right: 0.25rem;
531
+ max-height: 460px;
532
  }
533
 
534
  /* Predicted price: RED for uptrend, GREEN for downtrend (contrarian risk signal) */
 
1154
  width: 100%; /* Full width tap-target for thumbs */
1155
  }
1156
 
1157
+ /* Layout Grid — single column on mobile */
1158
  .dashboard-3col {
1159
  grid-template-columns: 1fr;
1160
  grid-template-rows: none;
 
 
 
 
 
 
 
 
 
1161
  }
1162
 
1163
+ /* Reset explicit placements so cards stack naturally */
1164
  .engine-light-card,
 
1165
  .price-card,
1166
+ .headlines-card,
1167
+ .sentiment-card,
1168
  .llm-card {
1169
  grid-column: auto;
1170
  grid-row: auto;
1171
  }
1172
 
1173
  .headlines-card {
1174
+ max-height: none;
1175
+ overflow: visible;
 
 
 
 
 
 
1176
  }
1177
 
1178
  .headlines-list {
templates/index.html CHANGED
@@ -113,7 +113,7 @@
113
 
114
  <div class="cards-grid dashboard-3col">
115
 
116
- <!-- col 1, row 1 -->
117
  <div class="card glass-panel engine-light-card">
118
  <h3>Risk Indicator</h3>
119
  <div class="engine-indicator" id="engine-light">
@@ -122,36 +122,47 @@
122
  </div>
123
  </div>
124
 
125
- <!-- col 1, row 2 -->
126
- <div class="card glass-panel sentiment-card">
127
- <h3>Sentiment Analysis</h3>
128
- <div class="sentiment-meter">
129
- <div class="score-display"><span id="sentiment-score">0.00</span></div>
130
- <p class="sentiment-desc" id="sentiment-desc">Neutral Sentiment</p>
131
- </div>
132
- </div>
133
-
134
- <!-- col 2, row 1 -->
135
  <div class="card glass-panel price-card">
136
  <h3>Market Prediction</h3>
137
  <div class="price-info">
138
- <div class="price-row"><span class="label">Current</span><span class="value" id="current-price">$0.00</span></div>
139
- <div class="price-row highlight"><span class="label">Predicted (Next Session)</span><span class="value" id="predicted-price">$0.00</span></div>
 
 
 
 
 
 
140
  </div>
141
  <div class="trend-badge" id="trend-label">UNKNOWN TREND</div>
142
  </div>
143
 
144
- <!-- col 2, row 2 -->
145
- <div class="card glass-panel llm-card">
146
- <h3>LLM Insights</h3>
147
- <div id="llm-insights-container"><p class="text-muted">No LLM insights available.</p></div>
148
- </div>
149
-
150
- <!-- col 3, row 1–2 -->
151
  <div class="card glass-panel headlines-card">
152
  <h3>Recent Headlines Analyzed</h3>
153
  <ul id="headlines-list" class="headlines-list"></ul>
154
- <div class="headlines-scroll-hint" id="headlines-scroll-hint">scroll for more</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  </div>
156
 
157
  </div>
 
113
 
114
  <div class="cards-grid dashboard-3col">
115
 
116
+ <!-- Row 1, Col 1: Risk Indicator -->
117
  <div class="card glass-panel engine-light-card">
118
  <h3>Risk Indicator</h3>
119
  <div class="engine-indicator" id="engine-light">
 
122
  </div>
123
  </div>
124
 
125
+ <!-- Row 1, Col 2: Market Prediction -->
 
 
 
 
 
 
 
 
 
126
  <div class="card glass-panel price-card">
127
  <h3>Market Prediction</h3>
128
  <div class="price-info">
129
+ <div class="price-row">
130
+ <span class="label">Current</span>
131
+ <span class="value" id="current-price">$0.00</span>
132
+ </div>
133
+ <div class="price-row highlight">
134
+ <span class="label">Predicted (Next Session)</span>
135
+ <span class="value" id="predicted-price">$0.00</span>
136
+ </div>
137
  </div>
138
  <div class="trend-badge" id="trend-label">UNKNOWN TREND</div>
139
  </div>
140
 
141
+ <!-- Col 3, spans rows 1–2: Recent Headlines -->
 
 
 
 
 
 
142
  <div class="card glass-panel headlines-card">
143
  <h3>Recent Headlines Analyzed</h3>
144
  <ul id="headlines-list" class="headlines-list"></ul>
145
+ <div class="headlines-scroll-hint">scroll for more</div>
146
+ </div>
147
+
148
+ <!-- Row 2, Col 1: Sentiment Analysis -->
149
+ <div class="card glass-panel sentiment-card">
150
+ <h3>Sentiment Analysis</h3>
151
+ <div class="sentiment-meter">
152
+ <div class="score-display">
153
+ <span id="sentiment-score">0.00</span>
154
+ </div>
155
+ <p class="sentiment-desc" id="sentiment-desc">Neutral Sentiment</p>
156
+ </div>
157
+ </div>
158
+
159
+ <!-- Row 2, Col 2: LLM Insights -->
160
+ <div class="card glass-panel llm-card">
161
+ <h3>LLM Insights</h3>
162
+ <div class="llm-info" id="llm-insights-container"
163
+ style="display:flex;flex-direction:column;gap:8px;margin-top:8px;">
164
+ <p class="text-muted">No LLM insights available.</p>
165
+ </div>
166
  </div>
167
 
168
  </div>