Skip to content

Commit af8003c

Browse files
authored
UI fit 100vh (#46)
* Further optimize prod image * update mobile layout
1 parent 7fa7219 commit af8003c

7 files changed

Lines changed: 426 additions & 23 deletions

File tree

web/src/App.css

Lines changed: 214 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
.app {
2-
min-height: 100vh;
2+
--table-fr: 0.58fr;
3+
--hand-fr: 0.42fr;
4+
height: 100%;
5+
min-height: 0;
36
display: grid;
4-
grid-template-rows: auto 1fr auto;
7+
grid-template-rows: auto minmax(0, var(--table-fr)) minmax(0, var(--hand-fr));
58
color: var(--ink-100);
69
animation: page-in 0.6s ease both;
10+
overflow: hidden;
711
}
812

913
.top-bar {
1014
display: flex;
1115
gap: 24px;
1216
align-items: center;
1317
justify-content: space-between;
14-
padding: 20px 32px;
18+
padding: clamp(12px, 2vh, 20px) clamp(18px, 3vw, 32px);
1519
border-bottom: 1px solid rgba(255, 236, 209, 0.18);
1620
background: linear-gradient(90deg, rgba(30, 20, 12, 0.9), rgba(44, 28, 18, 0.7));
1721
backdrop-filter: blur(6px);
@@ -132,14 +136,18 @@
132136
.table {
133137
display: grid;
134138
grid-template-columns: minmax(160px, 220px) minmax(0, 1fr) minmax(220px, 280px);
135-
gap: 20px;
136-
padding: 20px 24px 30px;
139+
gap: clamp(12px, 2vw, 20px);
140+
padding: clamp(12px, 2vh, 18px) clamp(16px, 2.4vw, 24px) clamp(12px, 2.4vh, 22px);
141+
min-height: 0;
142+
align-items: stretch;
143+
height: 100%;
137144
}
138145

139146
.rail {
140147
display: flex;
141148
flex-direction: column;
142149
gap: 16px;
150+
min-height: 0;
143151
}
144152

145153
.rail.left {
@@ -151,8 +159,8 @@
151159
}
152160

153161
.stack-card {
154-
width: 140px;
155-
height: 180px;
162+
width: clamp(110px, 12vw, 140px);
163+
height: clamp(150px, 18vh, 180px);
156164
border-radius: 18px;
157165
padding: 16px;
158166
display: flex;
@@ -194,10 +202,13 @@
194202
.table-surface {
195203
position: relative;
196204
border-radius: 28px;
197-
padding: 26px 32px;
205+
padding: clamp(14px, 2vh, 22px) clamp(18px, 2.4vw, 28px);
198206
background: linear-gradient(180deg, #b67c4d 0%, #c9935c 35%, #d7a36a 100%);
199207
box-shadow: inset 0 0 0 1px rgba(92, 55, 33, 0.4), var(--shadow-deep);
200208
overflow: hidden;
209+
display: grid;
210+
grid-template-rows: minmax(0, 1fr) auto minmax(0, 1fr);
211+
min-height: 0;
201212
}
202213

203214
.table-surface::before {
@@ -220,6 +231,7 @@
220231
display: grid;
221232
gap: 14px;
222233
z-index: 1;
234+
min-height: 0;
223235
}
224236

225237
.zone-label-row {
@@ -254,8 +266,8 @@
254266
}
255267

256268
.center-zone {
257-
margin: 20px 0;
258-
padding: 16px;
269+
margin: 12px 0;
270+
padding: 12px;
259271
border-radius: 18px;
260272
background: rgba(44, 24, 14, 0.15);
261273
border: 1px solid rgba(44, 24, 14, 0.2);
@@ -302,11 +314,12 @@
302314
border-radius: 20px;
303315
padding: 16px;
304316
border: 1px solid rgba(255, 221, 181, 0.2);
305-
min-height: 320px;
306317
display: flex;
307318
flex-direction: column;
308319
gap: 12px;
309320
box-shadow: var(--shadow-soft);
321+
min-height: 0;
322+
flex: 1;
310323
}
311324

312325
.panel-header {
@@ -326,8 +339,9 @@
326339
font-size: 13px;
327340
color: var(--ink-70);
328341
line-height: 1.4;
329-
max-height: 320px;
330342
overflow-y: auto;
343+
flex: 1;
344+
min-height: 0;
331345
}
332346

333347
.history-panel ul ul {
@@ -349,24 +363,27 @@
349363
}
350364

351365
.hand-area {
352-
padding: 18px 24px 24px;
366+
padding: clamp(12px, 2vh, 18px) clamp(16px, 2.4vw, 24px);
353367
background: linear-gradient(180deg, rgba(30, 20, 12, 0.85), rgba(18, 12, 8, 0.95));
354368
border-top: 1px solid rgba(255, 221, 181, 0.2);
355369
display: grid;
356-
gap: 18px;
370+
gap: 12px;
371+
height: 100%;
372+
overflow: hidden;
373+
min-height: 0;
357374
}
358375

359376
.action-prompt {
360377
display: flex;
361378
justify-content: space-between;
362379
align-items: center;
363380
gap: 20px;
364-
padding: 16px 20px;
381+
padding: 12px 16px;
365382
border-radius: 18px;
366383
background: rgba(255, 221, 181, 0.12);
367384
border: 1px solid rgba(255, 221, 181, 0.2);
368385
width: 100%;
369-
max-width: 960px;
386+
max-width: 900px;
370387
margin: 0 auto;
371388
}
372389

@@ -394,7 +411,9 @@
394411
.action-choice-row {
395412
display: flex;
396413
gap: 10px;
397-
flex-wrap: wrap;
414+
flex-wrap: nowrap;
415+
overflow-x: auto;
416+
padding-bottom: 4px;
398417
}
399418

400419
.action-button {
@@ -430,12 +449,14 @@
430449
display: flex;
431450
gap: 12px;
432451
justify-content: center;
433-
flex-wrap: wrap;
452+
flex-wrap: nowrap;
453+
overflow-x: auto;
454+
padding-bottom: 6px;
434455
}
435456

436457
.card-tile {
437-
width: 110px;
438-
height: 150px;
458+
width: clamp(90px, 8.8vw, 110px);
459+
height: clamp(120px, 12.5vh, 150px);
439460
border-radius: 16px;
440461
background: #f8f1e6;
441462
color: #22160f;
@@ -740,6 +761,11 @@ button:disabled {
740761
@media (max-width: 980px) {
741762
.table {
742763
grid-template-columns: 1fr;
764+
grid-template-rows: auto minmax(0, 1fr) auto;
765+
}
766+
767+
.table-surface {
768+
height: 100%;
743769
}
744770

745771
.rail.left,
@@ -754,17 +780,183 @@ button:disabled {
754780
}
755781

756782
@media (max-width: 720px) {
783+
.app {
784+
--table-fr: 0.5fr;
785+
--hand-fr: 0.5fr;
786+
}
787+
757788
.top-bar {
758-
flex-direction: column;
759-
align-items: flex-start;
789+
padding: 10px 14px;
790+
gap: 8px;
791+
flex-wrap: wrap;
792+
justify-content: flex-start;
793+
}
794+
795+
.brand-mark {
796+
font-size: 22px;
797+
}
798+
799+
.brand-sub {
800+
font-size: 10px;
801+
letter-spacing: 1.4px;
802+
display: none;
803+
}
804+
805+
.scoreboard {
806+
flex-wrap: nowrap;
807+
gap: 6px;
808+
}
809+
810+
.score-chip {
811+
padding: 6px 10px;
812+
}
813+
814+
.chip-label {
815+
font-size: 9px;
816+
letter-spacing: 1.2px;
817+
}
818+
819+
.chip-score {
820+
font-size: 12px;
821+
}
822+
823+
.controls {
824+
flex-wrap: nowrap;
825+
justify-content: flex-start;
826+
gap: 8px;
827+
overflow-x: auto;
828+
padding-bottom: 4px;
829+
}
830+
831+
.ai-select {
832+
padding: 4px 8px;
833+
font-size: 10px;
834+
flex: 0 0 auto;
835+
}
836+
837+
.ai-select select {
838+
padding: 4px 10px;
839+
font-size: 10px;
840+
}
841+
842+
button {
843+
padding: 8px 12px;
844+
font-size: 11px;
845+
letter-spacing: 1.2px;
846+
}
847+
848+
.table {
849+
gap: 10px;
850+
padding: 10px 12px 12px;
851+
}
852+
853+
.rail.left,
854+
.rail.right {
855+
gap: 10px;
856+
}
857+
858+
.stack-card {
859+
width: min(46vw, 160px);
860+
height: clamp(96px, 14vh, 120px);
861+
}
862+
863+
.table-surface {
864+
padding: 10px;
865+
border-radius: 18px;
866+
}
867+
868+
.zone {
869+
gap: 10px;
870+
}
871+
872+
.zone-label {
873+
font-size: 10px;
874+
letter-spacing: 1.4px;
875+
}
876+
877+
.zone-chip {
878+
padding: 4px 10px;
879+
font-size: 10px;
880+
letter-spacing: 1px;
881+
}
882+
883+
.card-row {
884+
flex-wrap: nowrap;
885+
overflow-x: auto;
886+
padding-bottom: 4px;
887+
gap: 10px;
888+
}
889+
890+
.center-zone {
891+
margin: 8px 0;
892+
padding: 8px;
893+
}
894+
895+
.phase-pill {
896+
font-size: 11px;
897+
}
898+
899+
.hint {
900+
font-size: 10px;
901+
padding: 4px 8px;
902+
}
903+
904+
.history-panel {
905+
padding: 10px 12px;
906+
border-radius: 14px;
907+
max-height: none;
908+
}
909+
910+
.history-panel ul {
911+
display: none;
912+
}
913+
914+
.hand-area {
915+
gap: 6px;
916+
padding: 8px 12px;
760917
}
761918

762919
.action-prompt {
763920
flex-direction: column;
764921
align-items: flex-start;
922+
padding: 8px 10px;
923+
gap: 10px;
924+
}
925+
926+
.action-buttons {
927+
width: 100%;
928+
justify-content: space-between;
765929
}
766930

767931
.hand {
768932
justify-content: flex-start;
769933
}
934+
935+
.action-title {
936+
font-size: 14px;
937+
}
938+
939+
.action-sub {
940+
font-size: 12px;
941+
}
942+
943+
.action-choice-row,
944+
.hand {
945+
gap: 8px;
946+
padding-bottom: 4px;
947+
}
948+
949+
.card-tile {
950+
width: 68px;
951+
height: 96px;
952+
}
953+
954+
.card-rank {
955+
font-size: 16px;
956+
}
957+
958+
.card-tag {
959+
font-size: 9px;
960+
letter-spacing: 1.2px;
961+
}
770962
}

0 commit comments

Comments
 (0)