:root{--primary:#6366f1;--primary-dark:#4f46e5;--primary-light:#eef1ff;--success:#10b981;--danger:#f43f5e;--bg:#f1f5f9;--bg-card:rgba(255,255,255,.85);--bg-sidebar:#f1f5f9;--glass:rgba(255,255,255,.7);--glass-border:rgba(255,255,255,.5);--text:#1e293b;--text-secondary:#64748b;--border:rgba(226,232,240,.8);--radius:16px;--shadow:0 1px 3px rgba(0,0,0,.04);--shadow-md:0 8px 24px rgba(0,0,0,.08);--sidebar-text:#1e293b;--sidebar-dim:#64748b;--sidebar-border:rgba(0,0,0,.08);--sidebar-hover:rgba(0,0,0,.05);--table-stripe:#f1f5f9;--table-hover:#f8fafc;--table-header:linear-gradient(180deg,#f8fafc,#f1f5f9);}html.dark{--bg:#0f172a;--bg-card:rgba(30,41,59,.9);--bg-sidebar:#0f172a;--glass:rgba(30,41,59,.8);--glass-border:rgba(255,255,255,.08);--text:#e2e8f0;--text-secondary:#94a3b8;--border:rgba(255,255,255,.08);--shadow:0 1px 3px rgba(0,0,0,.2);--shadow-md:0 8px 24px rgba(0,0,0,.3);--sidebar-text:rgba(255,255,255,.85);--sidebar-dim:rgba(255,255,255,.55);--sidebar-border:rgba(255,255,255,.08);--sidebar-hover:rgba(255,255,255,.08);--table-stripe:#1e293b;--table-hover:#334155;--table-header:linear-gradient(180deg,#1e293b,#0f172a);}@media (prefers-color-scheme:dark){html.dark{--bg:#0f172a;--bg-card:rgba(30,41,59,.9);--bg-sidebar:#0f172a;--glass:rgba(30,41,59,.8);--glass-border:rgba(255,255,255,.08);--text:#e2e8f0;--text-secondary:#94a3b8;--border:rgba(255,255,255,.08);--shadow:0 1px 3px rgba(0,0,0,.2);--shadow-md:0 8px 24px rgba(0,0,0,.3);--sidebar-text:rgba(255,255,255,.85);--sidebar-dim:rgba(255,255,255,.55);--sidebar-border:rgba(255,255,255,.08);--sidebar-hover:rgba(255,255,255,.08);--table-stripe:#1e293b;--table-hover:#334155;--table-header:linear-gradient(180deg,#1e293b,#0f172a);}}*{margin:0;padding:0;box-sizing:border-box;}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text);min-height:100vh;}button{cursor:pointer;font-family:inherit;border:none;outline:none;}input,select,textarea{font-family:inherit;outline:none;}table{border-collapse:collapse;width:100%;}input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(99,102,241,.1);}::-webkit-scrollbar{width:6px;height:6px;}::-webkit-scrollbar-track{background:transparent;}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px;}::-webkit-scrollbar-thumb:hover{background:#94a3b8;}.login-overlay{position:fixed;inset:0;background:linear-gradient(135deg,#0f172a,#1e1b4b,#312e81,#4338ca);display:flex;align-items:center;justify-content:center;z-index:9999;}.login-overlay::before{content:'';position:absolute;inset:0;background:radial-gradient(circle at 30% 50%,rgba(99,102,241,.15) 0%,transparent 60%),radial-gradient(circle at 70% 50%,rgba(16,185,129,.08) 0%,transparent 60%);}.login-card{background:var(--glass);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);border-radius:24px;padding:clamp(28px,6vw,44px) clamp(20px,5vw,40px);width:min(420px,94vw);max-width:94vw;box-shadow:0 25px 60px rgba(0,0,0,.3);}.login-card h1{font-size:24px;text-align:center;margin-bottom:4px;color:var(--primary);}.login-card .form-group{margin-bottom:18px;}.login-card label{display:block;font-size:13px;font-weight:600;margin-bottom:6px;}.login-card input{width:100%;padding:10px 14px;border:1.5px solid var(--border);border-radius:8px;font-size:14px;}.login-card input:focus{border-color:var(--primary);}.btn-login{width:100%;padding:13px;background:linear-gradient(135deg,var(--primary),var(--primary-dark));color:#fff;border-radius:10px;font-size:15px;font-weight:700;margin-top:8px;transition:all .2s;box-shadow:0 4px 15px rgba(99,102,241,.4);}.btn-login:hover{transform:translateY(-1px);}.login-divider{display:flex;align-items:center;gap:12px;margin:20px 0;color:var(--text-secondary);font-size:12px;}.login-divider::before,.login-divider::after{content:'';flex:1;height:1px;background:var(--border);}.btn-guest{width:100%;padding:15px;background:linear-gradient(135deg,var(--success),#059669);color:#fff;border-radius:12px;font-size:16px;font-weight:700;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;box-shadow:0 4px 15px rgba(16,185,129,.3);}.btn-guest:hover{transform:translateY(-2px);}.btn-guest .wave{font-size:20px;animation:wave 1.5s infinite;display:inline-block;}@keyframes wave{0%,100%{transform:rotate(0);}25%{transform:rotate(15deg);}75%{transform:rotate(-10deg);}}.app{display:none;min-height:100vh;}.app.active{display:flex;}.sidebar{width:240px;background:var(--bg-sidebar);display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;z-index:100;box-shadow:none;}.sidebar-header{padding:22px 20px;border-bottom:none;}.sidebar-header h2{font-size:17px;color:var(--sidebar-text);font-weight:700;}.sidebar-header .user-info{font-size:11px;color:var(--sidebar-dim);margin-top:5px;}.sidebar-nav{flex:1;padding:14px 10px;overflow-y:auto;}.sidebar-nav button{display:flex;align-items:center;gap:10px;width:100%;padding:11px 16px;border-radius:10px;font-size:14px;background:transparent;color:var(--sidebar-dim);transition:all .18s;margin-bottom:3px;text-align:left;font-weight:500;}.sidebar-nav button:hover{background:var(--sidebar-hover);color:var(--sidebar-text);}.sidebar-nav button.active{background:var(--primary);color:#fff;box-shadow:0 4px 14px rgba(99,102,241,.35);font-weight:600;}.sidebar-nav .icon{font-size:17px;width:22px;text-align:center;}.sidebar-footer{padding:14px 18px;border-top:1px solid var(--sidebar-border);display:flex;flex-direction:column;gap:6px;}.sidebar-footer button{width:100%;padding:9px;border-radius:8px;font-size:13px;transition:all .2s;}.sidebar-footer .btn-logout{background:rgba(239,68,68,.15);color:#fca5a5;}.sidebar-footer .btn-logout:hover{background:rgba(239,68,68,.25);}.sidebar-footer .btn-theme{background:rgba(99,102,241,.15);color:#a5b4fc;}.sidebar-footer .btn-pwd{background:var(--sidebar-hover);color:var(--sidebar-dim);}.main{flex:1;margin-left:240px;padding:clamp(16px,3vw,32px);}.page{display:none;animation:fadeIn .25s ease;}.page.active{display:block;}@keyframes fadeIn{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:translateY(0);}}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(clamp(150px,20vw,220px),1fr));gap:clamp(8px,1.5vw,16px);margin-bottom:24px;}.card{background:var(--glass);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-radius:var(--radius);padding:clamp(14px,2vw,22px) clamp(14px,2vw,26px);box-shadow:var(--shadow);border:1px solid var(--glass-border);transition:all .25s;position:relative;overflow:hidden;}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--primary),#a78bfa,var(--success));opacity:0;transition:opacity .3s;}.card:hover{box-shadow:var(--shadow-md);transform:translateY(-3px);}.card:hover::before{opacity:1;}.card-label{font-size:12px;color:var(--text-secondary);margin-bottom:8px;}.card-value{font-size:clamp(20px,1.5vw + 16px,28px);font-weight:700;}.card-value.income{color:var(--success);}.card-value.expense{color:var(--danger);}.card-value.balance{color:var(--primary);}.card-sub{font-size:12px;color:var(--text-secondary);margin-top:4px;}.section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:12px;}.section-header h3{font-size:clamp(15px,1vw + 12px,17px);}.toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}.toolbar input,.toolbar select{padding:8px 12px;border:1px solid var(--border);border-radius:6px;font-size:13px;}.btn{padding:8px 16px;border-radius:6px;font-size:13px;font-weight:600;transition:all .2s;display:inline-flex;align-items:center;gap:6px;}.btn:hover{transform:translateY(-1px);}.btn:active{transform:scale(.97);}.btn:disabled{opacity:.5;cursor:not-allowed;}.btn-primary{background:linear-gradient(135deg,var(--primary),var(--primary-dark));color:#fff;box-shadow:0 4px 14px rgba(99,102,241,.4);}.btn-success{background:linear-gradient(135deg,var(--success),#059669);color:#fff;box-shadow:0 4px 14px rgba(16,185,129,.3);}.btn-danger{background:linear-gradient(135deg,var(--danger),#e11d48);color:#fff;}.btn-outline{background:var(--glass);backdrop-filter:blur(8px);border:1px solid var(--glass-border);color:var(--text);}.btn-sm{padding:5px 10px;font-size:12px;}.table-wrap{background:var(--glass);backdrop-filter:blur(8px);border-radius:var(--radius);box-shadow:var(--shadow);overflow:auto;border:1px solid var(--glass-border);}.table-wrap table{font-size:13px;}.table-wrap th{background:var(--table-header);padding:11px 14px;font-weight:600;font-size:12px;color:var(--text-secondary);border-bottom:2px solid var(--border);white-space:nowrap;}.table-wrap td{padding:11px 14px;border-bottom:1px solid var(--table-stripe);}.table-wrap tbody tr:hover td{background:var(--table-hover);}.badge{display:inline-block;padding:3px 10px;border-radius:20px;font-size:11px;font-weight:600;}.badge-income{background:#ecfdf5;color:var(--success);}.badge-expense{background:#fff1f2;color:var(--danger);}.badge-role{background:var(--primary-light);color:var(--primary);margin-right:4px;margin-bottom:4px;display:inline-block;}.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);display:none;align-items:center;justify-content:center;z-index:999;}.modal-overlay.active{display:flex;}.modal{background:var(--glass);backdrop-filter:blur(20px);border-radius:16px;padding:clamp(18px,3vw,28px) clamp(16px,3vw,30px);width:min(520px,92vw);max-width:92vw;max-height:min(85vh,640px);overflow-y:auto;box-shadow:0 25px 70px rgba(0,0,0,.25);border:1px solid var(--glass-border);}.modal h3{font-size:18px;margin-bottom:20px;}.modal .form-group{margin-bottom:14px;}.modal label{display:block;font-size:13px;font-weight:600;margin-bottom:5px;}.modal input,.modal select,.modal textarea{width:100%;padding:9px 12px;border:1.5px solid var(--border);border-radius:6px;font-size:14px;}.modal textarea{resize:vertical;min-height:70px;}.modal .btn-row{display:flex;gap:8px;justify-content:flex-end;margin-top:20px;}.checkbox-group{display:flex;flex-wrap:wrap;gap:8px;}.checkbox-group label{display:flex;align-items:center;gap:4px;font-weight:400;font-size:13px;cursor:pointer;}.import-area{background:var(--bg-card);border-radius:var(--radius);padding:32px;box-shadow:var(--shadow);border:1px solid var(--border);}.import-area textarea{width:100%;min-height:180px;font-family:Consolas,monospace;font-size:13px;padding:14px;border:2px dashed var(--border);border-radius:8px;resize:vertical;}.toast{position:fixed;top:20px;right:20px;padding:12px 20px;border-radius:8px;color:#fff;font-size:14px;font-weight:600;z-index:9999;animation:slideIn .3s ease;}.toast.success{background:var(--success);}.toast.error{background:var(--danger);}.toast.warning{background:#f59e0b;}@keyframes slideIn{from{transform:translateX(120%);opacity:0;}to{transform:translateX(0);opacity:1;}}.empty{text-align:center;padding:48px 20px;color:var(--text-secondary);}.empty .icon{font-size:48px;margin-bottom:12px;}.pagination{display:flex;gap:4px;justify-content:center;margin-top:16px;flex-wrap:wrap;}.pagination button{padding:6px 12px;border-radius:4px;font-size:12px;background:var(--border);color:var(--text);}.pagination button.active{background:var(--primary);color:#fff;}.loading{text-align:center;padding:40px 20px;color:var(--text-secondary);}.loading .spinner{display:inline-block;width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite;}@keyframes spin{to{transform:rotate(360deg);}}.mobile-logout{display:none;}.theme-toggle{font-size:18px;padding:4px;background:none;color:var(--sidebar-text);cursor:pointer;}.sidebar-toggle{display:none;}.sidebar-overlay{display:none;}@media (max-width:768px){.sidebar-toggle{display:flex;position:fixed;top:10px;left:10px;z-index:300;width:42px;height:42px;border-radius:10px;border:none;background:var(--bg-card);color:var(--text);font-size:20px;align-items:center;justify-content:center;box-shadow:var(--shadow);cursor:pointer;padding:0;}.sidebar{position:fixed !important;top:0;left:0;bottom:0;width:250px !important;height:100vh !important;transform:translateX(-100%);transition:transform .25s ease;z-index:400;display:flex !important;flex-direction:column;box-shadow:2px 0 12px rgba(0,0,0,.15);border-right:1px solid var(--border);}.sidebar.open{transform:translateX(0);}.sidebar-overlay{display:block;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:350;opacity:0;pointer-events:none;transition:opacity .25s ease;}.sidebar-overlay.show{opacity:1;pointer-events:auto;}.sidebar-header{padding:16px 14px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}.sidebar-header h2{display:block !important;font-size:16px;color:var(--text);}.sidebar-header .user-info{display:block !important;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--text-secondary);}.sidebar-nav{flex-direction:column !important;align-items:stretch;padding:10px;overflow-y:auto !important;gap:2px;}.sidebar-nav button{flex:none;display:flex;justify-content:flex-start;align-items:center;gap:10px;padding:11px 14px;font-size:14px;border-radius:10px;text-align:left;white-space:nowrap;background:transparent;color:var(--text);}.sidebar-nav button span{display:inline !important;font-size:13px !important;}.sidebar-nav .icon{font-size:16px !important;width:22px;}.sidebar-nav button.active{background:var(--primary);color:#fff;}.sidebar-footer{display:flex !important;padding:12px 14px;border-top:1px solid var(--border);}.sidebar-footer button{width:100%;}.mobile-logout{display:none;}.main{margin-left:0 !important;margin-top:0 !important;padding:60px 12px 16px !important;}.cards{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;}}@media (max-width:640px){.cards{grid-template-columns:1fr 1fr;gap:8px;}.card{padding:12px 14px;}.card-value{font-size:20px;}#page-dashboard > div[style*="grid"]{grid-template-columns:1fr !important;}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}.table-wrap table{width:100%;font-size:12px;min-width:0;}.table-wrap th,.table-wrap td{padding:10px 8px;}.table-wrap td{max-width:30vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.table-wrap td:last-child{max-width:none;white-space:nowrap;}.col-opt{display:none;}.table-wrap .btn{padding:8px 10px;font-size:13px;}.table-wrap input[type="checkbox"],.rosterCb{width:18px;height:18px;}.rosterRow{padding:6px 0 !important;}.btn-exempt-toggle{padding:6px 10px !important;font-size:12px !important;}.btn-login,.btn-guest{padding:14px 16px;font-size:16px;}body{padding-bottom:env(safe-area-inset-bottom);}.modal{padding-bottom:calc(18px + env(safe-area-inset-bottom));}footer{padding-bottom:calc(22px + env(safe-area-inset-bottom)) !important;}.login-card{padding:24px 16px;width:100%;max-width:100vw;border-radius:0;min-height:100vh;justify-content:center;}.login-card h1{font-size:18px;}.modal{padding:18px 14px;width:100%;max-width:100vw;max-height:92vh;border-radius:14px 14px 0 0;margin-top:auto;overflow-y:auto;-webkit-overflow-scrolling:touch;}.modal-overlay{align-items:flex-end;}.modal .btn-row{flex-direction:column;}.modal .btn-row .btn{width:100%;justify-content:center;}.toolbar{flex-direction:row;flex-wrap:wrap;gap:6px;}.toolbar select,.toolbar input{flex:1;min-width:80px;padding:10px 12px;font-size:16px;display:block;}.form-group input,.form-group select,.form-group textarea{font-size:16px;}.card,.table-wrap,.modal,.btn-outline{backdrop-filter:none !important;-webkit-backdrop-filter:none !important;background:var(--bg-card) !important;}.section-header{flex-wrap:wrap;gap:8px;}.pagination button{padding:8px 12px;font-size:13px;}}@media (min-width:769px) and (max-width:900px){.sidebar{width:70px;}.sidebar-header h2,.sidebar-header .user-info,.sidebar-nav button span:not(.icon){display:none;}.sidebar-nav button{justify-content:center;padding:12px 8px;}.main{margin-left:70px;padding:20px;}}@media (min-width:641px) and (max-width:768px){.main{padding:64px 16px 20px !important;}.cards{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;}.table-wrap th,.table-wrap td{padding:11px 10px;font-size:13px;}.section-header{gap:10px;}}@media (max-width:360px){.main{padding:56px 8px 12px !important;}.cards{grid-template-columns:1fr 1fr;gap:6px;}.card{padding:10px 10px;}.card-value{font-size:17px;}.card-label{font-size:10px;margin-bottom:4px;}.card-sub{font-size:10px;}.section-header h3{font-size:15px;}.section-header{gap:6px;}.toolbar{gap:4px;}.toolbar input,.toolbar select{padding:9px 8px;min-width:56px;}.table-wrap th,.table-wrap td{padding:8px 5px;font-size:11px;}.table-wrap .btn{padding:7px 8px;font-size:12px;}.sidebar{width:232px !important;}.sidebar-nav button{padding:10px 12px;font-size:13px;}.login-card{padding:20px 14px;}.login-card h1{font-size:16px;}.btn-login,.btn-guest{padding:12px 14px;font-size:15px;}.modal{padding:14px 12px;}.modal h3{font-size:16px;}.pagination button{padding:7px 10px;font-size:12px;}footer{font-size:11px;padding-bottom:calc(18px + env(safe-area-inset-bottom)) !important;}#page-dashboard .cards + div[style*="grid"] > div{padding:8px;}canvas{max-height:110px;}}@media (min-width:1400px){.cards{grid-template-columns:repeat(4,1fr);}.main{padding:36px 48px;}}.hint{font-size:12px;color:var(--text-secondary);text-align:center;margin-top:12px;}.hint a{color:var(--primary);text-decoration:none;}body{background-image:radial-gradient(circle at 15% -5%,rgba(99,102,241,.07),transparent 45%),radial-gradient(circle at 85% 110%,rgba(16,185,129,.05),transparent 45%);background-attachment:fixed;}html.dark body{background-image:radial-gradient(circle at 15% -5%,rgba(99,102,241,.12),transparent 45%),radial-gradient(circle at 85% 110%,rgba(16,185,129,.07),transparent 45%);}.login-overlay{background:radial-gradient(circle at 20% 30%,rgba(99,102,241,.28) 0%,transparent 50%),radial-gradient(circle at 80% 70%,rgba(139,92,246,.22) 0%,transparent 50%),radial-gradient(circle at 60% 10%,rgba(16,185,129,.12) 0%,transparent 40%),linear-gradient(135deg,#0f172a,#1e1b4b 45%,#312e81 75%,#4338ca);}.login-card{animation:loginIn .55s cubic-bezier(.22,1,.36,1);border-radius:28px;}@keyframes loginIn{from{opacity:0;transform:translateY(24px) scale(.96);}to{opacity:1;transform:translateY(0) scale(1);}}.login-card h1{font-size:26px;background:linear-gradient(135deg,#a5b4fc,#818cf8,#c4b5fd);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:.5px;}.login-card label{letter-spacing:.3px;}.login-card input{border-radius:12px;transition:border-color .2s,box-shadow .2s;background:rgba(255,255,255,.06);}html.dark .login-card input{background:rgba(255,255,255,.04);}.login-card input:focus{border-color:var(--primary);box-shadow:0 0 0 4px rgba(99,102,241,.18);}.btn-login{border-radius:12px;position:relative;overflow:hidden;}.btn-login::after{content:'';position:absolute;top:0;left:-80%;width:60%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.25),transparent);transform:skewX(-20deg);transition:left .5s;}.btn-login:hover::after{left:120%;}.btn-guest{border-radius:14px;position:relative;overflow:hidden;}.btn-guest::after{content:'';position:absolute;top:0;left:-80%;width:60%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.22),transparent);transform:skewX(-20deg);transition:left .5s;}.btn-guest:hover::after{left:120%;}.sidebar-header h2{display:flex;align-items:center;gap:8px;letter-spacing:.3px;}.sidebar-nav button{border-radius:12px;position:relative;}.sidebar-nav button .icon{background:rgba(99,102,241,.1);border-radius:8px;padding:3px 0;transition:background .2s;}.sidebar-nav button:hover .icon{background:rgba(99,102,241,.18);}.sidebar-nav button.active{background:linear-gradient(135deg,#6366f1,#8b5cf6);box-shadow:0 6px 18px rgba(99,102,241,.4);}.sidebar-nav button.active .icon{background:rgba(255,255,255,.2);}.sidebar-nav button.active::before{content:'';position:absolute;left:-10px;top:20%;bottom:20%;width:3px;border-radius:3px;background:linear-gradient(180deg,#818cf8,#c4b5fd);}.sidebar-footer button{border-radius:10px;}.btn-logout,.btn-theme{font-weight:600;}.card{border-radius:20px;box-shadow:0 1px 3px rgba(0,0,0,.05),0 8px 24px rgba(99,102,241,.05);}.card::before{height:3px;background:linear-gradient(90deg,#6366f1,#a78bfa 50%,#10b981);opacity:.85;}.card:hover{transform:translateY(-4px);box-shadow:0 12px 32px rgba(99,102,241,.12);}.card-value.balance{background:linear-gradient(135deg,#6366f1,#8b5cf6);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}.table-wrap{border-radius:18px;}.table-wrap th{background:linear-gradient(180deg,rgba(99,102,241,.06),rgba(99,102,241,.02));letter-spacing:.5px;text-transform:uppercase;}.table-wrap tbody tr{transition:background .15s;}.table-wrap tbody tr:hover td{background:rgba(99,102,241,.04);}html.dark .table-wrap tbody tr:hover td{background:rgba(99,102,241,.1);}.table-wrap tbody tr:nth-child(even) td{background:rgba(99,102,241,.015);}html.dark .table-wrap tbody tr:nth-child(even) td{background:rgba(255,255,255,.02);}.table-wrap tbody tr:hover:nth-child(even) td{background:rgba(99,102,241,.04);}html.dark .table-wrap tbody tr:hover:nth-child(even) td{background:rgba(99,102,241,.1);}.btn{border-radius:10px;letter-spacing:.2px;}.btn-primary,.btn-success,.btn-danger{position:relative;overflow:hidden;}.btn-primary::after,.btn-success::after,.btn-danger::after{content:'';position:absolute;top:0;left:-80%;width:50%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.2),transparent);transform:skewX(-20deg);transition:left .45s;}.btn-primary:hover::after,.btn-success:hover::after,.btn-danger:hover::after{left:120%;}.modal-overlay{backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);}.modal-overlay.active .modal{animation:modalIn .3s cubic-bezier(.22,1,.36,1);}@keyframes modalIn{from{opacity:0;transform:translateY(16px) scale(.95);}to{opacity:1;transform:translateY(0) scale(1);}}.modal{border-radius:20px;}.modal h3{display:flex;align-items:center;gap:8px;}.modal input,.modal select,.modal textarea{border-radius:10px;transition:border-color .2s,box-shadow .2s;}.modal input:focus,.modal select:focus,.modal textarea:focus{border-color:var(--primary);box-shadow:0 0 0 4px rgba(99,102,241,.12);}.toast{border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.18);}.badge{letter-spacing:.3px;box-shadow:inset 0 1px 0 rgba(255,255,255,.4);}.toolbar input,.toolbar select,.toolbar button{border-radius:10px;transition:border-color .2s,box-shadow .2s;}.toolbar input:focus,.toolbar select:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(99,102,241,.12);}::-webkit-scrollbar{width:8px;height:8px;}::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#c7d2fe,#a5b4fc);border-radius:4px;border:2px solid transparent;background-clip:content-box;}html.dark::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#4f46e5,#6d28d9);border:2px solid transparent;background-clip:content-box;}.section-header h3{letter-spacing:.3px;display:flex;align-items:center;gap:8px;}.section-header h3::before{content:'';width:4px;height:18px;border-radius:2px;background:linear-gradient(180deg,#6366f1,#a78bfa);}.pagination button{border-radius:8px;transition:all .2s;}.pagination button:hover:not(.active){background:rgba(99,102,241,.12);color:var(--primary);}.empty .icon{filter:drop-shadow(0 4px 12px rgba(99,102,241,.25));}.loading .spinner{border-width:4px;}@media (max-width:640px){.sidebar-toggle{border-radius:12px;backdrop-filter:blur(8px);}.sidebar-nav button.active::before{left:-8px;}.card{border-radius:16px;}.table-wrap{border-radius:14px;}}img{max-width:100%;height:auto;}input,select,textarea{max-width:100%;}h1,h2,h3,h4,p,td,th,.card,.modal,.toast{overflow-wrap:break-word;word-wrap:break-word;}html{-webkit-text-size-adjust:100%;}canvas{max-width:100%;}@media (max-width:900px){div[style*="grid-template-columns:1fr 1fr"]{grid-template-columns:1fr !important;}div[style*="display:grid"]{min-width:0;}}@media (min-width:901px) and (max-width:1200px){.sidebar{width:200px;}.main{margin-left:200px;padding:22px 24px;}.cards{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));}}@media (min-width:1800px){.main{padding:40px 56px;}.page{max-width:1680px;margin:0 auto;}.cards{grid-template-columns:repeat(4,1fr);max-width:1680px;}}@media (max-width:640px){input[style*="width:180px"],input[style*="width:180px"]{width:100% !important;}input[style*="width:auto"]{width:100% !important;}}@media (max-width:480px){.modal-overlay{align-items:flex-end;}.modal{width:100%;max-width:100vw;max-height:92vh;border-radius:16px 16px 0 0;margin-top:auto;}.toolbar{flex-direction:column;align-items:stretch;}.toolbar input,.toolbar select,.toolbar .btn{width:100%;}.section-header{flex-direction:column;align-items:flex-start;}.section-header .toolbar{width:100%;}.cards{grid-template-columns:1fr 1fr;gap:8px;}.card{padding:14px;border-radius:16px;}.card-value{font-size:22px;}.pagination{gap:6px;}.pagination button{flex:1;min-width:34px;padding:10px 0;}.badge{font-size:10px;padding:2px 8px;}.btn{width:auto;}.table-wrap th,.table-wrap td{padding:10px 8px;}}@media (max-height:500px) and (orientation:landscape){.login-overlay{align-items:flex-start;padding:20px 0;overflow-y:auto;}.login-card{min-height:auto !important;padding:20px;border-radius:18px;}.sidebar-nav button{padding:8px 12px;}.sidebar-header{padding:12px 16px;}.main{padding-top:48px;}.modal{max-height:90vh;}}@media (hover:none){.card:hover,.btn:hover{transform:none;}.card::before{opacity:.85;}}@media (max-height:700px){.sidebar-nav{padding-top:8px;}.main{padding-top:16px;}.card{padding:14px 18px;}}@media (max-width:900px){div[style*="max-width:860px"]{max-width:100% !important;}canvas{max-height:180px;}}@media (min-width:901px){canvas{max-height:200px;}}@media (max-width:340px){.cards{grid-template-columns:1fr;}.sidebar-toggle{width:38px;height:38px;}.login-card h1{font-size:15px;}.modal h3{font-size:15px;}}/* ========== 移动端界面增强 v1.7 ========== */ /* 触控目标放大（44px 标准） */ @media (max-width:768px){.sidebar-nav button{min-height:46px;padding:12px 14px;}.btn{min-height:40px;}.btn-sm{min-height:38px;padding:8px 12px;}.sidebar-toggle{width:46px;height:46px;font-size:22px;}.sidebar-footer button{min-height:44px;}.pagination button{min-height:36px;}}/* 移动端表格 → 卡片化（收支/花名册/日志/回收站） */ @media (max-width:640px){/* 收支记录卡片化 */ #transactionTable table,#rosterPayTable table,#logsTable table,#recycleTable table,#semesterTable table,#studentTable table{display:block;}#transactionTable thead,#rosterPayTable thead,#logsTable thead,#recycleTable thead,#semesterTable thead,#studentTable thead{display:none;}#transactionTable tbody,#rosterPayTable tbody,#logsTable tbody,#recycleTable tbody,#semesterTable tbody,#studentTable tbody{display:block;}#transactionTable tbody tr,#rosterPayTable tbody tr,#logsTable tbody tr,#recycleTable tbody tr,#semesterTable tbody tr,#studentTable tbody tr{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;padding:12px;margin-bottom:8px;border:1px solid var(--border);border-radius:12px;background:var(--bg-card);position:relative;}#transactionTable tbody td,#rosterPayTable tbody td,#logsTable tbody td,#recycleTable tbody td,#semesterTable tbody td,#studentTable tbody td{border:none;padding:2px 0;max-width:none !important;white-space:normal !important;overflow:visible !important;text-overflow:clip !important;}/* 卡片内字段标签（用 data-label 由 JS 注入） */ #transactionTable tbody td::before,#logsTable tbody td::before,#semesterTable tbody td::before{content:attr(data-label);display:block;font-size:10px;color:var(--text-secondary);font-weight:600;letter-spacing:.3px;}/* 操作列占满一行 */ #transactionTable tbody tr td:last-child,#logsTable tbody tr td:last-child{grid-column:1 / -1;display:flex;justify-content:flex-end;gap:6px;margin-top:4px;padding-top:8px;border-top:1px dashed var(--border) !important;}/* 凭证缩略图放大 */ #transactionTable tbody img{width:48px !important;height:36px !important;}}/* 工具栏移动端堆叠 */ @media (max-width:480px){.toolbar{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%;}.toolbar input,.toolbar select,.toolbar .btn{width:100% !important;min-width:0 !important;}.toolbar .btn:last-child{grid-column:1 / -1;}/* 筛选按钮整行 */ .toolbar input[type="date"]{grid-column:1 / -1;}}/* 固定底部安全区 + 防误触 */ @media (max-width:640px){body{padding-bottom:env(safe-area-inset-bottom);}.toast{top:auto;bottom:calc(16px + env(safe-area-inset-bottom));right:16px;left:16px;text-align:center;}}/* 减少触控误触：卡片 hover 效果在触屏关闭 */ @media (hover:none){.card:hover,.btn:hover{transform:none;}.card:active,.btn:active{transform:scale(.98);}}/* ========== 移动端界面增强 v1.7.2（报表/图表/学期管理） ========== */ /* 报表页图表单列显示 */ @media (max-width:768px){#page-report > div[style*="grid-template-columns:1fr 1fr"],#page-report > div[style*="grid"]{grid-template-columns:1fr !important;}/* 图表高度增大（单列下可更大） */ #page-report canvas,#page-dashboard canvas{max-height:220px !important;height:auto !important;}/* 图表容器内边距 */ #page-report > div[style*="grid"] > div{padding:12px !important;}#page-report h4{font-size:13px !important;margin-bottom:8px !important;}}/* 报表工具栏移动端整理 */ @media (max-width:640px){/* 报表筛选区（年/学期选择+按钮）网格化 */ #page-report .section-header > div[style*="display:flex"]{display:grid !important;grid-template-columns:1fr 1fr;gap:8px;width:100%;}#page-report .section-header select,#page-report .section-header input{width:100% !important;min-width:0 !important;font-size:15px !important;padding:10px !important;}#page-report .section-header .btn{width:100% !important;justify-content:center;}#page-report .section-header .btn:last-child{grid-column:1 / -1;}}/* 学期管理区移动端 */ @media (max-width:640px){#page-report > div[style*="margin-top:24px"]{padding:14px !important;}#page-report input[placeholder*="学期名称"]{width:100% !important;}#page-report input[type="date"]{width:100% !important;}#page-report > div[style*="margin-top:24px"] > div[style*="display:flex"]{display:grid !important;grid-template-columns:1fr;gap:8px;}#page-report > div[style*="margin-top:24px"] > div[style*="display:flex"] .btn{width:100%;justify-content:center;}}/* 仪表盘最近收支：移动端卡片化 */ @media (max-width:640px){#dashboardRecent table{display:block;}#dashboardRecent thead{display:none;}#dashboardRecent tbody{display:block;}#dashboardRecent tbody tr{display:grid;grid-template-columns:1fr 1fr;gap:4px 12px;padding:12px;margin-bottom:8px;border:1px solid var(--border);border-radius:12px;background:var(--bg-card);}#dashboardRecent tbody td{border:none !important;padding:2px 0 !important;white-space:normal !important;overflow:visible !important;}#dashboardRecent tbody td::before{content:attr(data-label);display:block;font-size:10px;color:var(--text-secondary);font-weight:600;}}/* 报表内容区分类/月度表格移动端卡片化 */ @media (max-width:640px){#reportContent table{display:block;}#reportContent thead{display:none;}#reportContent tbody{display:block;}#reportContent tbody tr{display:grid;grid-template-columns:1fr 1fr;gap:4px 12px;padding:10px 12px;margin-bottom:6px;border:1px solid var(--border);border-radius:10px;background:var(--bg-card);}#reportContent tbody td{border:none !important;padding:2px 0 !important;white-space:normal !important;overflow:visible !important;}#reportContent tbody td::before{content:attr(data-label);display:block;font-size:10px;color:var(--text-secondary);font-weight:600;}#reportContent tbody tr td:last-child{grid-column:1 / -1;}#reportContent .table-wrap{overflow:visible;}}/* 报表汇总卡片移动端 */ @media (max-width:640px){#reportContent .cards{grid-template-columns:1fr 1fr !important;}#reportContent .card{padding:12px !important;}#reportContent .card-value{font-size:18px !important;}#reportContent > div[style*="grid-template-columns:1fr 1fr"]{grid-template-columns:1fr !important;}}/* 图表容器背景统一 */ @media (max-width:768px){#page-report > div[style*="grid"] > div,#page-dashboard > div[style*="grid"] > div{border:1px solid var(--border);}}