:root{--c-cyan: #00E5FF;--c-violet: #7B61FF;--c-blue: #1D4ED8;--c-magenta: #FF00D4;--void: #050505;--carbon: #0F172A;--night: #0A1128;--bg: #070b16;--bg-2: rgba(15, 23, 42, .62);--panel-2: rgba(23, 34, 58, .58);--panel-3: rgba(30, 43, 72, .6);--border: rgba(150, 180, 230, .14);--border-2: rgba(0, 229, 255, .3);--cyan: #00E5FF;--cyan-deep: #1D4ED8;--orange: #FF9F1C;--orange-deep:#e07c0c;--slate: #3a506b;--green: #2BF5C8;--red: #FF4D6D;--yellow: #FFD24C;--text: #EAF6FF;--text-dim: #9FB4D4;--text-mut: #647C9F;--radius: 16px;--radius-sm: 10px;--radius-lg: 22px;--radius-xl: 30px;--shadow: 0 20px 50px rgba(0, 0, 0, .55);--shadow-sm: 0 8px 24px rgba(0, 0, 0, .4);--blur: blur(16px) saturate(150%);--accent: #00E5FF;--accent-deep: #1D4ED8}.btn-primary,.seg button.active,.nav a,.nav a .ic,.tabs button.active,.badge.role,.badge.en_cours,.brand-logo,.stat:after,.notif-badge{transition:background-color .45s ease,border-color .45s ease,color .45s ease,box-shadow .45s ease}*{box-sizing:border-box}*::selection{background:color-mix(in srgb,var(--accent) 38%,transparent);color:#fff}html,body,#root{height:100%;margin:0}body{font-family:Inter,Segoe UI,Roboto,system-ui,-apple-system,sans-serif;color:var(--text);font-size:14px;-webkit-font-smoothing:antialiased;background-color:#060509}a{color:var(--accent);text-decoration:none}h1,h2,h3,h4{margin:0 0 .25em;font-weight:700;letter-spacing:.2px}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--accent) 38%,#1a2742);border-radius:999px;border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--accent) 60%,#1a2742);background-clip:padding-box}::-webkit-scrollbar-track{background:transparent}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}button,.btn{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--panel-2);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:var(--text);padding:9px 15px;border-radius:var(--radius-sm);transition:transform .16s ease,border-color .18s ease,box-shadow .25s ease,background-color .45s ease,color .45s ease;display:inline-flex;align-items:center;gap:7px}button:hover,.btn:hover{border-color:color-mix(in srgb,var(--accent) 60%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 35%,transparent),0 10px 24px #0006;transform:translateY(-1px)}button:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}.btn-primary{background:linear-gradient(135deg,var(--accent),var(--accent-deep));border-color:transparent;color:#021018;font-weight:700;box-shadow:0 8px 22px color-mix(in srgb,var(--accent) 38%,transparent)}.btn-primary:hover{filter:brightness(1.08);box-shadow:0 12px 32px color-mix(in srgb,var(--accent) 55%,transparent)}.btn-accent{background:linear-gradient(135deg,var(--orange),var(--orange-deep));border-color:transparent;color:#241300;font-weight:700;box-shadow:0 8px 22px #ff9f1c52}.btn-accent:hover{filter:brightness(1.07)}.btn-success{background:linear-gradient(135deg,var(--green),#12b48b);border-color:transparent;color:#022;font-weight:700;box-shadow:0 8px 22px #2bf5c847}.btn-success:hover{filter:brightness(1.06)}.btn-danger{color:var(--red);border-color:transparent;background:transparent;box-shadow:none}.btn-danger:hover{border-color:color-mix(in srgb,var(--red) 60%,transparent);background:#ff4d6d1f;box-shadow:none}.btn-ghost{background:transparent;border-color:transparent;color:var(--text-dim);padding:7px 9px;-webkit-backdrop-filter:none;backdrop-filter:none}.btn-ghost:hover{color:var(--text);border-color:var(--border);box-shadow:none}.btn-sm{padding:5px 11px;font-size:12.5px}input,select,textarea{font:inherit;width:100%;background:#070d1b8c;border:1px solid var(--border);color:var(--text);padding:10px 12px;border-radius:var(--radius-sm);outline:none;transition:border-color .2s ease,box-shadow .2s ease,background-color .45s ease}input::placeholder,textarea::placeholder{color:var(--text-mut)}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent);background:#070d1bb3}label{display:block;font-size:12px;color:var(--text-dim);margin-bottom:6px;text-transform:uppercase;letter-spacing:.4px}.field{margin-bottom:14px}.row{display:flex;gap:12px}.row>*{flex:1}.search{max-width:290px;text-transform:none}.panel{background:var(--bg-2);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow),inset 0 1px #ffffff0d;padding:22px 24px;position:relative;animation:rise .5s cubic-bezier(.2,.7,.2,1) both}.panel:before{content:"";position:absolute;left:20px;right:20px;top:0;height:1.5px;border-radius:2px;background:linear-gradient(90deg,transparent,var(--accent),transparent);opacity:.65;box-shadow:0 0 12px color-mix(in srgb,var(--accent) 50%,transparent);transition:background-color .45s ease}.card-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.stat{background:var(--panel-2);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px 22px;position:relative;overflow:hidden;box-shadow:var(--shadow-sm),inset 0 1px #ffffff0a;transition:transform .2s ease,border-color .2s ease,box-shadow .25s ease;animation:rise .5s cubic-bezier(.2,.7,.2,1) both}.stat:hover{transform:translateY(-4px);border-color:color-mix(in srgb,var(--accent) 45%,var(--border));box-shadow:var(--shadow),0 0 28px color-mix(in srgb,var(--accent) 18%,transparent)}.stat:after{content:"";position:absolute;right:-30px;top:-30px;width:130px;height:130px;border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--accent) 34%,transparent),transparent 70%);filter:blur(4px)}.stat.accent:after{background:radial-gradient(circle,rgba(255,159,28,.3),transparent 70%)}.stat .label{color:var(--text-dim);font-size:12px;text-transform:uppercase;letter-spacing:.6px}.stat .value{font-size:30px;font-weight:800;margin-top:10px;line-height:1.05;letter-spacing:-.5px}.stat .sub{color:var(--text-mut);font-size:12px;margin-top:7px}.value.pos{color:var(--green);text-shadow:0 0 18px rgba(43,245,200,.4)}.value.neg{color:var(--red);text-shadow:0 0 18px rgba(255,77,109,.4)}.value.cy{color:var(--accent);text-shadow:0 0 18px color-mix(in srgb,var(--accent) 45%,transparent)}.value.or{color:var(--orange);text-shadow:0 0 18px rgba(255,159,28,.4)}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:12px;border-bottom:1px solid var(--border)}th{color:var(--text-dim);font-size:11.5px;text-transform:uppercase;letter-spacing:.6px;font-weight:700}tbody tr{transition:background-color .15s ease,box-shadow .15s ease}tbody tr:hover{background:color-mix(in srgb,var(--accent) 8%,transparent);box-shadow:inset 3px 0 0 var(--accent)}tfoot td{border-bottom:none;border-top:1px solid var(--border-2)}td .muted{color:var(--text-mut)}.num{text-align:right;font-variant-numeric:tabular-nums}tr.low-stock{background:#ff4d6d14}.badge{display:inline-block;padding:3px 11px;border-radius:999px;font-size:12px;font-weight:700;border:1px solid transparent;letter-spacing:.2px}.badge.pending{background:#ffd24c24;color:var(--yellow);border-color:#ffd24c4d}.badge.approved,.badge.active{background:#2bf5c824;color:var(--green);border-color:#2bf5c84d}.badge.rejected{background:#ff4d6d24;color:var(--red);border-color:#ff4d6d4d}.badge.role,.badge.en_cours{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent);border-color:color-mix(in srgb,var(--accent) 34%,transparent)}.badge.termine{background:#2bf5c824;color:var(--green);border-color:#2bf5c84d}.badge.negociation{background:#ff9f1c24;color:var(--orange);border-color:#ff9f1c59}.badge.warn{background:#ff4d6d24;color:var(--red);border-color:#ff4d6d4d}.app{display:flex;min-height:100vh;position:relative;--bg-2: color-mix(in srgb, var(--accent) 10%, rgba(15, 23, 42, .62));--panel-2: color-mix(in srgb, var(--accent) 12%, rgba(23, 34, 58, .58));--panel-3: color-mix(in srgb, var(--accent) 14%, rgba(30, 43, 72, .6));--border: color-mix(in srgb, var(--accent) 22%, rgba(150, 180, 230, .14));--border-2: color-mix(in srgb, var(--accent) 45%, rgba(0, 229, 255, .3))}.app:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;background:radial-gradient(1150px 860px at 80% -10%,color-mix(in srgb,var(--accent) 34%,transparent),transparent 58%),radial-gradient(1000px 780px at 8% 112%,color-mix(in srgb,var(--accent-deep) 28%,transparent),transparent 60%),linear-gradient(165deg,color-mix(in srgb,var(--accent) 16%,#08070f),#060509 70%);transition:background .6s ease}.sidebar,.main{position:relative}.sidebar,.topbar,.panel,.content,input,select,textarea,.notif-btn,.notif-panel,.seg,.tabs{transition:background-color .55s ease,border-color .55s ease}.sidebar{width:244px;flex-shrink:0;background:#08090e;--text: #EAF6FF;--text-dim: #9FB4D4;--text-mut: #647C9F;border-right:none;display:flex;flex-direction:column;padding:18px 14px;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:12px;padding:4px 6px 22px}.brand-logo{display:grid;place-items:center;width:50px;height:50px;border-radius:16px;background:linear-gradient(150deg,color-mix(in srgb,var(--accent) 30%,var(--panel-2)),#070b1699);border:1px solid color-mix(in srgb,var(--accent) 45%,var(--border));box-shadow:0 0 22px color-mix(in srgb,var(--accent) 35%,transparent),inset 0 0 14px color-mix(in srgb,var(--accent) 18%,transparent)}.brand-logo img{width:34px;height:34px}.brand .name{font-weight:800;font-size:18px;letter-spacing:1px}.brand .name b{color:var(--accent);text-shadow:0 0 14px color-mix(in srgb,var(--accent) 55%,transparent)}.brand .name i{color:var(--c-magenta);font-style:normal;text-shadow:0 0 14px rgba(255,0,212,.5)}.nav{display:flex;flex-direction:column;gap:5px;margin-top:8px}.nav a{display:flex;align-items:center;gap:12px;padding:8px 12px;border-radius:14px;color:var(--text-dim);font-weight:500}.nav a:hover{background:#ffffff0a;color:var(--text)}.nav a:hover .ic{transform:translateY(-1px) scale(1.06)}.nav a.active{background:linear-gradient(90deg,color-mix(in srgb,var(--accent) 20%,transparent),transparent 88%);color:#fff;font-weight:650;box-shadow:inset 2px 0 0 var(--accent)}.nav a .ic{display:grid;place-items:center;width:36px;height:36px;flex-shrink:0;font-size:17px;line-height:1;border-radius:12px;background:#ffffff0a;border:1px solid var(--border);transition:transform .18s ease,background-color .45s ease,box-shadow .45s ease,border-color .45s ease}.nav a.active .ic{background:linear-gradient(150deg,var(--accent),var(--accent-deep));border-color:transparent;color:#021018;box-shadow:0 6px 18px color-mix(in srgb,var(--accent) 50%,transparent);transform:scale(1.05)}.nav .badge-count{margin-left:auto;background:linear-gradient(135deg,var(--c-magenta),#b3008f);color:#fff;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:800;box-shadow:0 0 12px #ff00d480}.sidebar .userbox{margin-top:auto;border-top:none;padding-top:14px}.userbox .uname{font-weight:650;display:block;color:var(--text)}.userbox .uname:hover{color:var(--accent)}.userbox .urole{color:var(--text-mut);font-size:12px}.main{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;justify-content:space-between;padding:16px 28px;gap:16px;flex-wrap:wrap;border-bottom:none;background:transparent;position:sticky;top:0;z-index:20}.topbar h1{font-size:21px;letter-spacing:-.2px}.topbar .sub{color:var(--text-mut);font-size:13px;margin-top:2px}.content{padding:24px 28px;flex:1}.section-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;gap:12px;flex-wrap:wrap}.section-head h2{font-size:16px}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:18px;flex-wrap:wrap}.tabs button{background:transparent;border:none;-webkit-backdrop-filter:none;backdrop-filter:none;color:var(--text-dim);padding:10px 16px;border-bottom:2px solid transparent;border-radius:0;box-shadow:none}.tabs button:hover{color:var(--text);transform:none;box-shadow:none}.tabs button.active{color:var(--accent);border-bottom-color:var(--accent);box-shadow:0 8px 16px -10px var(--accent);text-shadow:0 0 12px color-mix(in srgb,var(--accent) 45%,transparent)}.seg{display:inline-flex;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;background:#070d1b80}.seg button{border:none;border-radius:0;background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;color:var(--text-dim);box-shadow:none}.seg button:hover{transform:none;box-shadow:none;color:var(--text)}.seg button.active{background:linear-gradient(135deg,var(--accent),var(--accent-deep));color:#021018;font-weight:700}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#03060e99;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;align-items:flex-start;justify-content:center;padding:60px 16px;z-index:50;overflow-y:auto;animation:rise .25s ease both}.modal{background:linear-gradient(180deg,#111a30e6,#090e1ceb);-webkit-backdrop-filter:blur(24px) saturate(150%);backdrop-filter:blur(24px) saturate(150%);border:1px solid var(--border-2);border-radius:var(--radius-lg);width:100%;max-width:540px;box-shadow:var(--shadow),0 0 40px color-mix(in srgb,var(--accent) 14%,transparent);animation:rise .3s cubic-bezier(.2,.7,.2,1) both}.modal .head{display:flex;justify-content:space-between;align-items:center;padding:17px 22px;border-bottom:1px solid var(--border)}.modal .body{padding:22px}.modal .foot{padding:15px 22px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:10px}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.login-card{width:100%;max-width:420px}.login-card .logo{text-align:center;margin-bottom:14px}.login-card .logo img{width:92px;filter:drop-shadow(0 0 22px color-mix(in srgb,var(--accent) 60%,transparent))}.login-card h1{text-align:center;font-size:26px;letter-spacing:.5px}.login-card .tag{text-align:center;color:var(--text-mut);margin-bottom:22px;font-size:13px}.demo-hint{margin-top:16px;font-size:12px;color:var(--text-mut);background:#070d1b80;border:1px dashed var(--border);border-radius:var(--radius-sm);padding:10px 12px}.demo-hint code{background:#ffffff14;padding:0 4px;border-radius:4px}.switch-link{text-align:center;margin-top:16px;font-size:13px;color:var(--text-dim)}.switch-link button{background:none;border:none;-webkit-backdrop-filter:none;backdrop-filter:none;color:var(--accent);padding:0 4px;font-weight:600;box-shadow:none}.switch-link button:hover{transform:none;box-shadow:none}.notice{border-radius:var(--radius-sm);padding:12px 14px;font-size:13px;margin-bottom:16px}.notice.ok{background:#2bf5c81a;border:1px solid var(--green);color:#b6f7e6}.notice.warn{background:#ffd24c1a;border:1px solid var(--yellow);color:#f6e6b0}.timeline{display:flex;flex-direction:column}.tl-item{display:flex;gap:14px;padding:12px 2px;border-bottom:1px solid var(--border)}.tl-item:last-child{border-bottom:none}.tl-dot{width:11px;height:11px;margin-top:6px;flex-shrink:0;border-radius:50%;background:var(--accent);box-shadow:0 0 10px color-mix(in srgb,var(--accent) 60%,transparent)}.tl-dot[data-action=Validation]{background:var(--green);box-shadow:0 0 10px #2bf5c899}.tl-dot[data-action=Rejet],.tl-dot[data-action=Suppression]{background:var(--red);box-shadow:0 0 10px #ff4d6d99}.tl-dot[data-action=Modification]{background:var(--yellow);box-shadow:0 0 10px #ffd24c99}.tl-body{flex:1;min-width:0}.tl-msg{margin-top:3px}.assign-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;border-left:4px solid var(--orange);background:linear-gradient(90deg,rgba(255,159,28,.12),var(--bg-2) 60%)}.assign-banner b{color:var(--orange)}.pay-line{display:flex;align-items:center;gap:16px;background:var(--bg-2);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--border);border-left:4px solid var(--text-mut);border-radius:var(--radius);padding:13px 16px;margin-bottom:10px;transition:transform .16s ease,box-shadow .2s ease,border-color .2s ease}.pay-line:hover{transform:translateY(-2px);box-shadow:var(--shadow-sm)}.pay-line.green{border-left-color:var(--green)}.pay-line.orange{border-left-color:var(--orange)}.pay-line.red{border-left-color:var(--red)}.pay-line.solde{border-left-color:var(--accent)}.pay-line.none{border-left-color:var(--text-mut)}.pay-info{min-width:200px;flex:1}.pay-name{font-weight:700;font-size:15px}.pay-phone{color:var(--text-dim);font-size:13px}.pay-meta{display:flex;gap:22px;flex-wrap:wrap}.pay-meta .m-label{color:var(--text-mut);font-size:11px;text-transform:uppercase;letter-spacing:.4px}.pay-meta .m-val{font-weight:600;font-variant-numeric:tabular-nums}.pay-badge{text-align:center;min-width:150px;border-radius:var(--radius-sm);padding:9px 14px;border:1px solid}.pay-badge .pb-month{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.4px}.pay-badge .pb-amount{font-size:20px;font-weight:800;margin-top:2px;font-variant-numeric:tabular-nums}.pay-badge.green{background:#2bf5c81f;border-color:var(--green);color:var(--green)}.pay-badge.orange{background:#ff9f1c1f;border-color:var(--orange);color:var(--orange)}.pay-badge.red{background:#ff4d6d1f;border-color:var(--red);color:var(--red)}.pay-badge.solde{background:color-mix(in srgb,var(--accent) 14%,transparent);border-color:var(--accent);color:var(--accent)}.pay-badge.none{background:#647c9f1f;border-color:var(--text-mut);color:var(--text-dim)}.sched-summary{display:flex;flex-wrap:wrap;gap:18px;margin-bottom:16px}.sched-summary>div{display:flex;flex-direction:column;gap:2px}.sched-summary .m-label{font-size:11px;text-transform:uppercase;letter-spacing:.4px;color:var(--text-mut)}.sched-summary b{font-size:16px;font-variant-numeric:tabular-nums}.sched-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));margin-top:14px}.sched-cell{border-radius:var(--radius);padding:14px 12px;text-align:center;border:1px solid var(--border);background:var(--panel-2);transition:transform .15s ease}.sched-cell:hover{transform:translateY(-2px)}.sched-cell.unpaid{color:var(--text-dim)}.sched-cell.paid{background:#2bf5c821;border-color:var(--green);box-shadow:0 0 18px #2bf5c81f}.sched-cell.overdue{background:#ff4d6d1a;border-color:var(--red)}.sched-cell.current{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 70%,transparent),0 0 18px color-mix(in srgb,var(--accent) 22%,transparent)}.sched-now{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;color:var(--accent);margin-bottom:8px}.sched-month{font-weight:700;text-transform:uppercase;letter-spacing:.4px;font-size:12px;color:var(--text-dim)}.sched-cell.paid .sched-month{color:var(--green)}.sched-cell.overdue .sched-month{color:var(--red)}.sched-amount{font-size:17px;font-weight:800;margin-top:12px;font-variant-numeric:tabular-nums}.sched-cell.paid .sched-amount{color:var(--green)}.sched-cell.overdue .sched-amount{color:var(--red)}.sched-tag{font-size:10.5px;margin-top:10px;text-transform:uppercase;letter-spacing:.4px;color:var(--text-mut)}.sched-cell.paid .sched-tag{color:var(--green)}.sched-cell.overdue .sched-tag{color:var(--red)}.sched-legend{display:flex;flex-wrap:wrap;gap:18px;margin-top:14px;font-size:12.5px;color:var(--text-dim)}.sched-legend .dot{display:inline-block;width:11px;height:11px;border-radius:50%;margin-right:6px;vertical-align:middle}.sched-legend .dot.paid{background:var(--green)}.sched-legend .dot.overdue{background:var(--red)}.sched-legend .dot.unpaid{background:var(--panel-3);border:1px solid var(--border-2)}.sched-legend .dot.current{background:transparent;border:2px solid var(--accent);box-shadow:0 0 8px color-mix(in srgb,var(--accent) 50%,transparent)}.charts-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(420px,1fr))}.chart,.chart-wrap{width:100%}.chart text{font-family:inherit}.chart-tip{position:absolute;pointer-events:none;z-index:5;background:#111a30eb;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--border-2);border-radius:var(--radius-sm);box-shadow:var(--shadow);padding:8px 10px;min-width:130px;font-size:12.5px}.chart-tip .tip-title{font-weight:700;margin-bottom:5px;color:var(--text)}.chart-tip .tip-row{display:flex;align-items:center;gap:7px;margin-top:3px}.chart-tip .tip-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}.chart-tip .tip-name{color:var(--text-dim);margin-right:auto}.chart-tip .tip-val{font-weight:600;font-variant-numeric:tabular-nums}.chart-legend{display:flex;flex-wrap:wrap;gap:16px;justify-content:center;margin-top:8px}.legend-item{display:inline-flex;align-items:center;gap:7px;color:var(--text-dim);font-size:12.5px}.legend-chip{width:12px;height:12px;border-radius:3px;display:inline-block}.chart-title{font-size:15px;margin-bottom:2px}.chart-sub{color:var(--text-mut);font-size:12.5px;margin-bottom:12px}.forecast-controls{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap}.forecast-controls .field{margin-bottom:0}.forecast-result{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));margin-top:18px}.fc-card{background:var(--panel-2);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px}.fc-card .fc-label{color:var(--text-dim);font-size:12px;text-transform:uppercase;letter-spacing:.5px}.fc-card .fc-value{font-size:24px;font-weight:800;margin-top:6px;font-variant-numeric:tabular-nums}.fc-card .fc-now{color:var(--text-mut);font-size:12px;margin-top:6px}.fc-value.pos{color:var(--green)}.fc-value.neg{color:var(--red)}.fc-value.cy{color:var(--accent)}.fc-value.or{color:var(--orange)}.profile-head{display:flex;align-items:center;gap:18px;flex-wrap:wrap}.profile-head .avatar{width:66px;height:66px;flex-shrink:0;border-radius:20px;background:linear-gradient(150deg,var(--accent),var(--accent-deep));color:#021018;font-size:28px;font-weight:800;display:flex;align-items:center;justify-content:center;box-shadow:0 0 26px color-mix(in srgb,var(--accent) 45%,transparent)}.heatmap{font-size:11px;color:var(--text-mut)}.hm-scroll{overflow-x:auto;padding-bottom:4px}.hm-months{display:flex;margin-left:30px;gap:3px;margin-bottom:4px}.hm-mlabel{width:12px;flex-shrink:0;white-space:nowrap;height:13px}.hm-body{display:flex;gap:3px}.hm-days{display:flex;flex-direction:column;gap:3px;width:27px;flex-shrink:0}.hm-dlabel{height:12px;line-height:12px;font-size:10px}.hm-grid{display:flex;gap:3px}.hm-week{display:flex;flex-direction:column;gap:3px}.hm-cell{width:12px;height:12px;border-radius:3px;flex-shrink:0;background:#ffffff0d;border:1px solid rgba(255,255,255,.03)}.hm-cell.l1{background:color-mix(in srgb,var(--accent) 28%,transparent)}.hm-cell.l2{background:color-mix(in srgb,var(--accent) 50%,transparent)}.hm-cell.l3{background:color-mix(in srgb,var(--accent) 75%,transparent)}.hm-cell.l4{background:var(--accent);box-shadow:0 0 8px color-mix(in srgb,var(--accent) 55%,transparent)}.hm-cell.hm-off{background:transparent;border-color:transparent}.hm-legend{display:flex;align-items:center;gap:4px;justify-content:flex-end;margin-top:10px}.hm-legend .hm-cell{cursor:default}.water-ripple{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:40;overflow:hidden}.water-ripple .wr-wash{position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(72% 62% at 16% 0%,color-mix(in srgb,var(--accent) 26%,transparent),transparent 60%);opacity:0;animation:wr-wash .85s ease-out forwards}.water-ripple .wr-ring{position:absolute;left:92px;top:-64px;width:180px;height:180px;border-radius:50%;border:2px solid color-mix(in srgb,var(--accent) 60%,transparent);box-shadow:0 0 26px color-mix(in srgb,var(--accent) 35%,transparent);transform:scale(.2);opacity:0;animation:wr-ring .9s ease-out forwards}@keyframes wr-wash{0%{opacity:.95}to{opacity:0}}@keyframes wr-ring{0%{transform:scale(.2);opacity:.5}70%{opacity:.16}to{transform:scale(6);opacity:0}}@media (prefers-reduced-motion: reduce){.water-ripple{display:none}.panel,.stat,.modal,.overlay{animation:none}}.notif{position:relative}.notif-btn{position:relative;display:grid;place-items:center;width:42px;height:42px;border-radius:14px;background:var(--panel-2);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--border);color:var(--text);padding:0;font-size:18px;cursor:pointer}.notif-btn:hover{border-color:var(--accent);box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 35%,transparent)}.notif-badge{position:absolute;top:-5px;right:-5px;min-width:18px;height:18px;padding:0 5px;display:grid;place-items:center;background:linear-gradient(135deg,var(--c-magenta),#b3008f);color:#fff;border-radius:999px;font-size:11px;font-weight:800;border:2px solid rgba(9,14,28,.9);box-shadow:0 0 12px #ff00d48c}.notif-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60}.notif-panel{position:absolute;right:0;top:calc(100% + 10px);z-index:61;width:344px;max-width:86vw;background:linear-gradient(180deg,#111a30eb,#090e1cf0);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid var(--border-2);border-radius:var(--radius-lg);box-shadow:var(--shadow);overflow:hidden;animation:rise .2s ease both}.notif-head{display:flex;align-items:center;justify-content:space-between;padding:13px 16px;border-bottom:1px solid var(--border)}.notif-list{max-height:62vh;overflow-y:auto}.notif-empty{padding:28px 16px;text-align:center;color:var(--text-mut)}.notif-item{width:100%;text-align:left;display:flex;gap:11px;align-items:flex-start;padding:12px 16px;border:none;border-bottom:1px solid var(--border);background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;border-radius:0;color:var(--text);box-shadow:none}.notif-item:hover{background:#ffffff0a;transform:none}.notif-item:last-child{border-bottom:none}.notif-item.unread{background:color-mix(in srgb,var(--accent) 10%,transparent)}.notif-dot{width:8px;height:8px;border-radius:50%;margin-top:6px;background:transparent;flex-shrink:0}.notif-item.unread .notif-dot{background:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}.notif-body{display:flex;flex-direction:column;gap:3px;min-width:0}.notif-msg{font-size:13.5px;line-height:1.35}.notif-time{font-size:11.5px;color:var(--text-mut)}.ucal-wrap{display:flex;flex-wrap:wrap;gap:10px}.ucal{width:150px;flex:0 0 auto;background:var(--panel-2);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--border);border-radius:var(--radius);padding:8px 9px;transition:border-color .15s ease,transform .15s ease,background-color .45s ease}.ucal:hover{border-color:var(--accent);transform:translateY(-2px)}.ucal-name{display:flex;flex-direction:column;align-items:flex-start;gap:3px;height:34px;overflow:hidden;margin-bottom:6px;color:var(--text)}.ucal-name b{font-size:11.5px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ucal-name .badge{font-size:9px;padding:1px 6px}.ucal-head,.ucal-days{display:grid;grid-template-columns:repeat(7,15px);column-gap:2px;justify-content:center}.ucal-head{margin-bottom:3px}.ucal-head span{text-align:center;font-size:8px;color:var(--text-mut);line-height:1}.ucal-days{grid-auto-rows:15px;row-gap:2px;align-content:start}.ucal-cell{width:15px;height:15px;display:grid;place-items:center;border-radius:4px;font-size:8px;color:var(--text-dim);background:#ffffff0d}.ucal-cell.empty{background:transparent}.ucal-cell.l1{background:color-mix(in srgb,var(--accent) 26%,transparent);color:var(--text)}.ucal-cell.l2{background:color-mix(in srgb,var(--accent) 46%,transparent);color:var(--text)}.ucal-cell.l3{background:color-mix(in srgb,var(--accent) 68%,transparent);color:#021018}.ucal-cell.l4{background:var(--accent);color:#021018;font-weight:700;box-shadow:0 0 8px color-mix(in srgb,var(--accent) 50%,transparent)}.ucal-cell.today{box-shadow:0 0 0 1.5px var(--accent)}.ucal-foot{margin-top:7px;font-size:10px;color:var(--text-mut)}.loc-folders{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:18px}.loc-folder{display:flex;align-items:center;gap:9px;padding:9px 14px;border-radius:999px;background:var(--panel-2);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--border);color:var(--text-dim);transition:transform .15s ease,border-color .15s ease,color .15s ease}.loc-folder:hover{border-color:var(--accent);color:var(--text);transform:translateY(-1px)}.loc-folder.active{background:linear-gradient(135deg,var(--accent),var(--accent-deep));border-color:transparent;color:#021018;font-weight:700;box-shadow:0 8px 22px color-mix(in srgb,var(--accent) 35%,transparent)}.loc-folder .lf-ic{font-size:15px}.loc-folder .lf-name{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.loc-folder .lf-count{font-size:12px;background:#00000038;border-radius:999px;padding:1px 8px}.loc-folder.active .lf-count{background:#00000040}.loc-folder .lf-del{margin-left:2px;opacity:.5;font-size:12px}.loc-folder .lf-del:hover{opacity:1;color:var(--red)}.proj-note{border-left:4px solid var(--accent);background:linear-gradient(90deg,color-mix(in srgb,var(--accent) 12%,transparent),var(--bg-2) 60%)}.proj-note-label{font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--accent);font-weight:700;margin-bottom:6px}.proj-note-body{white-space:pre-wrap;line-height:1.5}.proj-note-mini{margin-top:8px;font-size:12.5px;color:var(--text-dim);background:var(--panel-2);border-radius:var(--radius-sm);padding:6px 9px;border-left:3px solid var(--accent);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.meet-list{display:flex;flex-direction:column;gap:14px}.meet-card h2{font-size:16px}.meet-notes{white-space:pre-wrap;line-height:1.55;margin-top:10px}.meet-reminder{margin-top:12px;padding:10px 14px;border-radius:var(--radius-sm);background:#ff9f1c1f;border:1px solid var(--orange);color:var(--text);display:flex;align-items:center;gap:8px;flex-wrap:wrap}.meet-reminder.sent{background:#2bf5c81a;border-color:var(--green)}.meet-reminder-tag{margin-left:auto;font-size:11px;text-transform:uppercase;letter-spacing:.4px;color:var(--text-mut)}.desc-list{display:flex;flex-direction:column;gap:14px}.desc-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}.desc-summary{display:flex;flex-direction:column;gap:6px;min-width:0}.desc-title{font-size:16px}.desc-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;color:var(--text-dim);font-size:14px}.desc-sep{color:var(--text-mut)}.desc-total{color:var(--accent);font-variant-numeric:tabular-nums}.desc-map{color:var(--accent)}.desc-map:hover{text-decoration:underline}.desc-details{margin-top:14px;padding-top:14px;border-top:1px solid var(--border)}.desc-note{white-space:pre-wrap;line-height:1.55;margin-bottom:12px}.desc-subh{font-size:13px;text-transform:uppercase;letter-spacing:.4px;color:var(--text-mut);margin:4px 0 8px}.desc-lines{display:flex;flex-direction:column;gap:8px}.desc-line{display:flex;gap:8px;align-items:center}.desc-line-label{flex:1}.desc-line-amount{width:140px;flex-shrink:0}.toast{position:fixed;bottom:22px;right:22px;background:linear-gradient(180deg,#111a30f0,#090e1cf5);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);color:#eaf6ff;border:1px solid var(--border-2);padding:13px 18px;border-radius:var(--radius-sm);box-shadow:var(--shadow);z-index:100;max-width:360px;animation:rise .25s ease both}.toast.err{border-color:var(--red);box-shadow:var(--shadow),0 0 24px #ff4d6d40}.toast.ok{border-color:var(--green);box-shadow:var(--shadow),0 0 24px #2bf5c838}.appfoot{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:15px 28px;margin-top:auto;border-top:none;background:transparent;color:var(--text-mut);font-size:12.5px}.appfoot .ft-brand b{letter-spacing:1px;color:var(--text-dim)}.appfoot .ft-brand i{color:var(--c-magenta);font-style:normal}.empty{text-align:center;color:var(--text-mut);padding:36px 12px}.flex{display:flex;align-items:center;gap:10px}.between{justify-content:space-between}.wrap{flex-wrap:wrap}.spacer{flex:1}.muted{color:var(--text-mut)}.dim{color:var(--text-dim)}.mt{margin-top:16px}.error-text{color:var(--red);font-size:13px;margin-top:8px}.loading{padding:40px;text-align:center;color:var(--text-dim)}@media (max-width: 980px){.app{flex-direction:column}.sidebar{width:auto;height:auto;position:sticky;top:0;z-index:30;flex-direction:row;flex-wrap:wrap;align-items:center;gap:8px 10px;padding:10px 14px;border-right:none;border-bottom:none}.brand{padding:0;flex-shrink:0}.brand-logo{width:38px;height:38px;border-radius:11px}.brand-logo img{width:26px;height:26px}.brand .name{font-size:16px}.sidebar .userbox{margin:0 0 0 auto;border-top:none;border-left:none;padding:0;flex-shrink:0}.userbox .urole{display:none}.nav{order:3;width:100%;margin-top:2px;flex-direction:row;flex-wrap:nowrap;gap:6px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;padding-bottom:6px;scrollbar-width:thin}.nav::-webkit-scrollbar{height:5px}.nav a{position:relative;flex-shrink:0;flex-direction:column;gap:5px;padding:7px 10px;min-width:60px;text-align:center;font-size:11px;font-weight:600}.nav a>span:not(.ic):not(.badge-count){display:block;white-space:nowrap}.nav a.active{box-shadow:none;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 22%,transparent),transparent 92%)}.nav a .ic{width:34px;height:34px;font-size:16px}.nav .badge-count{position:absolute;top:2px;right:6px;margin:0;transform:none}.topbar{position:static;padding:14px 18px}.topbar h1{font-size:18px}.topbar>.flex{flex-wrap:wrap}.content{padding:18px 16px}.panel{overflow-x:auto;-webkit-overflow-scrolling:touch}th,td{white-space:nowrap}td .flex{flex-wrap:nowrap}}@media (max-width: 560px){body{font-size:13.5px}.topbar{flex-direction:column;align-items:stretch;gap:10px}.topbar>.flex{justify-content:space-between}.card-grid,.charts-grid{grid-template-columns:1fr}.content{padding:14px 12px}.panel{padding:16px 14px}.pay-line{flex-wrap:wrap}.pay-badge{min-width:0;flex:1}.search{max-width:100%}table{font-size:13px}th,td{padding:9px 8px}.overlay{padding:16px 8px;align-items:flex-start}.modal{max-width:100%}.modal .body{padding:16px}.modal .head,.modal .foot{padding:14px 16px}.row{flex-direction:column;gap:0}.section-head{align-items:stretch}.assign-banner{flex-direction:column;align-items:stretch;gap:10px}.assign-banner .btn-sm{align-self:flex-start}.topbar>.flex .btn,.topbar>.flex .btn-primary,.topbar>.flex .btn-accent,.topbar>.flex .btn-danger{flex:1;justify-content:center}}html.light{--void: #e7ebf3;--bg: #eef2f8;--text: #1b2533;--text-dim: #46586f;--text-mut: #7d8a9c;--border: rgba(20, 33, 60, .16);--shadow: 0 18px 44px rgba(40, 55, 90, .16);--shadow-sm: 0 8px 22px rgba(40, 55, 90, .12)}html.light body{background-color:#e7ebf3}html.light .app{--bg-2: color-mix(in srgb, var(--accent) 7%, rgba(255, 255, 255, .8));--panel-2: color-mix(in srgb, var(--accent) 8%, rgba(255, 255, 255, .72));--panel-3: color-mix(in srgb, var(--accent) 10%, rgba(255, 255, 255, .76));--border: color-mix(in srgb, var(--accent) 24%, rgba(20, 33, 60, .18));--border-2: color-mix(in srgb, var(--accent) 45%, rgba(20, 33, 60, .22))}html.light .app:before{background:radial-gradient(1200px 900px at 80% -10%,color-mix(in srgb,var(--accent) 52%,transparent),transparent 64%),radial-gradient(1050px 820px at 8% 112%,color-mix(in srgb,var(--accent-deep) 38%,transparent),transparent 66%),linear-gradient(165deg,color-mix(in srgb,var(--accent) 34%,#ffffff),color-mix(in srgb,var(--accent) 18%,#eef2f8) 78%)}html.light input,html.light select,html.light textarea{background:#ffffffb8}html.light input:focus,html.light select:focus,html.light textarea:focus{background:#fffffff5}html.light .seg,html.light .demo-hint{background:#fff9}html.light .demo-hint code{background:#14213c14}html.light .modal{background:linear-gradient(180deg,#fffffff2,#f4f7fcf5)}html.light .loc-folder .lf-count{background:#14213c14}html.light .loc-folder.active .lf-count{background:#14213c1f}html.light .brand-logo{background:linear-gradient(150deg,color-mix(in srgb,var(--accent) 32%,#fff),#ffffff8c)}html.light ::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--accent) 45%,#c3ccdb)}html.light ::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--accent) 65%,#c3ccdb)}
