esp32tool 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/css/style.css CHANGED
@@ -5,7 +5,7 @@
5
5
  .header {
6
6
  box-sizing: border-box;
7
7
  font-size: 16px;
8
- height: 85px;
8
+ min-height: 85px;
9
9
  padding: 15px 70px;
10
10
  position: fixed;
11
11
  width: 100%;
@@ -13,18 +13,18 @@
13
13
  margin: 0;
14
14
  border-bottom: 5px solid #00a7e9;
15
15
  display: flex;
16
+ flex-direction: column;
16
17
  justify-content: flex-start;
17
- align-items: center;
18
+ align-items: flex-start;
18
19
  top: 0;
19
- transition: transform 0.3s ease-in-out;
20
+ /* Auto-hide feature disabled - header stays visible at all times */
21
+ /* transition: transform 0.3s ease-in-out; */
20
22
  overflow-x: auto;
21
23
  overflow-y: hidden;
22
24
  -webkit-overflow-scrolling: touch;
23
25
  }
24
26
 
25
- .header-hidden {
26
- transform: translateY(-100%);
27
- }
27
+ /* .header-hidden class removed - auto-hide feature disabled */
28
28
 
29
29
  .header-content {
30
30
  display: flex;
@@ -32,6 +32,11 @@
32
32
  gap: 10px;
33
33
  flex-wrap: nowrap;
34
34
  white-space: nowrap;
35
+ width: 100%;
36
+ }
37
+
38
+ .header-content.advanced-row {
39
+ margin-top: 10px;
35
40
  }
36
41
 
37
42
  .header-content > label {
@@ -91,6 +96,44 @@ body {
91
96
  margin: 0;
92
97
  }
93
98
 
99
+ /* Mobile-specific optimizations */
100
+ body.mobile-device {
101
+ -webkit-tap-highlight-color: rgba(0, 167, 233, 0.3);
102
+ -webkit-touch-callout: none;
103
+ -webkit-user-select: none;
104
+ user-select: none;
105
+ }
106
+
107
+ body.mobile-device input,
108
+ body.mobile-device textarea,
109
+ body.mobile-device select {
110
+ -webkit-user-select: text;
111
+ user-select: text;
112
+ }
113
+
114
+ /* Re-enable text selection for log/file viewers and code blocks */
115
+ body.mobile-device #log,
116
+ body.mobile-device .log-viewer,
117
+ body.mobile-device .file-viewer,
118
+ body.mobile-device .file-viewer-body,
119
+ body.mobile-device .code-block,
120
+ body.mobile-device pre,
121
+ body.mobile-device code,
122
+ body.mobile-device .console-container {
123
+ -webkit-user-select: text;
124
+ user-select: text;
125
+ }
126
+
127
+ /* Disable hover effects on mobile - reset all hover properties */
128
+ body.no-hover *:hover {
129
+ background-color: inherit !important;
130
+ color: inherit !important;
131
+ border-color: inherit !important;
132
+ opacity: inherit !important;
133
+ transform: none !important;
134
+ box-shadow: inherit !important;
135
+ }
136
+
94
137
  p {
95
138
  margin: 0;
96
139
  }
@@ -126,14 +169,47 @@ div.clear {
126
169
  transition: padding-top 0.3s ease-in-out;
127
170
  }
128
171
 
129
- .main.no-header-padding {
130
- padding-top: 0;
172
+ .main.advanced-active {
173
+ padding-top: 140px;
131
174
  }
132
175
 
176
+ /* .main.no-header-padding removed - auto-hide feature disabled */
177
+
133
178
  .hidden {
134
179
  display: none;
135
180
  }
136
181
 
182
+ /* Console Container */
183
+ .console-container {
184
+ height: 500px;
185
+ overflow: hidden;
186
+ transition: height 0.3s ease-in-out, visibility 0.3s ease-in-out;
187
+ margin: 0;
188
+ padding: 0;
189
+ visibility: visible;
190
+ }
191
+
192
+ .console-container.hidden {
193
+ height: 0;
194
+ visibility: hidden;
195
+ max-height: 0;
196
+ }
197
+
198
+ /* Mobile console optimization */
199
+ @media (max-width: 768px) {
200
+ .console-container {
201
+ height: 350px;
202
+ font-size: 13px;
203
+ }
204
+ }
205
+
206
+ @media (max-width: 480px) {
207
+ .console-container {
208
+ height: 300px;
209
+ font-size: 12px;
210
+ }
211
+ }
212
+
137
213
  .notSupported {
138
214
  padding: 1em;
139
215
  margin-top: 1em;
@@ -609,12 +685,14 @@ div.clear {
609
685
 
610
686
  /* LittleFS Manager Styles */
611
687
  .littlefs-manager {
612
- width: 900px;
688
+ max-width: 900px;
689
+ width: 100%;
613
690
  margin: 30px auto;
614
691
  padding: 25px;
615
692
  border: 2px solid #71ae1e;
616
693
  border-radius: 10px;
617
694
  background-color: rgba(113, 174, 30, 0.05);
695
+ box-sizing: border-box;
618
696
  }
619
697
 
620
698
  .littlefs-manager h3 {
@@ -730,9 +808,11 @@ div.clear {
730
808
 
731
809
  .littlefs-file-upload input[type="file"] {
732
810
  flex: 1;
733
- padding: 5px;
811
+ padding: 8px;
734
812
  border: 2px solid #ccc;
735
813
  border-radius: 8px;
814
+ font-size: 14px;
815
+ min-height: 38px;
736
816
  }
737
817
 
738
818
  .littlefs-file-upload button {
@@ -1053,66 +1133,311 @@ div.clear {
1053
1133
 
1054
1134
  /* Mobile Optimizations */
1055
1135
  @media (max-width: 768px) {
1136
+ /* Larger touch targets and better readability */
1137
+ body {
1138
+ font-size: 13px;
1139
+ -webkit-text-size-adjust: 100%;
1140
+ }
1141
+
1056
1142
  .header {
1057
1143
  height: auto;
1058
- min-height: 60px;
1059
- padding: 10px 15px;
1144
+ min-height: auto;
1145
+ padding: 6px 8px;
1146
+ border-bottom: 2px solid #00a7e9;
1060
1147
  }
1061
1148
 
1062
1149
  .header-content {
1063
- gap: 8px;
1150
+ gap: 5px;
1064
1151
  width: 100%;
1065
- overflow-x: auto;
1066
- -webkit-overflow-scrolling: touch;
1067
- flex-wrap: nowrap;
1152
+ display: flex;
1153
+ flex-wrap: wrap;
1154
+ align-items: center;
1155
+ }
1156
+
1157
+ /* Row 1: Connect, Baud + Select */
1158
+ .header-content > button#butConnect {
1159
+ order: 1;
1160
+ }
1161
+
1162
+ .header-content > label[for="baudRate"] {
1163
+ order: 2;
1164
+ }
1165
+
1166
+ .header-content > select#baudRate {
1167
+ order: 3;
1168
+ flex: 1;
1169
+ min-width: 120px;
1170
+ }
1171
+
1172
+ /* Zeile 2: Show Log, Show Log Switch, Clear, Dark Label, Dark Switch */
1173
+ .header-content > label[for="showlog"] {
1174
+ order: 10;
1175
+ flex-basis: 100%;
1176
+ }
1177
+
1178
+ .header-content > label[for="showlog"] + .onoffswitch {
1179
+ order: 11;
1180
+ }
1181
+
1182
+ .header-content > .log-controls {
1183
+ order: 12;
1184
+ }
1185
+
1186
+ .header-content > label[for="darkmode"] {
1187
+ order: 13;
1188
+ }
1189
+
1190
+ .header-content > label[for="darkmode"] + .onoffswitch {
1191
+ order: 14;
1192
+ }
1193
+
1194
+ /* Zeile 3: Advanced Label + Switch + Autoscroll (eigene Zeile) */
1195
+ .header-content > label[for="advanced"] {
1196
+ order: 20;
1197
+ flex-basis: 100%;
1198
+ width: auto;
1199
+ }
1200
+
1201
+ .header-content > label[for="advanced"] + .onoffswitch {
1202
+ order: 21;
1203
+ }
1204
+
1205
+ /* Autoscroll direkt nach Advanced Switch in derselben Zeile */
1206
+ .header-content > label[for="autoscroll"] {
1207
+ order: 22;
1208
+ }
1209
+
1210
+ .header-content > label[for="autoscroll"] + .onoffswitch {
1211
+ order: 23;
1212
+ }
1213
+
1214
+ /* Advanced Row - separate container for advanced options */
1215
+ .header-content.advanced-row {
1216
+ margin-top: 6px;
1217
+ display: flex;
1218
+ flex-wrap: wrap;
1219
+ gap: 5px;
1220
+ align-items: center;
1221
+ }
1222
+
1223
+ /* Zeile 4 (Advanced): Console + Debug in einer Zeile */
1224
+ .header-content.advanced-row > label[for="console"] {
1225
+ order: 1;
1226
+ }
1227
+
1228
+ .header-content.advanced-row > label[for="console"] + .onoffswitch {
1229
+ order: 2;
1230
+ }
1231
+
1232
+ .header-content.advanced-row > label[for="debugmode"] {
1233
+ order: 3;
1234
+ }
1235
+
1236
+ .header-content.advanced-row > label[for="debugmode"] + .onoffswitch {
1237
+ order: 4;
1238
+ }
1239
+
1240
+ /* Zeile 5 (Advanced): Chunk + Select (volle Breite) */
1241
+ .header-content.advanced-row > label[for="chunkSize"] {
1242
+ order: 10;
1243
+ flex-basis: 100%;
1244
+ }
1245
+
1246
+ .header-content.advanced-row > select#chunkSize {
1247
+ order: 11;
1248
+ flex: 1;
1249
+ }
1250
+
1251
+ /* Zeile 6 (Advanced): Block + Select (volle Breite) */
1252
+ .header-content.advanced-row > label[for="blockSize"] {
1253
+ order: 20;
1254
+ flex-basis: 100%;
1255
+ }
1256
+
1257
+ .header-content.advanced-row > select#blockSize {
1258
+ order: 21;
1259
+ flex: 1;
1260
+ }
1261
+
1262
+ /* Zeile 7 (Advanced): MaxInFlight + Select (volle Breite) */
1263
+ .header-content.advanced-row > label[for="maxInFlight"] {
1264
+ order: 30;
1265
+ flex-basis: 100%;
1266
+ }
1267
+
1268
+ .header-content.advanced-row > select#maxInFlight {
1269
+ order: 31;
1270
+ flex: 1;
1068
1271
  }
1069
1272
 
1070
1273
  .header-content > label {
1071
- font-size: 12px;
1072
- margin-left: 3px;
1274
+ font-size: 11px;
1275
+ font-weight: 600;
1276
+ margin-left: 0;
1073
1277
  white-space: nowrap;
1278
+ min-width: auto;
1074
1279
  }
1075
1280
 
1281
+ /* Compact buttons for mobile */
1282
+ .header button {
1283
+ height: 32px;
1284
+ min-width: 32px;
1285
+ font-size: 13px;
1286
+ padding: 0 10px;
1287
+ border-width: 2px;
1288
+ touch-action: manipulation;
1289
+ }
1290
+
1291
+ .header select {
1292
+ height: 32px;
1293
+ font-size: 13px;
1294
+ min-width: 90px;
1295
+ max-width: 160px;
1296
+ padding: 4px;
1297
+ border: 2px solid #ccc;
1298
+ border-radius: 4px;
1299
+ }
1300
+
1301
+ /* Compact on/off switches */
1076
1302
  .onoffswitch {
1077
- width: 50px;
1303
+ width: 44px;
1304
+ height: 22px;
1305
+ margin: 0 3px;
1306
+ }
1307
+
1308
+ .onoffswitch-label {
1309
+ border-radius: 11px;
1310
+ border-width: 2px;
1311
+ }
1312
+
1313
+ .onoffswitch-inner:before,
1314
+ .onoffswitch-inner:after {
1315
+ height: 22px;
1316
+ line-height: 22px;
1317
+ font-size: 10px;
1318
+ font-weight: 700;
1319
+ }
1320
+
1321
+ .onoffswitch-switch {
1322
+ width: 16px;
1323
+ height: 16px;
1324
+ margin: 1px;
1325
+ border-radius: 8px;
1078
1326
  }
1079
1327
 
1080
- .main {
1081
- padding-top: 80px;
1328
+ .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
1329
+ right: 1px;
1082
1330
  }
1083
1331
 
1332
+ /* Adjust main content padding - now handled dynamically by JavaScript */
1333
+ /* Removed fixed padding-top values */
1334
+
1335
+ /* Compact commands section */
1084
1336
  #commands {
1085
1337
  min-width: unset;
1086
- padding: 0 15px;
1338
+ padding: 0 4px;
1087
1339
  }
1088
1340
 
1341
+ /* Card layout for file uploads on mobile - 2-COLUMN GRID wie Partition Table */
1089
1342
  #commands .upload {
1090
1343
  max-width: 100%;
1091
- padding-left: 0;
1344
+ padding: 5px;
1345
+ margin: 3px 0;
1346
+ border: 1px solid #ccc;
1347
+ border-radius: 3px;
1348
+ background-color: rgba(0, 0, 0, 0.02);
1349
+ display: flex;
1092
1350
  flex-wrap: wrap;
1093
- gap: 8px;
1351
+ gap: 4px;
1352
+ align-items: center;
1094
1353
  }
1095
1354
 
1096
- #commands .upload label {
1097
- width: 100%;
1355
+ #commands .upload label:first-child {
1356
+ display: flex;
1357
+ align-items: center;
1358
+ gap: 4px;
1359
+ font-size: 8px;
1360
+ font-weight: 600;
1361
+ text-transform: uppercase;
1362
+ color: #666;
1363
+ white-space: nowrap;
1364
+ flex-shrink: 0;
1365
+ }
1366
+
1367
+ #commands .upload .offset {
1368
+ width: 70px;
1369
+ height: 26px;
1370
+ font-size: 11px;
1371
+ padding: 2px 4px;
1372
+ border: 1px solid #ccc;
1373
+ border-radius: 3px;
1374
+ box-sizing: border-box;
1098
1375
  }
1099
1376
 
1100
1377
  #commands .upload .firmware {
1101
- width: 100%;
1102
- margin-left: 0;
1103
- margin-right: 0;
1378
+ flex: 1;
1379
+ min-width: 140px;
1380
+ height: 26px;
1381
+ margin: 0;
1382
+ display: flex;
1104
1383
  justify-content: center;
1384
+ align-items: center;
1385
+ font-size: 10px;
1386
+ font-weight: 600;
1387
+ padding: 0 8px;
1388
+ overflow: hidden;
1389
+ text-overflow: ellipsis;
1390
+ white-space: nowrap;
1391
+ box-sizing: border-box;
1392
+ }
1393
+
1394
+ #commands .upload .firmware input[type="file"] {
1395
+ display: none;
1396
+ }
1397
+
1398
+ #commands .upload .firmware svg {
1399
+ width: 11px;
1400
+ height: 11px;
1401
+ flex-shrink: 0;
1402
+ margin-right: 3px;
1403
+ }
1404
+
1405
+ #commands .upload .firmware span {
1406
+ overflow: hidden;
1407
+ text-overflow: ellipsis;
1408
+ white-space: nowrap;
1409
+ }
1410
+
1411
+ #commands .upload .progress-bar {
1412
+ width: 100%;
1413
+ margin: 0;
1414
+ height: 18px;
1105
1415
  }
1106
1416
 
1417
+ /* Action buttons as cards */
1107
1418
  #commands .buttons {
1108
1419
  width: 100%;
1109
- flex-wrap: wrap;
1420
+ display: grid;
1421
+ grid-template-columns: 1fr 1fr;
1422
+ gap: 4px;
1423
+ margin-top: 4px;
1424
+ }
1425
+
1426
+ #commands .buttons button {
1427
+ width: 100%;
1428
+ min-width: unset;
1429
+ height: 34px;
1430
+ font-size: 13px;
1431
+ font-weight: 700;
1432
+ border-radius: 3px;
1110
1433
  }
1111
1434
 
1112
1435
  #commands .partition-table,
1113
1436
  #commands .read-flash {
1114
1437
  width: 100%;
1115
1438
  padding: 15px 0;
1439
+ overflow-x: auto;
1440
+ -webkit-overflow-scrolling: touch;
1116
1441
  }
1117
1442
 
1118
1443
  #commands .partition-table .progress-bar,
@@ -1120,73 +1445,455 @@ div.clear {
1120
1445
  width: 100%;
1121
1446
  }
1122
1447
 
1448
+ /* Partition table scrollable on mobile */
1449
+ .partition-table-display {
1450
+ min-width: 500px;
1451
+ font-size: 12px;
1452
+ }
1453
+
1454
+ .partition-table-display th,
1455
+ .partition-table-display td {
1456
+ padding: 6px 8px;
1457
+ white-space: nowrap;
1458
+ }
1459
+
1460
+ .partition-download-btn {
1461
+ padding: 4px 10px;
1462
+ font-size: 12px;
1463
+ }
1464
+
1465
+ /* Card layout for partition table on mobile */
1466
+ .partition-table-display {
1467
+ display: block;
1468
+ min-width: 100%;
1469
+ border: none;
1470
+ }
1471
+
1472
+ .partition-table-display thead {
1473
+ display: none;
1474
+ }
1475
+
1476
+ .partition-table-display tbody {
1477
+ display: block;
1478
+ }
1479
+
1480
+ .partition-table-display tr {
1481
+ display: grid;
1482
+ grid-template-columns: 1fr 1fr;
1483
+ gap: 4px;
1484
+ margin-bottom: 4px;
1485
+ padding: 5px;
1486
+ border: 1px solid #ccc;
1487
+ border-radius: 3px;
1488
+ background-color: rgba(0, 0, 0, 0.02);
1489
+ }
1490
+
1491
+ .partition-table-display td {
1492
+ display: flex;
1493
+ flex-direction: column;
1494
+ padding: 2px 0;
1495
+ border: none;
1496
+ white-space: normal;
1497
+ font-size: 11px;
1498
+ }
1499
+
1500
+ .partition-table-display td::before {
1501
+ content: attr(data-label);
1502
+ font-weight: 600;
1503
+ font-size: 8px;
1504
+ text-transform: uppercase;
1505
+ color: #666;
1506
+ margin-bottom: 1px;
1507
+ }
1508
+
1509
+ /* Name spans full width */
1510
+ .partition-table-display td:nth-child(1) {
1511
+ grid-column: 1 / -1;
1512
+ font-size: 12px;
1513
+ font-weight: 700;
1514
+ padding-bottom: 4px;
1515
+ border-bottom: 1px solid #ddd;
1516
+ }
1517
+
1518
+ /* Action buttons span full width */
1519
+ .partition-table-display td:nth-child(6) {
1520
+ grid-column: 1 / -1;
1521
+ flex-direction: row;
1522
+ gap: 4px;
1523
+ padding-top: 4px;
1524
+ }
1525
+
1526
+ .partition-table-display td:nth-child(6)::before {
1527
+ display: none;
1528
+ }
1529
+
1530
+ .partition-download-btn,
1531
+ .littlefs-fs-button {
1532
+ flex: 1;
1533
+ padding: 5px 8px;
1534
+ font-size: 11px;
1535
+ white-space: nowrap;
1536
+ }
1537
+
1538
+ /* Read Flash as 2-column grid card wie Partition Table */
1539
+ #commands .read-flash {
1540
+ margin: 3px 0;
1541
+ padding: 5px;
1542
+ border: 1px solid #ccc;
1543
+ border-radius: 3px;
1544
+ background-color: rgba(0, 0, 0, 0.02);
1545
+ }
1546
+
1123
1547
  #commands .read-flash-inputs {
1124
- flex-wrap: wrap;
1548
+ display: grid;
1549
+ grid-template-columns: 1fr 1fr;
1550
+ gap: 4px;
1125
1551
  width: 100%;
1126
1552
  }
1127
1553
 
1554
+ #commands .read-flash label {
1555
+ font-size: 8px;
1556
+ font-weight: 600;
1557
+ text-transform: uppercase;
1558
+ color: #666;
1559
+ display: flex;
1560
+ flex-direction: column;
1561
+ gap: 2px;
1562
+ }
1563
+
1128
1564
  #commands .read-flash input {
1129
- width: 80px;
1565
+ width: 100%;
1566
+ height: 26px;
1567
+ font-size: 11px;
1568
+ padding: 2px 4px;
1569
+ border: 1px solid #ccc;
1570
+ border-radius: 3px;
1571
+ }
1572
+
1573
+ #commands .read-flash button {
1574
+ grid-column: 1 / -1;
1575
+ height: 34px;
1576
+ font-size: 13px;
1577
+ font-weight: 600;
1578
+ padding: 0 12px;
1579
+ width: 100%;
1580
+ margin-top: 4px;
1130
1581
  }
1131
1582
 
1583
+ #commands .read-flash .progress-bar {
1584
+ grid-column: 1 / -1;
1585
+ height: 18px;
1586
+ }
1587
+
1588
+ #commands .partition-table button {
1589
+ height: 34px;
1590
+ font-size: 13px;
1591
+ font-weight: 600;
1592
+ padding: 0 12px;
1593
+ width: 100%;
1594
+ max-width: 100%;
1595
+ margin-top: 4px;
1596
+ }
1597
+
1598
+ #commands .partition-table .progress-bar {
1599
+ height: 18px;
1600
+ }
1601
+
1602
+ /* Partition table section as card */
1603
+ #commands .partition-table {
1604
+ width: 100%;
1605
+ padding: 4px;
1606
+ margin: 3px 0;
1607
+ border: 1px solid #ccc;
1608
+ border-radius: 3px;
1609
+ background-color: rgba(0, 0, 0, 0.02);
1610
+ }
1611
+
1612
+ /* Larger, more readable log */
1132
1613
  #log {
1133
- padding: 0 15px;
1134
- border: 10px solid #000;
1135
- font-size: 14px;
1614
+ padding: 10px;
1615
+ border: 6px solid #000;
1616
+ font-size: 13px;
1617
+ line-height: 1.5;
1136
1618
  }
1137
1619
 
1138
1620
  .footer {
1139
- padding: 10px 15px;
1621
+ padding: 10px;
1622
+ font-size: 12px;
1140
1623
  }
1141
1624
 
1625
+ /* Better filesystem manager on mobile - 2-COLUMN GRID */
1142
1626
  .littlefs-manager {
1143
1627
  width: 100%;
1144
- margin: 15px auto;
1145
- padding: 15px;
1628
+ max-width: 100%;
1629
+ margin: 3px 0;
1630
+ padding: 5px;
1631
+ border-radius: 3px;
1632
+ border-width: 1px;
1633
+ box-sizing: border-box;
1634
+ overflow: hidden;
1635
+ }
1636
+
1637
+ .littlefs-manager h3 {
1638
+ font-size: 14px;
1639
+ margin: 0 0 6px 0;
1640
+ overflow: hidden;
1641
+ text-overflow: ellipsis;
1642
+ white-space: nowrap;
1643
+ }
1644
+
1645
+ /* Info section as 2-column grid */
1646
+ .littlefs-info {
1647
+ padding: 5px;
1648
+ margin-bottom: 4px;
1649
+ border-radius: 3px;
1650
+ display: grid;
1651
+ grid-template-columns: 1fr 1fr;
1652
+ gap: 4px;
1653
+ overflow: hidden;
1654
+ }
1655
+
1656
+ .littlefs-partition-info {
1657
+ grid-column: 1 / -1;
1658
+ font-size: 10px;
1659
+ margin-bottom: 4px;
1660
+ padding-bottom: 4px;
1661
+ border-bottom: 1px solid #ddd;
1662
+ overflow: hidden;
1663
+ text-overflow: ellipsis;
1664
+ white-space: nowrap;
1665
+ }
1666
+
1667
+ .littlefs-size {
1668
+ display: inline;
1669
+ margin-left: 4px;
1670
+ font-size: 9px;
1671
+ }
1672
+
1673
+ .littlefs-usage {
1674
+ grid-column: 1 / -1;
1675
+ overflow: hidden;
1676
+ }
1677
+
1678
+ .usage-bar {
1679
+ height: 14px;
1680
+ margin-bottom: 4px;
1681
+ width: 100%;
1682
+ overflow: hidden;
1683
+ }
1684
+
1685
+ .usage-text {
1686
+ font-size: 9px;
1687
+ display: grid;
1688
+ grid-template-columns: 1fr auto;
1689
+ gap: 4px;
1690
+ align-items: center;
1691
+ overflow: hidden;
1692
+ }
1693
+
1694
+ .usage-text > span:first-child {
1695
+ overflow: hidden;
1696
+ text-overflow: ellipsis;
1697
+ white-space: nowrap;
1146
1698
  }
1147
1699
 
1700
+ .disk-version {
1701
+ font-size: 9px;
1702
+ padding: 1px 4px;
1703
+ flex-shrink: 0;
1704
+ }
1705
+
1706
+ /* Controls as 2x2 grid */
1148
1707
  .littlefs-controls {
1149
- flex-direction: column;
1708
+ display: grid;
1709
+ grid-template-columns: 1fr 1fr;
1710
+ gap: 4px;
1711
+ margin-bottom: 4px;
1150
1712
  }
1151
1713
 
1152
1714
  .littlefs-controls button {
1153
1715
  width: 100%;
1716
+ height: 30px;
1717
+ font-size: 11px;
1718
+ padding: 0 6px;
1719
+ }
1720
+
1721
+ /* Breadcrumb as card */
1722
+ .littlefs-breadcrumb {
1723
+ padding: 4px;
1724
+ margin-bottom: 4px;
1725
+ gap: 4px;
1726
+ border-radius: 3px;
1727
+ display: flex;
1728
+ align-items: center;
1154
1729
  }
1155
1730
 
1731
+ .littlefs-breadcrumb button {
1732
+ height: 26px;
1733
+ font-size: 11px;
1734
+ padding: 0 8px;
1735
+ flex-shrink: 0;
1736
+ }
1737
+
1738
+ .littlefs-breadcrumb span {
1739
+ font-size: 10px;
1740
+ flex: 1;
1741
+ overflow: hidden;
1742
+ text-overflow: ellipsis;
1743
+ white-space: nowrap;
1744
+ }
1745
+
1746
+ /* File upload as 2-column grid */
1156
1747
  .littlefs-file-upload {
1157
- flex-direction: column;
1748
+ display: grid;
1749
+ grid-template-columns: 1fr 1fr;
1750
+ gap: 4px;
1751
+ margin-bottom: 4px;
1752
+ padding: 5px;
1753
+ border: 1px solid #ccc;
1754
+ border-radius: 3px;
1755
+ background-color: rgba(0, 0, 0, 0.02);
1756
+ box-sizing: border-box;
1757
+ width: 100%;
1758
+ overflow: hidden;
1759
+ }
1760
+
1761
+ .littlefs-file-upload input[type="file"] {
1762
+ grid-column: 1 / -1;
1763
+ width: 100%;
1764
+ height: 36px;
1765
+ font-size: 13px;
1766
+ box-sizing: border-box;
1767
+ overflow: hidden;
1768
+ text-overflow: ellipsis;
1769
+ white-space: nowrap;
1770
+ padding: 8px;
1771
+ border: 2px solid #ccc;
1158
1772
  }
1159
1773
 
1160
- .littlefs-file-upload input[type="file"],
1161
1774
  .littlefs-file-upload button {
1162
1775
  width: 100%;
1776
+ height: 34px;
1777
+ font-size: 13px;
1778
+ box-sizing: border-box;
1779
+ overflow: hidden;
1780
+ text-overflow: ellipsis;
1781
+ white-space: nowrap;
1782
+ }
1783
+
1784
+ /* File table as 2-column grid cards */
1785
+ .littlefs-files {
1786
+ max-height: 250px;
1787
+ border: none;
1788
+ overflow-x: hidden;
1789
+ overflow-y: auto;
1163
1790
  }
1164
1791
 
1165
1792
  .file-table {
1166
- font-size: 13px;
1793
+ display: block;
1794
+ width: 100%;
1795
+ }
1796
+
1797
+ .file-table thead {
1798
+ display: none;
1799
+ }
1800
+
1801
+ .file-table tbody {
1802
+ display: block;
1803
+ width: 100%;
1804
+ }
1805
+
1806
+ .file-table tr {
1807
+ display: grid;
1808
+ grid-template-columns: 1fr 1fr;
1809
+ gap: 4px;
1810
+ margin-bottom: 4px;
1811
+ padding: 5px;
1812
+ border: 1px solid #ccc;
1813
+ border-radius: 3px;
1814
+ background-color: rgba(0, 0, 0, 0.02);
1815
+ box-sizing: border-box;
1816
+ width: 100%;
1167
1817
  }
1168
1818
 
1169
- .file-table th,
1170
1819
  .file-table td {
1171
- padding: 6px 8px;
1820
+ display: flex;
1821
+ flex-direction: column;
1822
+ padding: 2px 0;
1823
+ border: none;
1824
+ font-size: 10px;
1825
+ overflow: hidden;
1826
+ min-width: 0;
1827
+ }
1828
+
1829
+ .file-table td::before {
1830
+ content: attr(data-label);
1831
+ font-weight: 600;
1832
+ font-size: 8px;
1833
+ text-transform: uppercase;
1834
+ color: #666;
1835
+ margin-bottom: 1px;
1836
+ flex-shrink: 0;
1837
+ }
1838
+
1839
+ .file-table td > * {
1840
+ overflow: hidden;
1841
+ text-overflow: ellipsis;
1842
+ white-space: nowrap;
1843
+ }
1844
+
1845
+ .file-table td:first-child {
1846
+ grid-column: 1 / -1;
1847
+ font-size: 12px;
1848
+ font-weight: 700;
1849
+ padding-bottom: 4px;
1850
+ border-bottom: 1px solid #ddd;
1851
+ margin-bottom: 3px;
1852
+ }
1853
+
1854
+ .file-table td:first-child::before {
1855
+ display: none;
1856
+ }
1857
+
1858
+ .file-table td:last-child {
1859
+ grid-column: 1 / -1;
1860
+ overflow: visible;
1172
1861
  }
1173
1862
 
1174
1863
  .file-actions {
1175
- flex-direction: column;
1864
+ display: flex;
1865
+ flex-direction: row;
1866
+ gap: 3px;
1867
+ margin-top: 4px;
1868
+ overflow: visible;
1176
1869
  }
1177
1870
 
1178
1871
  .file-actions button {
1179
- width: 100%;
1872
+ flex: 1;
1873
+ height: 28px;
1874
+ font-size: 10px;
1875
+ padding: 0 5px;
1876
+ min-width: 0;
1877
+ overflow: hidden;
1878
+ text-overflow: ellipsis;
1879
+ white-space: nowrap;
1180
1880
  }
1181
1881
 
1882
+ /* Better modals on mobile */
1182
1883
  .modal-content {
1183
- padding: 25px;
1184
- max-width: 90%;
1884
+ padding: 16px;
1885
+ max-width: 94%;
1886
+ }
1887
+
1888
+ .modal-button {
1889
+ height: 40px;
1890
+ font-size: 16px;
1891
+ padding: 0 20px;
1185
1892
  }
1186
1893
 
1187
1894
  .file-viewer-content {
1188
- width: 95vw;
1189
- max-height: 95vh;
1895
+ width: 96vw;
1896
+ max-height: 96vh;
1190
1897
  }
1191
1898
 
1192
1899
  .file-viewer-header,
@@ -1194,66 +1901,359 @@ div.clear {
1194
1901
  .file-viewer-tabs,
1195
1902
  .file-viewer-body,
1196
1903
  .file-viewer-footer {
1197
- padding-left: 15px;
1198
- padding-right: 15px;
1904
+ padding-left: 12px;
1905
+ padding-right: 12px;
1199
1906
  }
1200
1907
 
1201
1908
  .file-viewer-body pre {
1202
- font-size: 11px;
1909
+ font-size: 10px;
1203
1910
  }
1204
1911
 
1205
1912
  .hex-bytes {
1206
- min-width: 250px;
1913
+ min-width: 220px;
1207
1914
  }
1208
1915
  }
1209
1916
 
1210
1917
  @media (max-width: 480px) {
1918
+ /* Extra small screens - Galaxy S8 and similar */
1919
+ body {
1920
+ font-size: 12px;
1921
+ }
1922
+
1211
1923
  .header {
1212
- padding: 8px 10px;
1924
+ padding: 6px;
1213
1925
  }
1214
1926
 
1215
1927
  .header-content {
1216
- gap: 6px;
1928
+ gap: 5px;
1217
1929
  }
1218
1930
 
1219
1931
  .header-content > label {
1220
- display: none;
1932
+ font-size: 11px;
1933
+ min-width: auto;
1221
1934
  }
1222
1935
 
1223
1936
  .header-content select {
1224
- min-width: 90px;
1937
+ min-width: 85px;
1938
+ max-width: 140px;
1225
1939
  height: 30px;
1226
- font-size: 13px;
1940
+ font-size: 12px;
1941
+ padding: 3px;
1942
+ }
1943
+
1944
+ .header button {
1945
+ height: 30px;
1946
+ font-size: 12px;
1947
+ padding: 0 8px;
1948
+ min-width: 30px;
1227
1949
  }
1228
1950
 
1229
1951
  .onoffswitch {
1230
- width: 50px;
1231
- margin-left: 2px;
1232
- margin-right: 2px;
1952
+ width: 40px;
1953
+ height: 20px;
1954
+ margin: 0 2px;
1955
+ }
1956
+
1957
+ .onoffswitch-label {
1958
+ border-radius: 10px;
1959
+ }
1960
+
1961
+ .onoffswitch-inner:before,
1962
+ .onoffswitch-inner:after {
1963
+ height: 20px;
1964
+ line-height: 20px;
1965
+ font-size: 9px;
1966
+ }
1967
+
1968
+ .onoffswitch-switch {
1969
+ width: 14px;
1970
+ height: 14px;
1971
+ margin: 1px;
1972
+ border-radius: 7px;
1973
+ }
1974
+
1975
+ .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
1976
+ right: 1px;
1233
1977
  }
1234
1978
 
1235
1979
  .log-controls {
1236
- padding-left: 8px;
1980
+ padding-left: 0;
1237
1981
  }
1238
1982
 
1239
1983
  .small-btn {
1240
1984
  padding: 4px 8px;
1241
- font-size: 11px;
1985
+ font-size: 12px;
1986
+ height: 30px;
1242
1987
  }
1243
1988
 
1989
+ /* Main padding now handled dynamically by JavaScript */
1990
+ /* Removed fixed padding-top values */
1991
+
1244
1992
  #commands {
1993
+ padding: 0 4px;
1994
+ }
1995
+
1996
+ /* Smaller upload cards for Galaxy S8 */
1997
+ #commands .upload {
1998
+ padding: 3px;
1999
+ margin: 2px 0;
2000
+ gap: 2px;
2001
+ }
2002
+
2003
+ #commands .upload .offset {
2004
+ width: 55px;
2005
+ height: 24px;
2006
+ font-size: 10px;
2007
+ }
2008
+
2009
+ #commands .upload .firmware {
2010
+ height: 28px;
2011
+ font-size: 9px;
1245
2012
  padding: 0 10px;
2013
+ max-width: 180px;
2014
+ }
2015
+
2016
+ #commands .upload .firmware svg {
2017
+ width: 10px;
2018
+ height: 10px;
2019
+ margin-right: 2px;
2020
+ }
2021
+
2022
+ /* Smaller action buttons */
2023
+ #commands .buttons {
2024
+ gap: 3px;
2025
+ margin-top: 3px;
2026
+ }
2027
+
2028
+ #commands .buttons button {
2029
+ height: 32px;
2030
+ font-size: 12px;
2031
+ }
2032
+
2033
+ /* Smaller partition table card */
2034
+ #commands .partition-table {
2035
+ padding: 3px;
2036
+ margin: 2px 0;
2037
+ }
2038
+
2039
+ #commands .partition-table button {
2040
+ height: 32px;
2041
+ font-size: 12px;
2042
+ }
2043
+
2044
+ /* Smaller read flash card */
2045
+ #commands .read-flash {
2046
+ padding: 3px;
2047
+ margin: 2px 0;
2048
+ }
2049
+
2050
+ #commands .read-flash input {
2051
+ height: 24px;
2052
+ font-size: 10px;
2053
+ }
2054
+
2055
+ #commands .read-flash button {
2056
+ height: 32px;
2057
+ font-size: 12px;
2058
+ }
2059
+
2060
+ .partition-table-display tr {
2061
+ padding: 4px;
2062
+ margin-bottom: 3px;
2063
+ gap: 3px;
2064
+ }
2065
+
2066
+ .partition-table-display td {
2067
+ font-size: 10px;
2068
+ }
2069
+
2070
+ .partition-table-display td::before {
2071
+ font-size: 7px;
2072
+ }
2073
+
2074
+ .partition-table-display td:nth-child(1) {
2075
+ font-size: 11px;
2076
+ padding-bottom: 3px;
2077
+ }
2078
+
2079
+ .partition-download-btn,
2080
+ .littlefs-fs-button {
2081
+ padding: 4px 6px;
2082
+ font-size: 10px;
2083
+ }
2084
+
2085
+ /* Filesystem manager for Galaxy S8 */
2086
+ .littlefs-manager h3 {
2087
+ font-size: 13px;
2088
+ margin-bottom: 4px;
2089
+ }
2090
+
2091
+ .littlefs-info {
2092
+ padding: 3px;
2093
+ margin-bottom: 3px;
2094
+ }
2095
+
2096
+ .littlefs-partition-info {
2097
+ font-size: 9px;
2098
+ }
2099
+
2100
+ .usage-bar {
2101
+ height: 12px;
2102
+ }
2103
+
2104
+ .usage-text {
2105
+ font-size: 8px;
2106
+ }
2107
+
2108
+ .disk-version {
2109
+ font-size: 8px;
2110
+ padding: 1px 3px;
2111
+ }
2112
+
2113
+ .littlefs-controls {
2114
+ gap: 3px;
2115
+ margin-bottom: 3px;
2116
+ }
2117
+
2118
+ .littlefs-breadcrumb {
2119
+ padding: 3px;
2120
+ margin-bottom: 3px;
2121
+ }
2122
+
2123
+ .littlefs-breadcrumb button {
2124
+ height: 24px;
2125
+ font-size: 10px;
2126
+ padding: 0 6px;
2127
+ }
2128
+
2129
+ .littlefs-breadcrumb span {
2130
+ font-size: 9px;
2131
+ }
2132
+
2133
+ .littlefs-file-upload {
2134
+ padding: 3px;
2135
+ margin-bottom: 3px;
2136
+ gap: 3px;
2137
+ }
2138
+
2139
+ .littlefs-file-upload input[type="file"] {
2140
+ height: 32px;
2141
+ font-size: 12px;
2142
+ padding: 6px;
2143
+ }
2144
+
2145
+ .littlefs-files {
2146
+ max-height: 200px;
2147
+ }
2148
+
2149
+ .file-table tr {
2150
+ padding: 3px;
2151
+ margin-bottom: 3px;
2152
+ }
2153
+
2154
+ .file-table td {
2155
+ padding: 1px 0;
2156
+ font-size: 9px;
2157
+ }
2158
+
2159
+ .file-table td::before {
2160
+ font-size: 7px;
2161
+ }
2162
+
2163
+ .file-table td:first-child {
2164
+ font-size: 11px;
2165
+ padding-bottom: 3px;
2166
+ }
2167
+
2168
+ .file-actions {
2169
+ gap: 2px;
2170
+ margin-top: 3px;
1246
2171
  }
1247
2172
 
1248
2173
  #log {
1249
- padding: 0 10px;
2174
+ padding: 8px;
2175
+ border: 4px solid #000;
1250
2176
  font-size: 12px;
2177
+ line-height: 1.4;
2178
+ }
2179
+
2180
+ .footer {
2181
+ padding: 8px;
2182
+ font-size: 11px;
1251
2183
  }
1252
2184
 
1253
2185
  button,
1254
2186
  .firmware {
2187
+ font-size: 13px;
2188
+ padding-left: 10px;
2189
+ padding-right: 10px;
2190
+ }
2191
+
2192
+ /* Console optimization for small screens */
2193
+ .console-container {
2194
+ height: 300px;
2195
+ font-size: 12px;
2196
+ }
2197
+
2198
+ /* Filesystem manager for small screens */
2199
+ .littlefs-manager {
2200
+ padding: 8px;
2201
+ margin: 8px auto;
2202
+ }
2203
+
2204
+ .littlefs-controls button,
2205
+ .littlefs-file-upload button {
2206
+ height: 36px;
1255
2207
  font-size: 14px;
1256
- padding-left: 15px;
1257
- padding-right: 15px;
2208
+ }
2209
+
2210
+ .file-table {
2211
+ font-size: 12px;
2212
+ }
2213
+
2214
+ .file-table th,
2215
+ .file-table td {
2216
+ padding: 6px 4px;
2217
+ }
2218
+
2219
+ .file-actions button {
2220
+ height: 32px;
2221
+ font-size: 13px;
2222
+ }
2223
+
2224
+ /* Modals for small screens */
2225
+ .modal-content {
2226
+ padding: 12px;
2227
+ max-width: 96%;
2228
+ }
2229
+
2230
+ .modal-button {
2231
+ height: 36px;
2232
+ font-size: 15px;
2233
+ padding: 0 16px;
2234
+ }
2235
+
2236
+ .file-viewer-header,
2237
+ .file-viewer-info,
2238
+ .file-viewer-tabs,
2239
+ .file-viewer-body,
2240
+ .file-viewer-footer {
2241
+ padding-left: 10px;
2242
+ padding-right: 10px;
2243
+ }
2244
+
2245
+ .file-viewer-body pre {
2246
+ font-size: 9px;
2247
+ }
2248
+
2249
+ /* Prevent text selection on interactive elements */
2250
+ button,
2251
+ .onoffswitch-label,
2252
+ .firmware {
2253
+ -webkit-user-select: none;
2254
+ -moz-user-select: none;
2255
+ -ms-user-select: none;
2256
+ user-select: none;
2257
+ -webkit-tap-highlight-color: transparent;
1258
2258
  }
1259
2259
  }