:root{--primary: #1976D2;--primary-dark: #1565C0;--primary-light: #E3F2FD;--success: #388E3C;--warning: #F57C00;--danger: #D32F2F;--text: #1a1a2e;--text-muted: #666;--bg: #f0f4f8;--card: #ffffff;--border: #e2e8f0;--sidebar-w: 240px;--topbar-h: 56px;--radius: 12px;--shadow: 0 1px 8px rgba(0,0,0,.08);--shadow-lg: 0 8px 32px rgba(0,0,0,.14)}*{box-sizing:border-box;margin:0;padding:0}body{font-family:Segoe UI,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;-webkit-font-smoothing:antialiased;overscroll-behavior:none;overflow-x:hidden}button,a,input,select,textarea{touch-action:manipulation}body.modal-open{overflow:hidden;position:fixed;width:100%}.app-layout{display:flex;min-height:100vh;min-height:100dvh}.app-body{flex:1;margin-left:var(--sidebar-w);display:flex;flex-direction:column;min-width:0}.sidebar{position:fixed;top:0;left:0;width:var(--sidebar-w);height:100vh;background:#0d1b2a;display:flex;flex-direction:column;z-index:200;overflow-y:auto}.sidebar-overlay{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:199}.sidebar-logo{display:flex;align-items:center;gap:.7rem;padding:1.2rem 1rem;border-bottom:1px solid rgba(255,255,255,.07)}.sidebar-logo-icon{font-size:1.8rem}.sidebar-logo-title{font-size:1rem;font-weight:800;color:#fff;letter-spacing:.03em}.sidebar-logo-sub{font-size:.68rem;color:#ffffff73;margin-top:1px}.sidebar-nav{flex:1;padding:.8rem .6rem;display:flex;flex-direction:column;gap:.25rem}.sidebar-nav-item{display:flex;align-items:center;gap:.7rem;width:100%;padding:.7rem .9rem;border:none;border-radius:10px;background:transparent;color:#ffffff8c;font-size:.92rem;font-weight:500;cursor:pointer;text-align:left;transition:all .18s}.sidebar-nav-item:hover{background:#ffffff12;color:#fff}.sidebar-nav-item.active{background:var(--primary);color:#fff;font-weight:700}.nav-icon{font-size:1.1rem}.nav-label{font-size:.9rem}.sidebar-footer{padding:.8rem;border-top:1px solid rgba(255,255,255,.07)}.sidebar-user{display:flex;align-items:center;gap:.6rem;margin-bottom:.6rem;padding:.5rem .3rem}.sidebar-avatar{width:36px;height:36px;border-radius:50%;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:1rem;flex-shrink:0}.sidebar-user-info{display:flex;flex-direction:column;min-width:0}.sidebar-user-name{font-size:.88rem;font-weight:700;color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar-user-role{font-size:.7rem;color:#ffffff73}.sidebar-logout{width:100%;padding:.55rem;border:1px solid rgba(255,255,255,.12);border-radius:8px;background:transparent;color:#ffffff8c;font-size:.82rem;cursor:pointer;transition:all .18s;display:flex;align-items:center;justify-content:center;gap:.4rem}.sidebar-logout:hover{background:#d32f2f40;color:#ef9a9a;border-color:#d32f2f66}.topbar{height:var(--topbar-h);background:#fff;border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 1rem;gap:.6rem;position:sticky;top:0;z-index:100;box-shadow:0 1px 4px #0000000f}.hamburger{display:none;background:none;border:none;font-size:1.4rem;cursor:pointer;color:var(--text);padding:.2rem .4rem;border-radius:6px}.hamburger:hover{background:var(--bg)}.topbar-title{font-size:1rem;font-weight:700;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topbar-right{display:flex;align-items:center;gap:.5rem}.online-pill,.sync-pill{font-size:.72rem;padding:3px 8px;border-radius:20px;font-weight:600;white-space:nowrap;flex-shrink:0}.online-pill.online{background:#e8f5e9;color:#2e7d32}.online-pill.offline{background:#ffebee;color:#c62828}.sync-pill{background:#e3f2fd;color:var(--primary);animation:pulse 1.2s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.main-area{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch}.page-content{padding:1.4rem 1.5rem 5rem;max-width:1100px;width:100%}.page-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:1.4rem;flex-wrap:wrap;gap:.8rem}.page-title{font-size:1.35rem;font-weight:800;color:var(--text)}.page-subtitle{font-size:.82rem;color:var(--text-muted);margin-top:2px}.dash-stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.8rem;margin-bottom:1.2rem}.dash-stat{background:#fff;border-radius:var(--radius);padding:1.1rem;text-align:center;box-shadow:var(--shadow);border-top:4px solid var(--primary)}.dash-stat-icon{font-size:1.5rem;display:block;margin-bottom:.4rem}.dash-stat-value{font-size:1.4rem;font-weight:800;color:var(--text)}.dash-stat-label{font-size:.72rem;color:var(--text-muted);margin-top:2px;text-transform:uppercase;letter-spacing:.05em}.dash-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.dash-card{background:#fff;border-radius:var(--radius);padding:1.1rem;box-shadow:var(--shadow)}.dash-card-title{font-size:.9rem;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:1rem}.breakdown-row{display:grid;grid-template-columns:80px 1fr 30px;align-items:center;gap:.5rem;margin-bottom:.6rem;font-size:.85rem}.breakdown-bar-wrap{background:#f0f0f0;border-radius:4px;height:8px;overflow:hidden}.breakdown-bar{height:8px;border-radius:4px;transition:width .4s}.breakdown-num{font-weight:700;font-size:.82rem;text-align:right}.bar-chart{display:flex;align-items:flex-end;gap:.4rem;height:100px;padding-top:1.2rem;position:relative}.bar-col{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;justify-content:flex-end}.bar{width:100%;background:var(--primary);border-radius:4px 4px 0 0;min-height:4px;transition:height .4s}.bar-val{font-size:.6rem;color:var(--text-muted);margin-bottom:2px;white-space:nowrap}.bar-label{font-size:.65rem;color:var(--text-muted);margin-top:4px;white-space:nowrap}.recent-table-wrap{overflow-x:auto}.filter-bar{display:flex;flex-wrap:wrap;gap:.6rem;margin-bottom:1rem}.filter-input{padding:.55rem .9rem;border:1.5px solid var(--border);border-radius:8px;font-size:1rem;outline:none;transition:border-color .2s;background:#fff;min-width:160px;flex:1 1 160px}.filter-input:focus{border-color:var(--primary)}.filter-date{min-width:140px}.filter-select{padding:.55rem 2rem .55rem .8rem;border:1.5px solid var(--border);border-radius:8px;font-size:1rem;background:#fff;outline:none;cursor:pointer;flex:1 1 140px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center}.filter-select:focus{border-color:var(--primary)}.table-card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.table-wrap{overflow-x:auto}.data-table{width:100%;border-collapse:collapse;font-size:.88rem;white-space:nowrap}.data-table th{background:#f8fafc;padding:.75rem 1rem;text-align:left;font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);border-bottom:1px solid var(--border)}.data-table td{padding:.75rem 1rem;border-bottom:1px solid #f0f4f8}.data-table tr:last-child td{border-bottom:none}.data-table tbody tr:hover{background:#f8fafc}.pagination{display:flex;align-items:center;gap:.4rem;padding:.8rem 1rem;border-top:1px solid var(--border);justify-content:center}.page-info{font-size:.82rem;color:var(--text-muted);padding:0 .4rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.3rem;padding:.6rem 1.2rem;border-radius:8px;font-size:.9rem;font-weight:600;cursor:pointer;border:none;transition:all .2s;white-space:nowrap}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-dark);transform:translateY(-1px)}.btn-secondary{background:#f1f5f9;color:var(--text)}.btn-secondary:hover{background:#e2e8f0}.btn-outline{background:transparent;border:1.5px solid var(--primary);color:var(--primary)}.btn-outline:hover{background:var(--primary-light)}.btn-sm{padding:.35rem .7rem;font-size:.8rem}.btn-icon{background:none;border:none;cursor:pointer;font-size:1.05rem;padding:4px 6px;border-radius:6px;transition:background .15s;line-height:1}.btn-icon:hover{background:#00000012}.btn-icon.danger:hover{background:#ffebee}.fab{position:fixed;bottom:1.5rem;right:1.5rem;width:56px;height:56px;border-radius:50%;background:var(--primary);color:#fff;font-size:1.8rem;border:none;cursor:pointer;box-shadow:var(--shadow-lg);display:none;align-items:center;justify-content:center;z-index:90;transition:transform .2s}.fab:hover{transform:scale(1.1)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:300;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:301;background:#fff;border-radius:16px;max-width:460px;width:calc(100vw - 2rem);max-height:92vh;overflow-y:auto;box-shadow:var(--shadow-lg)}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.2rem 1.4rem 0}.modal-header h2{font-size:1.15rem;font-weight:800}.modal-body{padding:1.2rem 1.4rem}.modal-actions{display:flex;gap:.7rem;padding:1rem 1.4rem;border-top:1px solid var(--border)}.modal-actions .btn{flex:1}.form-group{margin-bottom:1.1rem}.form-group label{display:block;font-size:.8rem;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.4rem}.form-input{width:100%;padding:.7rem 1rem;border:2px solid var(--border);border-radius:8px;font-size:1rem;outline:none;transition:border-color .2s;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-input:focus{border-color:var(--primary)}.type-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.6rem}.type-btn{display:flex;flex-direction:column;align-items:center;gap:4px;padding:.8rem .3rem;border:2px solid var(--border);border-radius:var(--radius);background:#fff;cursor:pointer;transition:all .18s}.type-btn:hover{border-color:var(--primary);background:var(--primary-light)}.type-btn.selected{border-color:var(--primary);background:var(--primary);color:#fff}.type-btn-icon{font-size:1.5rem}.type-btn-name{font-size:.82rem;font-weight:700}.type-btn-rate{font-size:.68rem;opacity:.8}.duration-row{display:flex;align-items:center;gap:.5rem}.dur-btn{width:40px;height:40px;flex-shrink:0;border:2px solid var(--border);border-radius:8px;background:#fff;cursor:pointer;font-size:1.3rem;display:flex;align-items:center;justify-content:center;transition:all .15s}.dur-btn:hover{border-color:var(--primary);color:var(--primary)}.dur-input{text-align:center;font-weight:800;font-size:1.2rem!important}.fee-preview{background:#f8fafc;border:1px solid var(--border);border-radius:var(--radius);padding:.9rem;margin-bottom:1.2rem}.fee-row{display:flex;justify-content:space-between;font-size:.88rem;padding:.25rem 0;color:var(--text-muted)}.fee-row span:last-child{font-weight:600;color:var(--text)}.fee-total{border-top:1px dashed var(--border);margin-top:.4rem;padding-top:.5rem!important;font-size:1rem!important}.fee-total span{font-weight:800!important;color:var(--success)!important;font-size:1.1rem}.receipt{padding:1.5rem;font-family:Courier New,Courier,monospace}.receipt-header{text-align:center;margin-bottom:1rem}.receipt-logo{font-size:2.5rem}.receipt-header h2{font-size:1.4rem;font-weight:900;letter-spacing:.05em}.receipt-subtitle{font-size:.8rem;color:var(--text-muted);margin-top:2px}.receipt-divider{border-top:1px dashed var(--border);margin:.8rem 0}.receipt-table{width:100%;border-collapse:collapse;font-size:.88rem}.receipt-table td{padding:.3rem 0}.receipt-table td:first-child{color:var(--text-muted);width:45%}.receipt-table td:last-child{font-weight:600;text-align:right}.receipt-total{display:flex;justify-content:space-between;align-items:center;padding:.5rem 0}.receipt-total span:first-child{font-weight:700;font-size:1rem}.receipt-amount{font-size:1.4rem;font-weight:900;color:var(--success)}.receipt-footer{text-align:center;font-size:.8rem;color:var(--text-muted);line-height:1.6}.receipt-date{margin-top:.4rem;font-size:.7rem}.synced-badge{background:#e8f5e9;color:#2e7d32;font-size:.7rem;padding:2px 8px;border-radius:12px;font-weight:600}.unsynced-badge{background:#fff3e0;color:#e65100;font-size:.7rem;padding:2px 8px;border-radius:12px;font-weight:600}.badge-admin{background:#e3f2fd;color:var(--primary);font-size:.7rem;padding:2px 8px;border-radius:12px;font-weight:700}.badge-user{background:#f3e5f5;color:#7b1fa2;font-size:.7rem;padding:2px 8px;border-radius:12px;font-weight:700}.badge-inactive{background:#ffebee;color:var(--danger);font-size:.7rem;padding:2px 8px;border-radius:12px;font-weight:700}.auth-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1565c0,#0d47a1);padding:1rem}.auth-card{background:#fff;border-radius:20px;padding:2rem 1.8rem;width:100%;max-width:400px;box-shadow:0 20px 60px #0000004d;text-align:center}.auth-logo{font-size:3rem;margin-bottom:.4rem}.auth-title{font-size:1.6rem;font-weight:900;color:var(--primary);margin-bottom:.2rem}.auth-subtitle{color:var(--text-muted);font-size:.88rem;margin-bottom:1.6rem}.auth-form{text-align:left}.auth-btn{width:100%;margin-top:.4rem;padding:.8rem;font-size:1rem}.auth-switch{margin-top:1.2rem;font-size:.88rem;color:var(--text-muted)}.link-btn{background:none;border:none;color:var(--primary);font-weight:700;cursor:pointer;font-size:inherit;text-decoration:underline}.uc-avatar{width:40px;height:40px;border-radius:50%;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:1.1rem;font-weight:800;flex-shrink:0}.add-user-form{display:grid;grid-template-columns:1fr 1fr;gap:.8rem}.add-user-form .form-group:last-child{grid-column:1 / -1}.add-user-form button{grid-column:1 / -1}.add-user-form .form-group{margin-bottom:0}.profile-info{display:flex;flex-direction:column;gap:.6rem}.profile-row{display:flex;justify-content:space-between;padding:.5rem 0;border-bottom:1px solid var(--border);font-size:.9rem}.profile-row span:first-child{color:var(--text-muted)}.empty-state{text-align:center;padding:3rem 1rem;color:var(--text-muted)}.empty-icon{font-size:3rem;display:block;margin-bottom:.8rem}@media print{body *{visibility:hidden!important}#printable-receipt,#printable-receipt *{visibility:visible!important}#printable-receipt{position:fixed!important;top:0!important;left:0!important;width:80mm!important;background:#fff!important;padding:10mm!important;margin:0!important;font-family:Courier New,Courier,monospace!important}.no-print{display:none!important}}@media (max-width: 900px){.dash-row{grid-template-columns:1fr}}@media (max-width: 768px){:root{--sidebar-w: 0px}.sidebar{transform:translate(-100%);width:260px;transition:transform .28s cubic-bezier(.4,0,.2,1)}.sidebar.open{transform:translate(0)}.sidebar-overlay{display:block}.app-body{margin-left:0}.hamburger,.fab{display:flex}.dash-stats-grid{grid-template-columns:repeat(2,1fr)}.dash-stat-value{font-size:1.1rem}.page-content{padding:1rem .75rem 5rem}.filter-bar{gap:.4rem}.filter-input,.filter-select{flex:1 1 calc(50% - .4rem);min-width:120px}.filter-input[type=text]{flex:1 1 100%}.topbar-right .online-pill .pill-text{display:none}.modal{top:auto;bottom:0;left:0;right:0;transform:none;width:100%;max-width:100%;border-radius:20px 20px 0 0;max-height:94vh;padding-bottom:env(safe-area-inset-bottom)}.auth-card{padding:1.5rem 1.2rem}}@media (max-width: 480px){.dash-stats-grid{grid-template-columns:repeat(2,1fr)}.dash-stat{padding:.85rem .6rem}.dash-stat-value{font-size:.95rem}.dash-stat-label{font-size:.62rem}.add-user-form{grid-template-columns:1fr}.online-pill .pill-text{display:none}.topbar-title{font-size:.9rem}.page-header{gap:.5rem}.page-header .btn{font-size:.8rem;padding:.5rem .8rem}.recent-table-wrap .data-table th:nth-child(4),.recent-table-wrap .data-table td:nth-child(4),.recent-table-wrap .data-table th:nth-child(5),.recent-table-wrap .data-table td:nth-child(5){display:none}.data-table th,.data-table td{padding:.6rem;font-size:.82rem}.dash-stat-value{word-break:break-all}}.sidebar-download{width:100%;padding:.6rem;margin-bottom:.5rem;border:1px solid rgba(255,255,255,.18);border-radius:8px;background:#1976d24d;color:#fff;font-size:.82rem;font-weight:600;cursor:pointer;transition:all .18s;display:flex;align-items:center;justify-content:center;gap:.4rem}.sidebar-download:hover{background:#1976d28c;border-color:#ffffff59}.settings-card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:1rem;overflow:hidden}.settings-card-header{padding:.85rem 1.2rem;background:#f8fafc;border-bottom:1px solid var(--border);font-weight:700;font-size:.95rem}.settings-card-body{padding:1.2rem}.settings-hint{font-size:.82rem;color:var(--text-muted);margin-bottom:1rem}.rates-grid{display:flex;flex-direction:column;gap:.8rem;margin-bottom:1.2rem}.rate-row{display:flex;align-items:center;justify-content:space-between;gap:1rem}.rate-label{font-size:.95rem;font-weight:600;min-width:80px}.rate-input-wrap{display:flex;align-items:center;gap:.4rem;border:2px solid var(--border);border-radius:8px;overflow:hidden;background:#fff;transition:border-color .2s}.rate-input-wrap:focus-within{border-color:var(--primary)}.rate-prefix{padding:0 .6rem;font-size:.82rem;font-weight:700;color:var(--text-muted);border-right:1px solid var(--border);height:38px;display:flex;align-items:center;background:#f8fafc}.rate-input{border:none!important;border-radius:0!important;width:90px!important;text-align:center;font-weight:700;font-size:1rem}.rate-input:focus{border:none;outline:none}.settings-actions{display:flex;gap:.7rem;justify-content:flex-end}.install-banner{display:flex;flex-direction:column;gap:1rem}.install-banner-info{display:flex;gap:1rem;align-items:flex-start}.install-banner-info strong{display:block;font-size:1rem;margin-bottom:.3rem}.install-banner-info p{font-size:.83rem;color:var(--text-muted);line-height:1.5}.install-note{margin-top:.4rem;font-style:italic}.install-btn{width:100%;padding:.85rem;font-size:1rem}.install-done{display:flex;align-items:center;gap:1rem}.install-done-icon{font-size:2rem}.install-done strong{display:block}.install-done p{font-size:.83rem;color:var(--text-muted)}@media (max-width: 768px){.btn,.sidebar-nav-item,.tab-btn,.dur-btn,.type-btn,.sidebar-logout,.sidebar-download{min-height:44px}.sidebar{overflow-y:auto;-webkit-overflow-scrolling:touch}.table-wrap,.recent-table-wrap{-webkit-overflow-scrolling:touch}.settings-actions{flex-direction:column-reverse}.settings-actions .btn{width:100%}.apk-active{flex-direction:column;align-items:center}.apk-link-box{min-width:0;width:100%}.apk-link-actions{justify-content:center}.apk-url-input-row{flex-direction:column}.rate-row{flex-wrap:wrap}.rate-input{width:70px!important}.type-btn{padding:1rem .3rem}.type-btn-icon{font-size:1.8rem}.fab{bottom:calc(1.5rem + env(safe-area-inset-bottom))}.page-content{padding-bottom:calc(5rem + env(safe-area-inset-bottom))}}.apk-active{display:flex;gap:1.5rem;flex-wrap:wrap;align-items:flex-start;margin-bottom:1rem}.apk-qr-wrap{display:flex;flex-direction:column;align-items:center;gap:.4rem;flex-shrink:0}.apk-qr-hint{font-size:.72rem;color:var(--text-muted);text-align:center;max-width:160px}.apk-link-box{flex:1;min-width:220px;display:flex;flex-direction:column;gap:.8rem}.apk-url-display{display:flex;align-items:center;gap:.5rem;background:#f8fafc;border:1px solid var(--border);border-radius:8px;padding:.6rem .8rem;overflow:hidden}.apk-url-icon{font-size:1rem;flex-shrink:0}.apk-url-text{font-size:.78rem;color:var(--primary);word-break:break-all;flex:1}.apk-link-actions{display:flex;flex-wrap:wrap;gap:.4rem}.apk-divider{border:none;border-top:1px dashed var(--border);margin:1rem 0}.apk-upload-section{margin-bottom:.5rem}.apk-section-title{font-size:.88rem;font-weight:700;margin-bottom:.3rem;color:var(--text)}.apk-no-link{background:#fff8e1;border:1px solid #FFE082;border-radius:8px;padding:.7rem 1rem;color:#f57f17!important}.apk-url-input-row{display:flex;gap:.6rem;flex-wrap:wrap}.apk-url-input-row .form-input{flex:1;min-width:200px}.apk-url-input-row .btn{white-space:nowrap}.upload-progress{display:flex;align-items:center;gap:.8rem}.upload-bar{flex:1;height:10px;background:#e2e8f0;border-radius:10px;overflow:hidden}.upload-bar-fill{height:100%;background:var(--primary);border-radius:10px;transition:width .3s}.upload-pct{font-size:.82rem;font-weight:700;color:var(--primary);min-width:38px}
