:root{--bg:#fbf6ef;--bg2:#f2eae0;--panel:#fff;--ink:#1a0a05;--ink2:#4d2d1e;--ink3:#9c7b6a;--primary:#b91c1c;--primary-l:#dc2626;--accent:#c9971c;--accent-l:#e8b830;--teal:#0e7490;--green:#15803d;--red:#b91c1c;--amber:#c9971c;--border:#b91c1c24;--shadow:0 2px 16px #1a0a0517;--shadow-lg:0 8px 40px #1a0a0529;--radius:12px;--radius-sm:8px;--radius-lg:20px;--sidebar-w:260px;--topbar-h:64px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px}body{color:var(--ink);background:var(--bg);min-height:100vh;font-family:Nunito,sans-serif;font-weight:400;line-height:1.6}body:before{content:"";pointer-events:none;z-index:9999;opacity:.025;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-repeat:repeat;background-size:256px 256px;position:fixed;inset:0}a{color:var(--primary);text-decoration:none;transition:color .15s}a:hover{color:var(--primary-l)}img{max-width:100%;display:block}ul{list-style:none}h1,h2,h3,h4,h5,h6{color:var(--ink);font-family:Nunito,sans-serif;font-weight:700;line-height:1.25}.display{font-family:Yeseva One,serif;font-weight:400}.geo-bg{background-color:var(--bg);background-image:url("data:image/svg+xml,%3Csvg width='80' height='80' viewBox='0 0 80 80' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' stroke='%23B91C1C' stroke-width='0.6' opacity='0.08'%3E%3Cpath d='M0 0h40v40H0zM40 40h40v40H40z'/%3E%3Cpath d='M20 0L40 20 20 40 0 20zM60 40l20 20-20 20-20-20z'/%3E%3Ccircle cx='20' cy='20' r='8'/%3E%3Ccircle cx='60' cy='60' r='8'/%3E%3Cpath d='M40 0l20 20-20 20L20 20zM0 40l20 20L0 80zM80 0L60 20l20 20z'/%3E%3C/g%3E%3C/svg%3E");background-size:80px 80px}button,.btn{cursor:pointer;border-radius:var(--radius-sm);border:none;justify-content:center;align-items:center;gap:.5rem;padding:.65rem 1.4rem;font-family:Nunito,sans-serif;font-size:.95rem;font-weight:600;line-height:1.4;transition:all .18s;display:inline-flex}.btn-primary{background:var(--primary);color:#fff;border:2px solid var(--primary)}.btn-primary:hover{background:var(--primary-l);border-color:var(--primary-l)}.btn-primary:active{transform:translateY(1px)}.btn-outline{color:var(--primary);border:2px solid var(--primary);background:0 0}.btn-outline:hover{background:var(--primary);color:#fff}.btn-ghost{color:var(--primary);background:0 0;border:2px solid #0000;padding:.5rem 1rem}.btn-ghost:hover{background:#b91c1c0f}.btn-block{width:100%}.btn-sm{padding:.45rem 1rem;font-size:.85rem}label{color:var(--ink2);margin-bottom:.35rem;font-size:.875rem;font-weight:600;display:block}input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],input[type=search],textarea,select{border:2px solid var(--border);border-radius:var(--radius-sm);background:var(--panel);width:100%;color:var(--ink);outline:none;padding:.7rem .9rem;font-family:Nunito,sans-serif;font-size:.95rem;transition:border-color .18s,box-shadow .18s}input:focus,textarea:focus,select:focus{border-color:var(--primary);box-shadow:0 0 0 3px #b91c1c1a}input::placeholder,textarea::placeholder{color:var(--ink3)}.form-group{margin-bottom:1.1rem}.form-error{color:var(--red);margin-top:.35rem;font-size:.85rem;font-weight:500}.form-success{color:var(--green);border-radius:var(--radius-sm);background:#15803d14;border:1px solid #15803d40;margin-bottom:1rem;padding:.75rem 1rem;font-size:.9rem;font-weight:500}.form-info{color:var(--teal);border-radius:var(--radius-sm);background:#0e749014;border:1px solid #0e749033;margin-bottom:1rem;padding:.75rem 1rem;font-size:.9rem;font-weight:500}.badge{letter-spacing:.02em;text-transform:uppercase;border-radius:999px;align-items:center;padding:.2rem .65rem;font-size:.75rem;font-weight:700;display:inline-flex}.badge-paid{color:var(--green);background:#15803d1f}.badge-pending{color:var(--amber);background:#c9971c1f}.badge-overdue{color:var(--red);background:#b91c1c1f}.badge-open{color:var(--teal);background:#0e74901f}.badge-wip{color:var(--amber);background:#c9971c1f}.badge-high{color:var(--red);background:#b91c1c1f}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.5rem}.card-lg{border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:2rem}.auth-page{justify-content:center;align-items:center;min-height:100vh;padding:2rem 1rem;display:flex}.auth-card{background:var(--panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:420px;padding:2.5rem 2rem;position:relative}.auth-brand{text-align:center;margin-bottom:2rem}.auth-brand h1{color:var(--primary);margin-bottom:.25rem;font-family:Yeseva One,serif;font-size:1.75rem;font-weight:400}.auth-brand p{color:var(--ink3);font-size:.9rem}.auth-footer{text-align:center;color:var(--ink3);margin-top:1.5rem;font-size:.875rem}.auth-footer a{font-weight:600}.auth-divider{color:var(--ink3);align-items:center;gap:1rem;margin:1.25rem 0;font-size:.85rem;display:flex}.auth-divider:before,.auth-divider:after{content:"";background:var(--border);flex:1;height:1px}.app-layout{min-height:100vh;display:flex}.sidebar{width:var(--sidebar-w);background:var(--panel);border-right:1px solid var(--border);z-index:100;flex-direction:column;transition:transform .25s;display:flex;position:fixed;top:0;bottom:0;left:0}.sidebar-brand{background:var(--primary);color:#fff;align-items:center;gap:.75rem;padding:1.25rem 1.5rem;display:flex}.sidebar-brand h2{color:#fff;font-family:Yeseva One,serif;font-size:1.2rem;font-weight:400}.sidebar-brand-icon{border-radius:var(--radius-sm);background:#fff3;justify-content:center;align-items:center;width:36px;height:36px;font-size:1.2rem;display:flex}.sidebar-nav{flex:1;padding:1rem 0;overflow-y:auto}.sidebar-nav a{color:var(--ink2);border-left:3px solid #0000;align-items:center;gap:.75rem;padding:.7rem 1.5rem;font-size:.925rem;font-weight:500;transition:all .15s;display:flex}.sidebar-nav a:hover{color:var(--primary);background:#b91c1c0a}.sidebar-nav a.active{color:var(--primary);border-left-color:var(--primary);background:#b91c1c0f;font-weight:600}.sidebar-nav-icon{text-align:center;flex-shrink:0;width:1.5rem;font-size:1.15rem}.sidebar-footer{border-top:1px solid var(--border);padding:1rem 1.5rem}.app-main{margin-left:var(--sidebar-w);flex-direction:column;flex:1;min-height:100vh;display:flex}.topbar{height:var(--topbar-h);background:var(--panel);border-bottom:1px solid var(--border);z-index:50;justify-content:space-between;align-items:center;padding:0 2rem;display:flex;position:sticky;top:0}.topbar-title{color:var(--ink);font-size:1.1rem;font-weight:700}.topbar-actions{align-items:center;gap:1rem;display:flex}.topbar-user{color:var(--ink3);font-size:.875rem;font-weight:500}.mobile-menu-btn{color:var(--ink);cursor:pointer;background:0 0;border:none;padding:.25rem;font-size:1.5rem;display:none}.app-content{flex:1;padding:2rem}.spinner{border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;width:32px;height:32px;animation:.7s linear infinite spin;display:inline-block}.spinner-sm{border-width:2px;width:18px;height:18px}.spinner-page{justify-content:center;align-items:center;min-height:100vh;display:flex}@keyframes spin{to{transform:rotate(360deg)}}.sidebar-overlay{z-index:99;background:#1a0a0566;display:none;position:fixed;inset:0}.sidebar-overlay.open{display:block}@media (width<=768px){.sidebar{transform:translate(-100%)}.sidebar.open{transform:translate(0)}.app-main{margin-left:0}.mobile-menu-btn{display:block}.topbar{padding:0 1rem}.app-content{padding:1.25rem}.auth-card{padding:2rem 1.5rem}}@media (width<=480px){.auth-card{padding:1.75rem 1.25rem}.auth-brand h1{font-size:1.5rem}}.text-center{text-align:center}.text-muted{color:var(--ink3)}.mt-1{margin-top:.5rem}.mt-2{margin-top:1rem}.mt-3{margin-top:1.5rem}.mb-1{margin-bottom:.5rem}.mb-2{margin-bottom:1rem}.mb-3{margin-bottom:1.5rem}.gap-1{gap:.5rem}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}
