malt666 commited on
Commit
82a1d77
·
verified ·
1 Parent(s): 61d7903

Upload 6 files

Browse files
Files changed (1) hide show
  1. templates/dashboard.html +273 -0
templates/dashboard.html CHANGED
@@ -1297,6 +1297,279 @@
1297
  display: none;
1298
  }
1299
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1300
  </style>
1301
  </head>
1302
  <body class="loading">
 
1297
  display: none;
1298
  }
1299
  }
1300
+
1301
+ /* 跳转链接样式 */
1302
+ .skip-link {
1303
+ position: absolute;
1304
+ top: -40px;
1305
+ left: 0;
1306
+ background: var(--primary-color);
1307
+ color: white;
1308
+ padding: 8px 16px;
1309
+ z-index: 100;
1310
+ transition: top 0.2s;
1311
+ }
1312
+
1313
+ .skip-link:focus {
1314
+ top: 0;
1315
+ }
1316
+
1317
+ /* 加载动画优化 */
1318
+ .loading-overlay {
1319
+ backdrop-filter: blur(8px);
1320
+ -webkit-backdrop-filter: blur(8px);
1321
+ }
1322
+
1323
+ .loader {
1324
+ position: relative;
1325
+ }
1326
+
1327
+ .loader::before {
1328
+ content: '';
1329
+ position: absolute;
1330
+ inset: -8px;
1331
+ border-radius: 50%;
1332
+ background: conic-gradient(
1333
+ from 0deg,
1334
+ transparent 0%,
1335
+ var(--primary-color) 25%,
1336
+ transparent 100%
1337
+ );
1338
+ animation: pulse 2s linear infinite;
1339
+ }
1340
+
1341
+ @keyframes pulse {
1342
+ 0% {
1343
+ transform: scale(1);
1344
+ opacity: 0.5;
1345
+ }
1346
+ 50% {
1347
+ transform: scale(1.2);
1348
+ opacity: 0.2;
1349
+ }
1350
+ 100% {
1351
+ transform: scale(1);
1352
+ opacity: 0.5;
1353
+ }
1354
+ }
1355
+
1356
+ /* 卡片内容动画 */
1357
+ .card-body {
1358
+ transition: max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1359
+ overflow: hidden;
1360
+ }
1361
+
1362
+ .card.collapsed .card-body {
1363
+ max-height: 0;
1364
+ }
1365
+
1366
+ /* 表格优化 */
1367
+ .table-container {
1368
+ position: relative;
1369
+ border-radius: 8px;
1370
+ background: var(--surface-1);
1371
+ padding: 1rem;
1372
+ margin: 1rem 0;
1373
+ }
1374
+
1375
+ .table-search {
1376
+ margin: -0.5rem -0.5rem 0.5rem -0.5rem;
1377
+ width: calc(100% + 1rem);
1378
+ border-radius: 8px 8px 0 0;
1379
+ border-bottom: 1px solid var(--surface-2);
1380
+ }
1381
+
1382
+ table {
1383
+ width: 100%;
1384
+ border-collapse: separate;
1385
+ border-spacing: 0;
1386
+ }
1387
+
1388
+ th, td {
1389
+ padding: 0.75rem;
1390
+ text-align: left;
1391
+ border-bottom: 1px solid var(--surface-2);
1392
+ }
1393
+
1394
+ th {
1395
+ font-weight: 600;
1396
+ color: var(--text-light);
1397
+ position: relative;
1398
+ user-select: none;
1399
+ }
1400
+
1401
+ th[aria-sort]:not([aria-sort="none"])::after {
1402
+ content: '';
1403
+ position: absolute;
1404
+ right: 0.5rem;
1405
+ top: 50%;
1406
+ transform: translateY(-50%);
1407
+ width: 0;
1408
+ height: 0;
1409
+ border-left: 4px solid transparent;
1410
+ border-right: 4px solid transparent;
1411
+ }
1412
+
1413
+ th[aria-sort="ascending"]::after {
1414
+ border-bottom: 4px solid var(--primary-color);
1415
+ }
1416
+
1417
+ th[aria-sort="descending"]::after {
1418
+ border-top: 4px solid var(--primary-color);
1419
+ }
1420
+
1421
+ tbody tr {
1422
+ transition: all 0.2s;
1423
+ }
1424
+
1425
+ tbody tr:hover {
1426
+ background: var(--surface-2);
1427
+ }
1428
+
1429
+ /* 状态指示器优化 */
1430
+ .status-indicator {
1431
+ position: relative;
1432
+ display: inline-block;
1433
+ width: 12px;
1434
+ height: 12px;
1435
+ border-radius: 50%;
1436
+ margin-right: 0.5rem;
1437
+ }
1438
+
1439
+ .status-indicator::before {
1440
+ content: '';
1441
+ position: absolute;
1442
+ inset: -4px;
1443
+ border-radius: 50%;
1444
+ background: currentColor;
1445
+ opacity: 0.2;
1446
+ animation: ping 1.5s cubic-bezier(0, 0, 0.2, 1) infinite;
1447
+ }
1448
+
1449
+ /* 按钮优化 */
1450
+ .btn {
1451
+ position: relative;
1452
+ overflow: hidden;
1453
+ }
1454
+
1455
+ .btn::after {
1456
+ content: '';
1457
+ position: absolute;
1458
+ top: 50%;
1459
+ left: 50%;
1460
+ width: 5px;
1461
+ height: 5px;
1462
+ background: rgba(255, 255, 255, 0.5);
1463
+ opacity: 0;
1464
+ border-radius: 100%;
1465
+ transform: scale(1, 1) translate(-50%);
1466
+ transform-origin: 50% 50%;
1467
+ }
1468
+
1469
+ .btn:focus:not(:active)::after {
1470
+ animation: ripple 1s ease-out;
1471
+ }
1472
+
1473
+ @keyframes ripple {
1474
+ 0% {
1475
+ transform: scale(0, 0);
1476
+ opacity: 0.5;
1477
+ }
1478
+ 20% {
1479
+ transform: scale(25, 25);
1480
+ opacity: 0.5;
1481
+ }
1482
+ 100% {
1483
+ opacity: 0;
1484
+ transform: scale(40, 40);
1485
+ }
1486
+ }
1487
+
1488
+ /* 主题切换按��优化 */
1489
+ .theme-toggle {
1490
+ overflow: hidden;
1491
+ }
1492
+
1493
+ .theme-toggle .material-icons {
1494
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1495
+ }
1496
+
1497
+ .theme-toggle:hover .material-icons {
1498
+ transform: rotate(180deg);
1499
+ }
1500
+
1501
+ [data-theme="dark"] .theme-toggle .material-icons {
1502
+ transform: rotate(180deg);
1503
+ }
1504
+
1505
+ /* 响应式优化 */
1506
+ @media (max-width: 768px) {
1507
+ .card {
1508
+ margin: 0.5rem;
1509
+ }
1510
+
1511
+ .table-container {
1512
+ margin: 0.5rem 0;
1513
+ padding: 0.5rem;
1514
+ }
1515
+
1516
+ th, td {
1517
+ padding: 0.5rem;
1518
+ }
1519
+
1520
+ .status-grid {
1521
+ gap: 0.5rem;
1522
+ }
1523
+ }
1524
+
1525
+ @media (max-width: 480px) {
1526
+ .navbar {
1527
+ flex-direction: column;
1528
+ text-align: center;
1529
+ padding: 0.5rem;
1530
+ }
1531
+
1532
+ .nav-actions {
1533
+ margin-top: 0.5rem;
1534
+ }
1535
+
1536
+ .card-header {
1537
+ flex-direction: column;
1538
+ gap: 0.5rem;
1539
+ }
1540
+
1541
+ .btn-toggle {
1542
+ width: 100%;
1543
+ }
1544
+ }
1545
+
1546
+ /* 打印优化 */
1547
+ @media print {
1548
+ .card {
1549
+ break-inside: avoid;
1550
+ page-break-inside: avoid;
1551
+ border: 1px solid #ddd;
1552
+ margin: 1rem 0;
1553
+ padding: 1rem;
1554
+ box-shadow: none;
1555
+ }
1556
+
1557
+ .table-container {
1558
+ overflow: visible;
1559
+ }
1560
+
1561
+ .table-container::after {
1562
+ display: none;
1563
+ }
1564
+
1565
+ th, td {
1566
+ border-bottom: 1px solid #ddd;
1567
+ }
1568
+
1569
+ .status-indicator::before {
1570
+ display: none;
1571
+ }
1572
+ }
1573
  </style>
1574
  </head>
1575
  <body class="loading">