:root{--color-primary: #1e40af;--color-primary-light: #3b82f6;--color-success: #059669;--color-warning: #d97706;--color-danger: #dc2626;--color-bg: #f8fafc;--color-surface: #ffffff;--color-text: #0f172a;--color-text-muted: #64748b;--color-border: #e2e8f0;--radius: 12px;--shadow: 0 1px 3px rgba(0, 0, 0, .08);--nav-height: 64px;--safe-bottom: env(safe-area-inset-bottom, 0px);font-family:Segoe UI,system-ui,-apple-system,sans-serif;line-height:1.5;color:var(--color-text);background:var(--color-bg)}*{box-sizing:border-box;margin:0;padding:0}body{min-height:100dvh;-webkit-font-smoothing:antialiased}#root{min-height:100dvh}button,input,select{font:inherit}button{cursor:pointer;border:none;background:none}a{color:inherit;text-decoration:none}.app-shell{min-height:100dvh;display:flex;flex-direction:column;max-width:480px;margin:0 auto;background:var(--color-bg)}.app-shell.wide{max-width:1200px}.page{flex:1;padding:16px;padding-bottom:calc(var(--nav-height) + var(--safe-bottom) + 16px)}.page-header{margin-bottom:20px}.page-header h1{font-size:1.375rem;font-weight:700}.page-header p{color:var(--color-text-muted);font-size:.875rem;margin-top:4px}.card{background:var(--color-surface);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);border:1px solid var(--color-border);margin-bottom:12px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 20px;border-radius:10px;font-weight:600;font-size:.9375rem;transition:opacity .15s}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--color-primary);color:#fff;width:100%}.btn-secondary{background:var(--color-border);color:var(--color-text)}.btn-danger{background:var(--color-danger);color:#fff}.form-group{margin-bottom:16px}.form-group label{display:block;font-size:.875rem;font-weight:600;margin-bottom:6px}.form-group input,.form-group select{width:100%;padding:12px 14px;border:1px solid var(--color-border);border-radius:10px;background:#fff}.form-group input:focus{outline:2px solid var(--color-primary-light);border-color:var(--color-primary)}.badge{display:inline-block;padding:2px 8px;border-radius:6px;font-size:.75rem;font-weight:600}.badge-success{background:#d1fae5;color:#065f46}.badge-warning{background:#fef3c7;color:#92400e}.badge-danger{background:#fee2e2;color:#991b1b}.badge-info{background:#dbeafe;color:#1e40af}.bottom-nav{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:480px;height:calc(var(--nav-height) + var(--safe-bottom));padding-bottom:var(--safe-bottom);background:var(--color-surface);border-top:1px solid var(--color-border);display:flex;z-index:100}.bottom-nav a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;font-size:.6875rem;color:var(--color-text-muted);padding:8px 4px}.bottom-nav a.active{color:var(--color-primary);font-weight:600}.bottom-nav .nav-icon{font-size:1.25rem}.stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:16px}.stat-card{background:var(--color-surface);border-radius:var(--radius);padding:14px;border:1px solid var(--color-border)}.stat-card .value{font-size:1.5rem;font-weight:700;color:var(--color-primary)}.stat-card .label{font-size:.75rem;color:var(--color-text-muted);margin-top:2px}.table-wrap{overflow-x:auto}table.data-table{width:100%;border-collapse:collapse;font-size:.8125rem}table.data-table th,table.data-table td{padding:10px 8px;text-align:left;border-bottom:1px solid var(--color-border)}table.data-table th{font-weight:600;color:var(--color-text-muted);white-space:nowrap}.empty-state{text-align:center;padding:40px 20px;color:var(--color-text-muted)}.error-banner{background:#fee2e2;color:#991b1b;padding:12px 16px;border-radius:var(--radius);margin-bottom:16px;font-size:.875rem}.success-banner{background:#d1fae5;color:#065f46;padding:12px 16px;border-radius:var(--radius);margin-bottom:16px;font-size:.875rem}.loading{text-align:center;padding:40px;color:var(--color-text-muted)}.loading-skeleton{display:flex;flex-direction:column;gap:12px;padding:24px 16px;max-width:420px;margin:0 auto}.loading-skeleton .sk-line{height:12px;border-radius:6px;background:linear-gradient(90deg,#e8eef5,#f5f8fb,#e8eef5);background-size:200% 100%;animation:sk-shine 1.2s ease-in-out infinite}.loading-skeleton .sk-line.lg{height:20px;width:60%}.loading-skeleton .sk-line.md{width:90%}.loading-skeleton .sk-line.sm{width:40%}@keyframes sk-shine{0%{background-position:100% 0}to{background-position:-100% 0}}.payslip-sheet{background:var(--color-surface, #fff);border:1px solid var(--color-border);border-radius:var(--radius);overflow:hidden;max-width:100%}.payslip-head{padding:16px;border-bottom:1px solid var(--color-border)}.payslip-name{font-size:1.05rem;font-weight:700}.payslip-period{margin-top:4px;font-size:.8125rem;color:var(--color-text-muted)}.payslip-group{border-bottom:1px solid var(--color-border)}.payslip-group-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;font-size:.8125rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase}.tone-income .payslip-group-row{background:#e8f1fb;color:#1e3a5f}.tone-other .payslip-group-row{background:#eef6ee;color:#1e3f22}.tone-deduct .payslip-group-row{background:#f8ecec;color:#5c1f1f}.tone-ins .payslip-group-row{background:#f3eef8;color:#3d2a55}.tone-tax .payslip-group-row{background:#f7f0e6;color:#5a3d12}.payslip-lines{list-style:none;margin:0;padding:0}.payslip-line{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;width:100%;padding:10px 16px;border:0;background:transparent;font:inherit;text-align:left;cursor:pointer;color:inherit}.payslip-label{flex:1 1 auto;min-width:0;font-size:.875rem;overflow-wrap:anywhere}.payslip-amt{flex:0 0 auto;font-variant-numeric:tabular-nums;font-size:.875rem;text-align:right;white-space:nowrap}.payslip-meta{padding:0 16px 10px 28px;font-size:.75rem;color:var(--color-text-muted);overflow-wrap:anywhere}.payslip-net{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:16px;background:#1e40af;color:#fff;font-size:1.125rem;font-weight:800}.payslip-net .payslip-amt{font-size:1.25rem}.payslip-foot{display:grid;grid-template-columns:1fr auto;gap:6px 12px;padding:12px 16px 16px;font-size:.75rem;color:var(--color-text-muted)}@media(min-width:768px){.app-shell.wide .page{padding:24px 32px}.payslip-sheet{max-width:480px}}
