:root{--bg:#0b1020;--sidebar:#0f1528;--panel:#121a2f;--panel2:#17213a;--text:#f4f7ff;--muted:#8d99b5;--border:#24304b;--accent:#8ba6ff;--accent2:#50d5b7;--danger:#ff7e8c;--warning:#f3c969;--shadow:0 14px 34px rgba(0,0,0,.18)}
*{box-sizing:border-box}html{background:var(--bg);color-scheme:dark}body{margin:0;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:var(--bg);color:var(--text)}button,input,select{font:inherit}.app-shell{min-height:100vh;display:grid;grid-template-columns:230px minmax(0,1fr)}.sidebar{background:var(--sidebar);border-right:1px solid var(--border);padding:22px 16px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.brand{display:flex;gap:11px;align-items:center;padding:0 8px 24px}.brand-mark{width:38px;height:38px;border-radius:12px;background:linear-gradient(135deg,var(--accent),var(--accent2));display:grid;place-items:center;color:#08101f;font-weight:900}.brand strong{display:block}.brand small{display:block;color:var(--muted);margin-top:2px}.sidebar nav{display:grid;gap:8px}.nav-item{border:0;background:transparent;color:var(--muted);padding:12px 14px;border-radius:12px;display:flex;gap:12px;align-items:center;text-align:left;cursor:pointer;min-height:44px}.nav-item:hover,.nav-item.active{background:var(--panel2);color:var(--text)}.side-footer{margin-top:auto;border-top:1px solid var(--border);padding:18px 8px 0;color:var(--muted);font-size:12px;display:flex;gap:8px;align-items:center}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--accent2)}.main{padding:24px 28px 42px;min-width:0}.topbar{display:flex;justify-content:space-between;gap:20px;align-items:center;margin-bottom:24px}.topbar h1{margin:0;font-size:28px}.topbar p{margin:5px 0 0;color:var(--muted)}.top-actions{display:flex;gap:10px;align-items:center}.month-picker{display:flex;background:var(--panel);border:1px solid var(--border);border-radius:12px;overflow:hidden;height:44px}.month-picker button{width:38px;border:0;background:transparent;color:var(--muted);font-size:22px;cursor:pointer}.month-picker input{border:0;background:transparent;color:var(--text);padding:0 8px;min-width:146px}.primary,.secondary,.ghost,.icon-btn{min-height:44px;border-radius:11px;border:1px solid transparent;padding:0 15px;cursor:pointer}.primary{background:var(--accent);color:#091124;font-weight:750}.secondary{background:var(--panel2);color:var(--text);border-color:var(--border)}.ghost{background:transparent;color:var(--accent);border-color:var(--border)}.icon-btn{width:44px;padding:0;background:transparent;color:var(--muted);font-size:26px}.view{display:none}.view.active{display:block}.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:14px}.metric-card,.panel{background:var(--panel);border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow)}.metric-card{padding:18px}.metric-card span{display:block;color:var(--muted);font-size:13px}.metric-card strong{display:block;font-size:26px;margin:12px 0 8px;letter-spacing:-.5px}.metric-card small{color:var(--muted)}.positive{color:var(--accent2)!important}.negative{color:var(--danger)!important}.grid-two{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(300px,.85fr);gap:14px}.grid-two.lower{margin-top:14px;grid-template-columns:1fr 1fr}.panel{padding:18px;min-width:0}.panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:18px}.panel-head h2{margin:0;font-size:16px}.panel-head p{margin:5px 0 0;color:var(--muted);font-size:13px}.chart{height:270px;min-width:0}.chart svg{width:100%;height:100%;display:block}.donut-wrap{display:grid;grid-template-columns:170px minmax(0,1fr);gap:18px;align-items:center;min-height:270px}#donutChart svg{width:170px;height:170px;display:block}.legend{display:grid;gap:9px}.legend-row{display:grid;grid-template-columns:10px minmax(0,1fr) auto;gap:8px;align-items:center;font-size:13px}.legend-dot{width:9px;height:9px;border-radius:50%}.legend-row span:nth-child(2){color:var(--muted);overflow:hidden;text-overflow:ellipsis}.budget-list,.transaction-list{display:grid;gap:10px}.budget-row{padding:11px 0;border-bottom:1px solid var(--border)}.budget-row:last-child{border-bottom:0}.budget-top{display:flex;justify-content:space-between;gap:12px;font-size:13px}.budget-top span{color:var(--muted)}.progress{height:7px;background:#222c44;border-radius:99px;overflow:hidden;margin-top:8px}.progress>i{display:block;height:100%;border-radius:inherit;background:var(--accent2);max-width:100%}.progress.over>i{background:var(--danger)}.txn-row{display:grid;grid-template-columns:38px minmax(0,1fr) auto;gap:11px;align-items:center;padding:10px 0;border-bottom:1px solid var(--border)}.txn-row:last-child{border-bottom:0}.txn-date{width:38px;height:38px;border-radius:10px;background:var(--panel2);display:grid;place-items:center;color:var(--accent);font-weight:800}.txn-main{min-width:0}.txn-main strong{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.txn-main small{color:var(--muted)}.amount.income{color:var(--accent2)}.amount.expense{color:var(--text)}.table-wrap{overflow:auto}.txn-table{width:100%;border-collapse:collapse;min-width:720px}.txn-table th,.txn-table td{text-align:left;padding:12px 10px;border-bottom:1px solid var(--border);font-size:13px}.txn-table th{color:var(--muted);font-weight:600}.row-actions{display:flex;gap:7px}.row-actions button{border:0;background:var(--panel2);color:var(--muted);width:34px;height:34px;border-radius:9px;cursor:pointer}.inline-form{display:grid;grid-template-columns:1fr 1fr auto;gap:12px;align-items:end}.inline-form label,.dialog-form label{display:grid;gap:7px;color:var(--muted);font-size:13px}.inline-form input,.inline-form select,.dialog-form input,.dialog-form select,.import-box input{width:100%;min-height:44px;background:#0d1427;color:var(--text);border:1px solid var(--border);border-radius:10px;padding:0 12px;font-size:16px}.import-box{display:grid;gap:14px;color:var(--muted)}.import-box p{line-height:1.55;margin:0}.notice{font-size:13px;line-height:1.5}.notice.error{color:var(--danger)}.notice.ok{color:var(--accent2)}dialog{border:1px solid var(--border);border-radius:18px;background:var(--panel);color:var(--text);width:min(620px,calc(100% - 28px));padding:0;box-shadow:0 30px 70px rgba(0,0,0,.45)}dialog::backdrop{background:rgba(3,7,18,.72);backdrop-filter:blur(4px)}.dialog-form{padding:20px}.dialog-form.small{max-width:440px;margin:auto}.dialog-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:18px}.dialog-head h2{margin:0;font-size:20px}.dialog-head p{margin:5px 0 0;color:var(--muted);font-size:13px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.form-grid .wide{grid-column:1/-1}.hidden{display:none!important}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.toast{position:fixed;right:20px;bottom:20px;background:#1d2945;border:1px solid var(--border);padding:12px 15px;border-radius:11px;box-shadow:var(--shadow);opacity:0;pointer-events:none;transform:translateY(8px);transition:.2s}.toast.show{opacity:1;transform:none}.empty{color:var(--muted);padding:26px 8px;text-align:center;border:1px dashed var(--border);border-radius:12px}.tag{display:inline-flex;padding:4px 8px;border-radius:999px;background:var(--panel2);color:var(--muted);font-size:11px}
@media(max-width:1050px){.metrics{grid-template-columns:repeat(2,1fr)}.grid-two,.grid-two.lower{grid-template-columns:1fr}.donut-wrap{grid-template-columns:180px 1fr}}
@media(max-width:760px){.app-shell{display:block;padding-bottom:70px}.sidebar{position:fixed;z-index:20;left:0;right:0;bottom:0;top:auto;height:auto;border-right:0;border-top:1px solid var(--border);padding:8px;background:rgba(15,21,40,.96);backdrop-filter:blur(14px)}.brand,.side-footer{display:none}.sidebar nav{grid-template-columns:repeat(auto-fit,minmax(52px,1fr));gap:4px}.nav-item{justify-content:center;padding:9px 6px;min-height:52px;font-size:18px}.nav-item span{display:none}.main{padding:18px 14px 24px}.topbar{align-items:flex-start;flex-direction:column}.topbar h1{font-size:24px}.top-actions{width:100%}.month-picker{flex:1}.month-picker input{min-width:0;flex:1}.top-actions>.primary{padding:0 12px}.metrics{grid-template-columns:1fr 1fr;gap:10px}.metric-card{padding:14px}.metric-card strong{font-size:21px}.grid-two{display:block}.grid-two>.panel+.panel,.grid-two.lower>.panel+.panel{margin-top:12px}.panel{padding:15px}.donut-wrap{grid-template-columns:1fr}.donut-wrap>#donutChart{display:grid;place-items:center}.legend{grid-template-columns:1fr 1fr}.chart{height:230px}.inline-form{grid-template-columns:1fr}.responsive{align-items:stretch;flex-direction:column}.responsive .primary{width:100%}.form-grid{grid-template-columns:1fr}.form-grid .wide{grid-column:auto}.toast{left:14px;right:14px;bottom:82px}.dialog-actions>*{flex:1}}
@media(max-width:430px){.metrics{grid-template-columns:1fr}.legend{grid-template-columns:1fr}.top-actions{flex-wrap:wrap}.month-picker{min-width:100%}.top-actions>.primary{width:100%}}

/* Authentification */
.login-screen{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 20% 10%,rgba(139,166,255,.14),transparent 32%),radial-gradient(circle at 85% 85%,rgba(80,213,183,.10),transparent 30%),var(--bg)}
.login-card{width:min(430px,100%);background:var(--panel);border:1px solid var(--border);border-radius:22px;box-shadow:0 26px 70px rgba(0,0,0,.3);padding:28px;display:grid;gap:18px}
.login-brand{display:flex;align-items:center;gap:12px}.login-brand strong{display:block;font-size:17px}.login-brand small{display:block;color:var(--muted);margin-top:2px}
.login-copy h1{font-size:28px;margin:8px 0 6px}.login-copy p{margin:0;color:var(--muted);line-height:1.5}
.login-card>label{display:grid;gap:8px;color:var(--muted);font-size:13px}.login-card input{width:100%;min-height:48px;background:#0d1427;color:var(--text);border:1px solid var(--border);border-radius:11px;padding:0 13px;font-size:16px;outline:none}.login-card input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(139,166,255,.12)}
.password-field{position:relative}.password-field input{padding-right:86px}.password-toggle{position:absolute;right:5px;top:5px;height:38px;border:0;background:var(--panel2);color:var(--muted);border-radius:8px;padding:0 10px;cursor:pointer}
.login-submit{width:100%;min-height:48px}.login-submit:disabled{opacity:.6;cursor:wait}.login-error{min-height:18px;color:var(--danger);font-size:13px}.login-note{color:var(--muted);text-align:center;line-height:1.4}
.oidc-login{display:flex;align-items:center;justify-content:center;text-decoration:none}.local-login{display:grid;gap:16px}.auth-separator{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.auth-separator:before,.auth-separator:after{content:"";height:1px;background:var(--border);flex:1}
.logout-btn{white-space:nowrap}
@media(max-width:760px){.login-screen{padding:16px}.login-card{padding:22px;border-radius:18px}.logout-btn{width:100%}}


/* Comptes et récupération de mot de passe */
.auth-form{display:grid;gap:18px}.auth-form>label,.user-form>label{display:grid;gap:8px;color:var(--muted);font-size:13px}.auth-form input,.user-form input[type="email"]{width:100%;min-height:48px;background:#0d1427;color:var(--text);border:1px solid var(--border);border-radius:11px;padding:0 13px;font-size:16px;outline:none}.auth-form input:focus,.user-form input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(139,166,255,.12)}
.text-button{min-height:44px;border:0;background:transparent;color:var(--accent);cursor:pointer;text-align:center}.login-error.neutral{color:var(--muted)}
button:disabled,input:disabled{opacity:.5;cursor:not-allowed}.user-form{display:grid;gap:14px}.check-line,.mini-check{display:flex!important;align-items:center;gap:9px}.check-line input,.mini-check input{width:18px;height:18px;accent-color:var(--accent)}
.users-grid{grid-template-columns:minmax(260px,.7fr) minmax(0,1.3fr)}.users-list{display:grid;gap:10px}.user-row{border:1px solid var(--border);border-radius:13px;background:var(--panel2);padding:13px;display:grid;gap:12px}.user-identity{min-width:0}.user-identity strong{display:block;overflow-wrap:anywhere}.user-identity small{display:block;color:var(--muted);margin-top:5px;line-height:1.35}.user-controls{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.mini-check{font-size:12px;color:var(--muted);min-height:38px;padding:0 4px}.compact{min-height:38px;padding:0 11px;border-radius:9px}.danger-button{border:1px solid rgba(255,126,140,.35);background:rgba(255,126,140,.08);color:var(--danger);cursor:pointer}.link-delete{border:0;background:none;color:var(--danger);cursor:pointer;padding:0}.dialog-cancel{cursor:pointer}
@media(max-width:1050px){.users-grid{grid-template-columns:1fr}}
@media(max-width:760px){.auth-form{gap:16px}.users-list-panel{margin-top:12px}.user-controls{display:grid;grid-template-columns:1fr 1fr}.user-controls .compact{width:100%}}
