.portal-root{--navy:#1d3557;--teal:#17bebb;--teal-hover:#12aeab;--azure:#1789fc;--lavender:#9496c7;--bg-snow:#fcf7f8;--bg-soft:#f0ecee;--text-primary:#1d3557;--text-secondary:#1d35579e;--text-muted:#1d35575c;--text-on-dark:#fcf7f8;--status-new:#1789fc;--status-progress:#f4a623;--status-done:#2ecc71;--status-overdue:#d94f4f;--status-paid:#2ecc71;--status-sent:#1789fc;--p-radius:24px;--p-radius-md:16px;--p-radius-sm:10px;--p-ease:cubic-bezier(.4, 0, .2, 1);--p-ease-spring:cubic-bezier(.22, 1, .36, 1);--p-transition:.3s var(--p-ease);font-family:var(--font-body), "DM Sans", sans-serif;color:var(--text-secondary);background:var(--bg-snow);max-width:100vw;min-height:100vh;font-size:1rem;line-height:1.78;display:block;overflow-x:hidden}.portal-root *,.portal-root :before,.portal-root :after{box-sizing:border-box;margin:0;padding:0}.portal-root h1,.portal-root h2,.portal-root h3,.portal-root h4,.portal-root h5,.portal-root h6{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:var(--text-primary);letter-spacing:-.02em;line-height:1.12}.portal-root a{color:inherit;text-decoration:none}.portal-root button{font-family:inherit}.portal-root .app-layout{min-height:100vh;display:flex}.portal-root .sidebar{background:var(--navy);width:260px;color:var(--text-on-dark);z-index:100;transition:transform .35s var(--p-ease-spring);flex-direction:column;padding:28px 0;display:flex;position:fixed;top:0;bottom:0;left:0}.portal-root .sidebar-logo{border-bottom:1px solid #ffffff14;margin-bottom:8px;padding:0 24px 32px}.portal-root .sidebar-logo h2{color:var(--text-on-dark);letter-spacing:-.01em;font-size:1.1rem;font-weight:700}.portal-root .sidebar-logo span{letter-spacing:.16em;text-transform:uppercase;color:var(--teal);margin-top:2px;font-size:.68rem;font-weight:700;display:block}.portal-root .sidebar-nav{flex-direction:column;flex:1;gap:2px;padding:12px;display:flex}.portal-root .sidebar-nav a,.portal-root .sidebar-nav button{border-radius:var(--p-radius-sm);font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:#fcf7f880;transition:all var(--p-transition);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:12px;width:100%;padding:11px 16px;font-size:.85rem;font-weight:600;display:flex}.portal-root .sidebar-nav a:hover,.portal-root .sidebar-nav button:hover{color:var(--text-on-dark);background:#ffffff0f}.portal-root .sidebar-nav a.active{color:var(--text-on-dark);background:#17bebb26}.portal-root .sidebar-nav a.active .nav-icon{color:var(--teal)}.portal-root .nav-icon{flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;font-size:1rem;display:flex}.portal-root .nav-badge{background:var(--teal);color:#fff;text-align:center;border-radius:100px;min-width:20px;margin-left:auto;padding:2px 8px;font-size:.65rem;font-weight:700}.portal-root .sidebar-footer{border-top:1px solid #ffffff14;align-items:center;gap:12px;padding:16px 24px;display:flex}.portal-root .sidebar-avatar{background:var(--teal);width:36px;height:36px;font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:.8rem;font-weight:700;display:flex}.portal-root .sidebar-user-info{flex:1;min-width:0}.portal-root .sidebar-user-name{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:var(--text-on-dark);white-space:nowrap;text-overflow:ellipsis;font-size:.82rem;font-weight:600;overflow:hidden}.portal-root .sidebar-user-role{color:#fcf7f866;letter-spacing:.08em;text-transform:uppercase;font-size:.68rem;font-weight:600}.portal-root .sidebar-logout{margin:0 12px 12px}.portal-root .main-content{flex:1;min-width:0;max-width:1200px;margin-left:260px;padding:32px 40px;overflow-x:hidden}.portal-root .top-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:32px;display:flex}.portal-root .top-bar h1{letter-spacing:-.025em;font-size:clamp(1.4rem,3vw,1.8rem);font-weight:800}.portal-root .top-bar-actions{align-items:center;gap:12px;display:flex}.portal-root .btn{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;cursor:pointer;transition:all var(--p-transition);white-space:nowrap;border:none;border-radius:100px;align-items:center;gap:8px;padding:11px 24px;font-size:.82rem;font-weight:700;text-decoration:none;display:inline-flex}.portal-root .btn:hover{transform:translateY(-2px)}.portal-root .btn:active{transform:translateY(0)scale(.98)}.portal-root .btn-primary{background:var(--teal);color:#fff;box-shadow:0 4px 20px #17bebb59,inset 0 1px #ffffff40}.portal-root .btn-primary:hover{background:var(--teal-hover);box-shadow:0 6px 28px #17bebb73,inset 0 1px #ffffff40}.portal-root .btn-glass{color:var(--text-primary);-webkit-backdrop-filter:blur(20px)saturate(180%);background:#ffffff85;border:1px solid #ffffffd9;box-shadow:0 4px 20px #1d35571a}.portal-root .btn-glass:hover{background:#ffffffc7}.portal-root .btn-sm{padding:7px 16px;font-size:.75rem}.portal-root .btn-icon{border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;padding:0;display:flex}.portal-root .btn-full{justify-content:center;width:100%}.portal-root .card{-webkit-backdrop-filter:blur(24px)saturate(180%)brightness(1.04);border-radius:var(--p-radius);transition:all var(--p-transition);background:#ffffff8c;border:1px solid #ffffffe0;padding:28px;box-shadow:0 8px 32px #1d355717,0 2px 8px #1d35570d}.portal-root .card:hover{box-shadow:0 12px 36px #1d35571f,0 4px 12px #1d35570f}.portal-root .card-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.portal-root .card-title{letter-spacing:-.01em;font-size:1rem;font-weight:700}.portal-root .card-subtitle{color:var(--text-muted);font-size:.75rem}.portal-root .stats-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:28px;display:grid}.portal-root .stat-card{padding:24px}.portal-root .stat-icon{border-radius:14px;justify-content:center;align-items:center;width:42px;height:42px;margin-bottom:14px;font-size:1.1rem;display:flex}.portal-root .stat-icon.teal{color:var(--teal);background:#17bebb17;border:1px solid #17bebb2e}.portal-root .stat-icon.azure{color:var(--azure);background:#1789fc17;border:1px solid #1789fc2e}.portal-root .stat-icon.lavender{color:var(--lavender);background:#9496c717;border:1px solid #9496c72e}.portal-root .stat-icon.green{color:var(--status-done);background:#2ecc7117;border:1px solid #2ecc712e}.portal-root .stat-number{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:var(--text-primary);margin-bottom:4px;font-size:1.8rem;font-weight:800;line-height:1}.portal-root .stat-label{font-size:.75rem;font-weight:600;font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:var(--text-muted);letter-spacing:.04em}.portal-root .jarvis-page{flex-direction:column;width:100%;min-height:calc(100vh - 64px);display:flex}.portal-root .jarvis-header{border-bottom:1px solid #1d35570f;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;width:100%;max-width:820px;margin:0 auto 8px;padding:4px 0 18px;display:flex}.portal-root .jarvis-header-left{align-items:center;gap:12px;display:flex}.portal-root .jarvis-header-right{align-items:center;gap:10px;display:flex}.portal-root .jarvis-lock-btn{width:32px;height:32px;color:var(--text-muted);cursor:pointer;background:#1d35570a;border:1px solid #1d35571a;border-radius:8px;justify-content:center;align-items:center;transition:background .14s,color .14s,border-color .14s;display:inline-flex}.portal-root .jarvis-lock-btn:hover{color:var(--text-primary);background:#1d355714;border-color:#1d35572e}.portal-root .jarvis-brand-icon{width:32px;height:32px;color:var(--teal);flex-shrink:0;justify-content:center;align-items:center;display:flex}.portal-root .jarvis-brand-icon svg{width:100%;height:100%;animation:3s ease-in-out infinite jarvis-glow}@keyframes jarvis-glow{0%,to{filter:drop-shadow(0 0 #17bebb00)}50%{filter:drop-shadow(0 0 6px #17bebb80)}}.portal-root .jarvis-title{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;letter-spacing:.12em;color:var(--text-primary);font-size:1.05rem;font-weight:800;line-height:1}.portal-root .jarvis-status{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.14em;background:#1d35570a;border:1px solid #1d355714;border-radius:999px;align-items:center;gap:8px;padding:5px 11px;font-size:.66rem;font-weight:600;display:inline-flex}.portal-root .jarvis-status-live{color:var(--teal-hover)}.portal-root .jarvis-status-dot{background:#f4a623;border-radius:50%;width:7px;height:7px;animation:1.8s ease-in-out infinite jarvis-pulse}.portal-root .jarvis-status-live .jarvis-status-dot{background:var(--teal);box-shadow:0 0 6px #17bebb99}@keyframes jarvis-pulse{0%,to{opacity:1}50%{opacity:.4}}.portal-root .jarvis-hero{flex-direction:column;flex:1;justify-content:center;align-items:center;gap:28px;width:100%;max-width:820px;margin:0 auto;padding:40px 16px;display:flex}.portal-root .jarvis-hero-title{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:var(--text-primary);text-align:center;letter-spacing:-.015em;margin:0;font-size:clamp(1.8rem,4vw,2.5rem);font-weight:700;line-height:1.15}.portal-root .jarvis-thread-wrap{flex:1;width:100%;max-width:820px;margin:0 auto;padding:8px 4px 24px;overflow-y:auto}.portal-root .jarvis-thread{flex-direction:column;gap:28px;display:flex}.portal-root .jarvis-message{flex-direction:column;gap:6px;max-width:78%;display:flex}.portal-root .jarvis-message-user{align-self:flex-end;align-items:flex-end}.portal-root .jarvis-message-assistant,.portal-root .jarvis-message-error{align-self:flex-start;align-items:flex-start}.portal-root .jarvis-message-role{text-transform:uppercase;letter-spacing:.14em;color:var(--text-muted);font-size:.7rem;font-weight:700}.portal-root .jarvis-message-user .jarvis-message-role{color:var(--text-primary)}.portal-root .jarvis-message-assistant .jarvis-message-role{color:var(--teal)}.portal-root .jarvis-message-error .jarvis-message-role{color:var(--status-overdue)}.portal-root .jarvis-message-body{color:var(--text-primary);white-space:pre-wrap;word-break:break-word;font-size:.95rem;line-height:1.65}.portal-root .jarvis-message-user .jarvis-message-body{background:#17bebb14;border:1px solid #17bebb2e;border-radius:12px;padding:10px 14px}.portal-root .jarvis-message-error .jarvis-message-body{color:var(--status-overdue)}.portal-root .jarvis-message-attachments{flex-wrap:wrap;gap:6px;margin-top:2px;display:flex}.portal-root .jarvis-message-attachment{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;background:#1d35570d;border:1px solid #1d35571a;border-radius:8px;align-items:center;gap:6px;max-width:260px;padding:4px 10px;font-size:.78rem;display:inline-flex;overflow:hidden}.portal-root .jarvis-typing{gap:5px;padding:4px 0;display:inline-flex}.portal-root .jarvis-typing span{background:var(--text-muted);border-radius:50%;width:6px;height:6px;animation:1.3s ease-in-out infinite jarvis-typing}.portal-root .jarvis-typing span:nth-child(2){animation-delay:.18s}.portal-root .jarvis-typing span:nth-child(3){animation-delay:.36s}@keyframes jarvis-typing{0%,60%,to{opacity:.3;transform:scale(.6)}30%{opacity:1;transform:scale(1.1)}}.portal-root .jarvis-composer{width:100%;max-width:820px;margin:0 auto}.portal-root .jarvis-composer-wrap{flex-shrink:0;width:100%;max-width:820px;margin:0 auto;padding:14px 0 8px}.portal-root .jarvis-composer-box{background:#fff;border:1px solid #1d35571f;border-radius:14px;transition:border-color .16s,box-shadow .16s;overflow:hidden;box-shadow:0 2px 10px -4px #1d355714}.portal-root .jarvis-composer-box:focus-within{border-color:#1d35573d;box-shadow:0 4px 16px -6px #1d355724}.portal-root .jarvis-attachments{flex-wrap:wrap;gap:6px;padding:10px 12px 2px;display:flex}.portal-root .jarvis-attachment{color:var(--text-primary);background:#1d35570d;border:1px solid #1d355714;border-radius:8px;align-items:center;gap:6px;max-width:240px;padding:5px 6px 5px 10px;font-size:.78rem;display:inline-flex}.portal-root .jarvis-attachment-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.portal-root .jarvis-attachment-remove{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;padding:2px;line-height:1;display:flex}.portal-root .jarvis-attachment-remove:hover{color:var(--text-primary);background:#1d355714}.portal-root .jarvis-textarea{width:100%;color:var(--text-primary);resize:none;box-sizing:border-box;background:0 0;border:none;outline:none;min-height:60px;max-height:200px;padding:14px 16px;font-family:inherit;font-size:.95rem;line-height:1.55;display:block}.portal-root .jarvis-textarea::placeholder{color:var(--text-muted)}.portal-root .jarvis-textarea:disabled{opacity:.6;cursor:not-allowed}.portal-root .jarvis-composer-bar{justify-content:space-between;align-items:center;gap:8px;padding:6px 10px 10px;display:flex}.portal-root .jarvis-composer-left,.portal-root .jarvis-composer-right{align-items:center;gap:4px;display:flex}.portal-root .jarvis-icon-btn{min-height:32px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:6px;padding:7px 8px;font-family:inherit;font-size:.8rem;transition:background .14s,color .14s;display:inline-flex}.portal-root .jarvis-icon-btn:hover:not(:disabled){color:var(--text-primary);background:#1d35570f}.portal-root .jarvis-icon-btn:disabled{opacity:.4;cursor:not-allowed}.portal-root .jarvis-icon-btn svg{flex-shrink:0;width:16px;height:16px}.portal-root .jarvis-send{width:34px;height:34px;color:var(--text-muted);cursor:pointer;background:#1d35570d;border:1px solid #0000;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:all .14s;display:inline-flex}.portal-root .jarvis-send svg{width:16px;height:16px}.portal-root .jarvis-send-active{background:var(--teal);color:#fff;border-color:var(--teal);box-shadow:0 4px 12px -4px #17bebb66}.portal-root .jarvis-send-active:hover:not(:disabled){background:var(--teal-hover);transform:translateY(-1px)}.portal-root .jarvis-send:disabled{cursor:not-allowed}.portal-root .jarvis-quick{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:4px;display:flex}.portal-root .jarvis-quick-btn{color:var(--text-secondary);cursor:pointer;background:0 0;border:1px solid #1d355724;border-radius:999px;align-items:center;gap:8px;padding:8px 14px;font-family:inherit;font-size:.82rem;font-weight:500;transition:all .16s;display:inline-flex}.portal-root .jarvis-quick-btn:hover{color:var(--text-primary);background:#1d355708;border-color:#1d355742}.portal-root .jarvis-quick-btn svg{width:14px;height:14px;color:var(--text-muted);transition:color .16s}.portal-root .jarvis-quick-btn:hover svg{color:var(--teal)}.portal-root .jarvis-file-input{opacity:0;pointer-events:none;position:absolute;left:-9999px}.portal-root .jarvis-file-error{color:var(--status-overdue);background:#d94f4f14;border:1px solid #d94f4f40;border-radius:8px;margin-top:8px;padding:8px 12px;font-size:.8rem}.portal-root .jarvis-gate-wrap{justify-content:center;align-items:center;min-height:calc(100vh - 80px);padding:24px 16px;display:flex}.portal-root .jarvis-gate-card{text-align:center;background:#fff;border:1px solid #1d35571a;border-radius:18px;width:100%;max-width:380px;padding:32px 28px 28px;box-shadow:0 12px 40px -16px #1d35572e}.portal-root .jarvis-gate-icon{color:#1d3557;width:56px;height:56px;margin:0 auto 14px}.portal-root .jarvis-gate-icon svg{width:100%;height:100%}.portal-root .jarvis-gate-title{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;letter-spacing:.04em;color:var(--text-primary);margin:0 0 6px;font-size:1.4rem;font-weight:700}.portal-root .jarvis-gate-sub{color:var(--text-muted);margin:0 0 22px;font-size:.9rem}.portal-root .jarvis-gate-sub code{font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);background:#1d35570f;border-radius:4px;padding:1px 5px;font-size:.84em}.portal-root .jarvis-gate-form{flex-direction:column;gap:10px;display:flex}.portal-root .jarvis-gate-input{width:100%;color:var(--text-primary);box-sizing:border-box;background:#fafafa;border:1px solid #1d355726;border-radius:10px;outline:none;padding:12px 14px;font-family:inherit;font-size:.95rem;transition:border-color .16s,background .16s}.portal-root .jarvis-gate-input:focus{background:#fff;border-color:#17bebb}.portal-root .jarvis-gate-input:disabled{opacity:.6}.portal-root .jarvis-gate-btn{color:#fff;cursor:pointer;background:#1d3557;border:none;border-radius:10px;width:100%;padding:12px 14px;font-family:inherit;font-size:.95rem;font-weight:600;transition:background .16s,transform 80ms}.portal-root .jarvis-gate-btn:hover:not(:disabled){background:#16294a}.portal-root .jarvis-gate-btn:active:not(:disabled){transform:translateY(1px)}.portal-root .jarvis-gate-btn:disabled{opacity:.5;cursor:not-allowed}.portal-root .jarvis-gate-error{color:var(--status-overdue);text-align:left;background:#d94f4f14;border:1px solid #d94f4f3d;border-radius:8px;margin-top:4px;padding:8px 12px;font-size:.82rem}.portal-root .jarvis-gate-meta{color:var(--text-muted);letter-spacing:.02em;margin:18px 0 0;font-size:.74rem}.portal-root .jarvis-thinking-flag{color:var(--text-primary);background:linear-gradient(135deg,#17bebb1a,#1d35570f);border:1px solid #17bebb4d;border-radius:8px;align-items:center;gap:8px;margin:10px 12px 0;padding:6px 8px 6px 10px;font-size:.78rem;font-weight:500;display:flex}.portal-root .jarvis-thinking-flag svg{color:#17bebb;flex-shrink:0}.portal-root .jarvis-thinking-cancel{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;margin-left:auto;padding:3px;display:flex}.portal-root .jarvis-thinking-cancel:hover{color:var(--text-primary);background:#1d355714}.portal-root .jarvis-model-pill{color:var(--text-muted);cursor:help;-webkit-user-select:none;user-select:none;background:#1d35570f;border:1px solid #1d35571f;border-radius:999px;align-items:center;margin-left:6px;padding:4px 10px;font-size:.72rem;font-weight:500;display:inline-flex}.portal-root .jarvis-error-banner{background:#d94f4f14;border:1px solid #d94f4f4d;border-radius:10px;flex-direction:column;gap:2px;margin:0 12px 10px;padding:10px 12px;font-size:.8rem;display:flex}.portal-root .jarvis-error-msg{color:#a52929;font-weight:500}.portal-root .jarvis-error-detail{color:#a52929b3;font-family:ui-monospace,SFMono-Regular,monospace;font-size:.72rem}.portal-root .jarvis-slash-palette{background:#fff;border:1px solid #1d35571f;border-radius:10px;flex-direction:column;max-height:240px;margin:0 8px 8px;display:flex;overflow-y:auto;box-shadow:0 8px 22px -10px #1d35572e}.portal-root .jarvis-slash-item{text-align:left;cursor:pointer;color:var(--text-primary);background:0 0;border:none;border-bottom:1px solid #1d35570d;align-items:baseline;gap:12px;padding:9px 12px;font-family:inherit;font-size:.85rem;transition:background .12s;display:flex}.portal-root .jarvis-slash-item:last-child{border-bottom:none}.portal-root .jarvis-slash-item-active{background:#17bebb14}.portal-root .jarvis-slash-name{color:#17bebb;font-weight:600;font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);flex-shrink:0;font-size:.82rem}.portal-root .jarvis-slash-hint{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;font-size:.78rem;overflow:hidden}.portal-root .jarvis-tool-calls{flex-wrap:wrap;gap:6px;margin-bottom:6px;display:flex}.portal-root .jarvis-tool-call{color:var(--text-muted);background:#1d35570d;border:1px solid #1d355714;border-radius:999px;align-items:center;gap:6px;padding:4px 9px 4px 7px;font-size:.74rem;font-weight:500;line-height:1.2;display:inline-flex}.portal-root .jarvis-tool-call svg{flex-shrink:0}.portal-root .jarvis-tool-call-done{color:#0c7d7b;background:#17bebb14;border-color:#17bebb38}.portal-root .jarvis-tool-call-error{color:var(--status-overdue);background:#d94f4f14;border-color:#d94f4f40}.portal-root .jarvis-spinner-icon{animation:.9s linear infinite jarvis-spin}@keyframes jarvis-spin{to{transform:rotate(360deg)}}.portal-root .jarvis-confirm-card{background:#fff;border:1px solid #1d35571f;border-radius:12px;max-width:460px;margin-top:8px;padding:14px 14px 12px;font-size:.85rem;box-shadow:0 4px 14px -8px #1d35572e}.portal-root .jarvis-confirm-pending{border-left:3px solid #d94f4f}.portal-root .jarvis-confirm-neutral{border-left-color:#17bebb}.portal-root .jarvis-confirm-neutral .jarvis-confirm-kind{color:#0c7d7b}.portal-root .jarvis-confirm-done{background:#17bebb0d;border-left:3px solid #17bebb}.portal-root .jarvis-confirm-fail,.portal-root .jarvis-confirm-expired{background:#1d355708;border-left:3px solid #1d35574d}.portal-root .jarvis-confirm-kind{text-transform:uppercase;letter-spacing:.1em;color:#d94f4f;margin-bottom:4px;font-size:.72rem;font-weight:700}.portal-root .jarvis-confirm-target{color:var(--text-primary);margin-bottom:2px;font-size:1rem;font-weight:600}.portal-root .jarvis-confirm-meta{color:var(--text-muted);margin-bottom:12px;font-size:.74rem}.portal-root .jarvis-confirm-input-row{gap:8px;display:flex}.portal-root .jarvis-confirm-input{min-width:0;color:var(--text-primary);box-sizing:border-box;background:#fafafa;border:1px solid #1d355726;border-radius:8px;outline:none;flex:auto;padding:9px 12px;font-family:inherit;font-size:.88rem}.portal-root .jarvis-confirm-input:focus{background:#fff;border-color:#17bebb}.portal-root .jarvis-confirm-btn{color:#fff;cursor:pointer;background:#1d3557;border:none;border-radius:8px;flex-shrink:0;padding:9px 14px;font-family:inherit;font-size:.85rem;font-weight:600}.portal-root .jarvis-confirm-btn:hover:not(:disabled){background:#16294a}.portal-root .jarvis-confirm-btn:disabled{opacity:.5;cursor:not-allowed}.portal-root .jarvis-confirm-error{color:var(--status-overdue);background:#d94f4f14;border:1px solid #d94f4f38;border-radius:6px;margin-top:8px;padding:6px 10px;font-size:.78rem}.portal-root .jarvis-confirm-title{color:var(--text-primary);margin-bottom:4px;font-size:.92rem;font-weight:700}.portal-root .jarvis-confirm-msg{color:var(--text-secondary);font-size:.84rem}@media (max-width:480px){.portal-root .jarvis-confirm-input-row{flex-direction:column}.portal-root .jarvis-confirm-btn{width:100%}}.portal-root .memory-view{flex-direction:column;gap:22px;display:flex}.portal-root .memory-new{background:#fff;border:1px solid #1d355714;border-radius:12px;padding:14px 16px}.portal-root .memory-new-row{grid-template-columns:180px 1fr auto;align-items:center;gap:8px;display:grid}.portal-root .memory-select,.portal-root .memory-input{color:var(--text-primary);box-sizing:border-box;background:#fafafa;border:1px solid #1d355726;border-radius:8px;outline:none;width:100%;padding:9px 12px;font-family:inherit;font-size:.88rem}.portal-root .memory-select:focus,.portal-root .memory-input:focus{background:#fff;border-color:#17bebb}.portal-root .memory-btn{color:#fff;cursor:pointer;white-space:nowrap;background:#1d3557;border:none;border-radius:8px;padding:9px 14px;font-family:inherit;font-size:.85rem;font-weight:600}.portal-root .memory-btn:hover:not(:disabled){background:#16294a}.portal-root .memory-btn:disabled{opacity:.5;cursor:not-allowed}.portal-root .memory-btn-small{padding:5px 10px;font-size:.78rem}.portal-root .memory-error{color:var(--status-overdue);background:#d94f4f14;border:1px solid #d94f4f38;border-radius:6px;margin-top:10px;padding:8px 12px;font-size:.82rem}.portal-root .memory-grid{grid-template-columns:1fr 1fr;gap:14px;display:grid}.portal-root .memory-cat{background:#fff;border:1px solid #1d355714;border-radius:12px;flex-direction:column;gap:10px;padding:14px 16px;display:flex}.portal-root .memory-cat-head{border-bottom:1px solid #1d355714;justify-content:space-between;align-items:baseline;padding-bottom:6px;display:flex}.portal-root .memory-cat-label{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;letter-spacing:.06em;text-transform:uppercase;color:var(--text-primary);font-size:.75rem;font-weight:700}.portal-root .memory-cat-count{font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);color:var(--text-muted);font-size:.7rem}.portal-root .memory-empty{color:var(--text-muted);font-size:.82rem;font-style:italic}.portal-root .memory-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.portal-root .memory-item{background:#1d355708;border-radius:8px;padding:8px 10px}.portal-root .memory-body{color:var(--text-primary);margin-bottom:6px;font-size:.85rem;line-height:1.45}.portal-root .memory-meta{color:var(--text-muted);align-items:center;gap:6px;font-size:.7rem;display:flex}.portal-root .memory-actions{align-items:center;gap:8px;margin-top:6px;display:flex}.portal-root .memory-edit{resize:vertical;box-sizing:border-box;background:#fff;border:1px solid #1d355726;border-radius:6px;outline:none;width:100%;padding:8px 10px;font-family:inherit;font-size:.85rem}.portal-root .memory-btn-link{color:var(--teal);cursor:pointer;background:0 0;border:none;padding:0;font-family:inherit;font-size:.74rem;text-decoration:underline}.portal-root .memory-btn-link:hover{color:var(--text-primary)}.portal-root .memory-btn-danger{color:var(--status-overdue)}.portal-root .memory-sessions{background:#fff;border:1px solid #1d355714;border-radius:12px;padding:16px 18px}.portal-root .memory-sessions-head{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;letter-spacing:.04em;color:var(--text-primary);margin:0 0 12px;font-size:1.05rem;font-weight:700}.portal-root .memory-session-list{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.portal-root .memory-session-item{background:#1d355708;border-radius:8px;padding:10px 12px}.portal-root .memory-session-head{color:var(--text-muted);justify-content:space-between;margin-bottom:4px;font-size:.74rem;display:flex}.portal-root .memory-session-summary{color:var(--text-primary);font-size:.86rem;line-height:1.45}.portal-root .memory-session-tags{flex-wrap:wrap;gap:5px;margin-top:6px;display:flex}.portal-root .memory-tag{color:#0c7d7b;font-size:.68rem;font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);background:#17bebb1a;border-radius:999px;padding:2px 7px}.portal-root .memory-session-msgs{font-variant-numeric:tabular-nums}.portal-root .memory-trash-meta{color:var(--text-muted);letter-spacing:.02em;font-size:.78rem;font-weight:400}.portal-root .memory-trash-item{background:#d94f4f0a;border:1px solid #d94f4f1f;border-radius:8px;padding:10px 12px}@media (max-width:768px){.portal-root .memory-grid{grid-template-columns:1fr}.portal-root .memory-new-row{grid-template-columns:1fr;gap:8px}}@media (max-width:480px){.portal-root .memory-cat{padding:12px}.portal-root .memory-sessions{padding:14px}.portal-root .memory-new{padding:12px}.portal-root .memory-actions{flex-wrap:wrap}}.portal-root .crm-card{flex-direction:column;gap:16px;display:flex}.portal-root .crm-head{border-bottom:1px solid #1d35570f;justify-content:space-between;align-items:baseline;padding-bottom:8px;display:flex}.portal-root .crm-title{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;letter-spacing:.04em;color:var(--text-primary);margin:0;font-size:1rem;font-weight:700}.portal-root .crm-meta{color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase;font-size:.72rem;font-weight:600}.portal-root .crm-section{flex-direction:column;gap:8px;display:flex}.portal-root .crm-label-row{justify-content:space-between;align-items:baseline;display:flex}.portal-root .crm-label{color:var(--text-secondary);font-size:.78rem;font-weight:600}.portal-root .crm-saved{color:#0c7d7b;font-size:.72rem;font-weight:600}.portal-root .crm-input,.portal-root .crm-textarea{width:100%;color:var(--text-primary);box-sizing:border-box;resize:vertical;background:#fafafa;border:1px solid #1d355726;border-radius:8px;outline:none;padding:10px 12px;font-family:inherit;font-size:.88rem}.portal-root .crm-input:focus,.portal-root .crm-textarea:focus{background:#fff;border-color:#17bebb}.portal-root .crm-tag-preview{flex-wrap:wrap;gap:5px;display:flex}.portal-root .crm-meta-row{justify-content:space-between;align-items:center;display:flex}.portal-root .crm-counter{color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:.72rem}.portal-root .crm-save{align-self:flex-end}@media (max-width:480px){.portal-root .crm-meta-row{flex-direction:column;align-items:stretch;gap:6px}.portal-root .crm-save{width:100%}}.portal-root .audit-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.portal-root .audit-clear-btn{color:var(--status-overdue);cursor:pointer;white-space:nowrap;background:#d94f4f0f;border:1px solid #d94f4f40;border-radius:8px;align-self:center;padding:8px 14px;font-family:inherit;font-size:.82rem;font-weight:600}.portal-root .audit-clear-btn:hover:not(:disabled){background:#d94f4f1f;border-color:#d94f4f66}.portal-root .audit-clear-btn:disabled{opacity:.4;cursor:not-allowed}.portal-root .audit-flash{color:#0c7d7b;background:#17bebb14;border:1px solid #17bebb4d;border-radius:8px;padding:10px 14px;font-size:.85rem;font-weight:600}.portal-root .audit-modal-backdrop{z-index:1000;background:#00000073;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.portal-root .audit-modal{background:#fff;border-left:3px solid #d94f4f;border-radius:14px;width:100%;max-width:420px;padding:22px 22px 18px;box-shadow:0 16px 48px -12px #00000059}.portal-root .audit-modal-title{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:var(--text-primary);margin:0 0 10px;font-size:1.1rem;font-weight:700}.portal-root .audit-modal-body{color:var(--text-secondary);margin:0 0 14px;font-size:.85rem;line-height:1.55}.portal-root .audit-modal-body code{font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);background:#1d35570f;border-radius:4px;padding:1px 5px;font-size:.8em}.portal-root .audit-modal-input{width:100%;color:var(--text-primary);box-sizing:border-box;background:#fafafa;border:1px solid #1d35572e;border-radius:8px;outline:none;padding:10px 12px;font-family:inherit;font-size:.9rem}.portal-root .audit-modal-input:focus{background:#fff;border-color:#d94f4f}.portal-root .audit-modal-error{color:var(--status-overdue);background:#d94f4f14;border:1px solid #d94f4f38;border-radius:6px;margin-top:8px;padding:6px 10px;font-size:.78rem}.portal-root .audit-modal-actions{justify-content:flex-end;gap:8px;margin-top:14px;display:flex}.portal-root .audit-modal-cancel{color:var(--text-secondary);cursor:pointer;background:#fff;border:1px solid #1d355726;border-radius:8px;padding:9px 14px;font-family:inherit;font-size:.85rem}.portal-root .audit-modal-cancel:hover:not(:disabled){background:#1d35570a}.portal-root .audit-modal-confirm{color:#fff;cursor:pointer;background:#d94f4f;border:none;border-radius:8px;padding:9px 16px;font-family:inherit;font-size:.85rem;font-weight:600}.portal-root .audit-modal-confirm:hover:not(:disabled){background:#c33d3d}.portal-root .audit-modal-confirm:disabled,.portal-root .audit-modal-cancel:disabled{opacity:.5;cursor:not-allowed}.portal-root .audit-filters{background:#fff;border:1px solid #1d355714;border-radius:12px;flex-wrap:wrap;gap:18px;padding:14px 16px;display:flex}.portal-root .audit-filter-group{flex-direction:column;gap:6px;min-width:0;display:flex}.portal-root .audit-filter-label{text-transform:uppercase;letter-spacing:.1em;color:var(--text-muted);font-size:.7rem;font-weight:700}.portal-root .audit-pills{flex-wrap:wrap;gap:6px;display:flex}.portal-root .audit-pill{color:var(--text-secondary);font-size:.78rem;font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);background:#1d35570a;border:1px solid #1d355714;border-radius:999px;padding:5px 10px;text-decoration:none;display:inline-block}.portal-root .audit-pill:hover{color:var(--text-primary);background:#1d355714}.portal-root .audit-pill-active{color:#fff;background:#1d3557;border-color:#1d3557}.portal-root .audit-list{flex-direction:column;gap:6px;display:flex}.portal-root .audit-empty{text-align:center;color:var(--text-muted);background:#fff;border:1px dashed #1d355726;border-radius:12px;padding:24px}.portal-root .audit-row{background:#fff;border:1px solid #1d355714;border-radius:10px;transition:border-color .12s;overflow:hidden}.portal-root .audit-row:hover{border-color:#1d35572e}.portal-root .audit-row-error{border-left:3px solid #d94f4f}.portal-root .audit-row-head{text-align:left;cursor:pointer;background:0 0;border:none;grid-template-columns:auto auto auto 1fr auto;align-items:center;gap:12px;width:100%;padding:10px 14px;font-family:inherit;font-size:.84rem;display:grid}.portal-root .audit-time{color:var(--text-muted);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:.74rem}.portal-root .audit-tool{font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);color:#0c7d7b;white-space:nowrap;font-size:.78rem;font-weight:600}.portal-root .audit-status{text-align:center;width:14px;font-size:.95rem;font-weight:700}.portal-root .audit-status-ok{color:#17bebb}.portal-root .audit-status-err{color:var(--status-overdue)}.portal-root .audit-summary{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.portal-root .audit-duration{color:var(--text-muted);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:.7rem}.portal-root .audit-row-body{background:#1d355705;border-top:1px solid #1d35570f;flex-direction:column;gap:12px;padding:12px 14px 14px;display:flex}.portal-root .audit-row-section-label{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);margin-bottom:4px;font-size:.68rem;font-weight:700}.portal-root .audit-row-pre{font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);color:var(--text-primary);white-space:pre-wrap;word-break:break-word;background:#fff;border:1px solid #1d355714;border-radius:6px;max-height:320px;margin:0;padding:10px 12px;font-size:.75rem;overflow-y:auto}@media (max-width:768px){.portal-root .audit-row-head{grid-template-columns:auto 1fr auto;grid-template-areas:"time tool status""summary summary duration";row-gap:4px}.portal-root .audit-time{grid-area:time}.portal-root .audit-tool{grid-area:tool}.portal-root .audit-status{grid-area:status}.portal-root .audit-summary{white-space:normal;grid-area:summary}.portal-root .audit-duration{grid-area:duration}}@media (max-width:480px){.portal-root .audit-modal{padding:18px 16px}.portal-root .audit-modal-actions{flex-direction:column-reverse}.portal-root .audit-modal-cancel,.portal-root .audit-modal-confirm,.portal-root .audit-clear-btn{width:100%}.portal-root .audit-header{flex-direction:column;align-items:stretch}}.portal-root .form-grid-2{grid-template-columns:1fr 1fr;gap:16px;display:grid}.portal-root .invoice-line-grid{grid-template-columns:1fr auto;align-items:center;gap:10px;margin-bottom:10px;display:grid}.portal-root .invoice-line-grid .invoice-line-row{grid-template-columns:120px auto;align-items:center;gap:10px;display:grid}.portal-root .table-wrap{overflow-x:auto}.portal-root table{border-collapse:collapse;width:100%}.portal-root thead th{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;letter-spacing:.12em;text-transform:uppercase;color:var(--text-muted);text-align:left;border-bottom:1px solid #1d355714;padding:12px 16px;font-size:.7rem;font-weight:700}.portal-root tbody td{vertical-align:middle;color:var(--text-secondary);border-bottom:1px solid #1d35570d;padding:14px 16px;font-size:.88rem}.portal-root tbody tr{transition:background var(--p-transition)}.portal-root tbody tr:hover{background:#17bebb08}.portal-root tbody tr:last-child td{border-bottom:none}.portal-root .table-name{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:var(--text-primary);font-weight:600}.portal-root .table-site{color:var(--teal)}.portal-root .badge{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;letter-spacing:.04em;border-radius:100px;align-items:center;gap:6px;padding:4px 12px;font-size:.68rem;font-weight:700;display:inline-flex}.portal-root .badge-dot{border-radius:50%;width:6px;height:6px}.portal-root .badge-new{color:var(--status-new);background:#1789fc1a}.portal-root .badge-new .badge-dot{background:var(--status-new)}.portal-root .badge-progress{color:var(--status-progress);background:#f4a6231a}.portal-root .badge-progress .badge-dot{background:var(--status-progress)}.portal-root .badge-done{color:var(--status-done);background:#2ecc711a}.portal-root .badge-done .badge-dot{background:var(--status-done)}.portal-root .badge-sent{color:var(--status-sent);background:#1789fc1a}.portal-root .badge-sent .badge-dot{background:var(--status-sent)}.portal-root .badge-paid{color:var(--status-paid);background:#2ecc711a}.portal-root .badge-paid .badge-dot{background:var(--status-paid)}.portal-root .badge-overdue{color:var(--status-overdue);background:#d94f4f1a}.portal-root .badge-overdue .badge-dot{background:var(--status-overdue)}.portal-root .form-group{margin-bottom:20px}.portal-root .form-label{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;letter-spacing:.07em;text-transform:uppercase;color:var(--text-primary);margin-bottom:8px;font-size:.75rem;font-weight:700;display:block}.portal-root .form-input,.portal-root .form-select,.portal-root .form-textarea{border-radius:var(--p-radius-sm);width:100%;max-width:100%;min-height:48px;font-family:var(--font-body), "DM Sans", sans-serif;color:var(--text-primary);background:#ffffffbf;border:1.5px solid #1d355724;outline:none;padding:14px 16px;font-size:1rem;transition:border-color .22s,box-shadow .22s,background .22s}.portal-root input[type=date].form-input{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%231d3557' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2'/%3E%3Cline x1='16' y1='2' x2='16' y2='6'/%3E%3Cline x1='8' y1='2' x2='8' y2='6'/%3E%3Cline x1='3' y1='10' x2='21' y2='10'/%3E%3C/svg%3E");background-position:right 14px center;background-repeat:no-repeat;background-size:18px 18px;min-width:0;padding-right:44px;display:block}.portal-root input[type=date].form-input::-webkit-calendar-picker-indicator{opacity:0;cursor:pointer;width:22px;height:22px;margin:0;padding:0}.portal-root input[type=date].form-input::-webkit-date-and-time-value{text-align:left}.portal-root input[type=date].form-input::-webkit-datetime-edit{padding:0}.portal-root .form-input:focus,.portal-root .form-select:focus,.portal-root .form-textarea:focus{border-color:var(--teal);background:#ffffffeb;box-shadow:0 0 0 3px #17bebb1f,0 2px 6px #17bebb12}.portal-root .form-hint{color:var(--text-muted);margin-top:6px;font-size:.78rem}.portal-root .password-field{display:block;position:relative}.portal-root .password-field-input{padding-right:48px}.portal-root .password-toggle{border-radius:var(--p-radius-sm);width:36px;height:36px;color:var(--text-muted);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;font-size:1.05rem;transition:background .18s,color .18s;display:inline-flex;position:absolute;top:50%;right:8px;transform:translateY(-50%)}.portal-root .password-toggle:hover,.portal-root .password-toggle:focus-visible{color:var(--teal);background:#17bebb14;outline:none}.portal-root .form-select{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%231d3557' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");background-position:right 14px center;background-repeat:no-repeat;padding-right:40px}.portal-root .portal-status-select{width:auto;min-width:110px;min-height:34px;font-size:.74rem;font-family:var(--font-display), "Bricolage Grotesque", sans-serif;letter-spacing:.04em;text-transform:uppercase;border-radius:100px;padding:6px 30px 6px 12px;font-weight:700}.portal-root .portal-status-select.status-nieuw{color:var(--status-new);background-color:#1789fc1a;border-color:#1789fc38}.portal-root .portal-status-select.status-bezig{color:var(--status-progress);background-color:#f4a6231a;border-color:#f4a62338}.portal-root .portal-status-select.status-klaar{color:var(--status-done);background-color:#2ecc711a;border-color:#2ecc7138}.portal-root .form-error{color:var(--status-overdue);text-align:center;margin-top:12px;font-size:.82rem}.portal-root .content-grid{grid-template-columns:1fr 1fr;gap:20px;margin-bottom:28px;display:grid}.portal-root .portal-detail-grid{grid-template-columns:minmax(0,2fr) minmax(260px,1fr);align-items:start;gap:20px;display:grid}.portal-root .activity-list{flex-direction:column;gap:0;list-style:none;display:flex}.portal-root .activity-item{border-bottom:1px solid #1d35570d;align-items:flex-start;gap:14px;padding:14px 0;display:flex}.portal-root .activity-item:last-child{border-bottom:none}.portal-root .activity-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px;margin-top:8px}.portal-root .activity-dot.teal{background:var(--teal)}.portal-root .activity-dot.azure{background:var(--azure)}.portal-root .activity-dot.green{background:var(--status-done)}.portal-root .activity-dot.orange{background:var(--status-progress)}.portal-root .activity-text{color:var(--text-secondary);flex:1;font-size:.84rem}.portal-root .activity-text strong{color:var(--text-primary);font-weight:600}.portal-root .activity-time{color:var(--text-muted);white-space:nowrap;margin-top:2px;font-size:.72rem}.portal-root .notification-bell{position:relative}.portal-root .notification-bell:after{content:"";background:var(--status-overdue);border:2px solid var(--bg-snow);border-radius:50%;width:8px;height:8px;position:absolute;top:6px;right:6px}.portal-root .portal-mobile-bar{background:var(--navy);height:56px;color:var(--text-on-dark);z-index:150;border-bottom:1px solid #ffffff14;align-items:center;gap:10px;padding:8px 12px;display:none;position:fixed;top:0;left:0;right:0}.portal-root .portal-mobile-brand{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:var(--text-on-dark);letter-spacing:-.01em;white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-size:.9rem;font-weight:700;overflow:hidden}.portal-root .portal-mobile-user{align-items:center;gap:8px;min-width:0;max-width:40%;display:flex}.portal-root .portal-mobile-avatar{background:var(--teal);width:32px;height:32px;font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:.72rem;font-weight:700;display:flex}.portal-root .portal-mobile-user-name{font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:var(--text-on-dark);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:.78rem;font-weight:600;overflow:hidden}.portal-root .portal-mobile-logout{width:40px;height:40px;color:var(--text-on-dark);cursor:pointer;transition:background var(--p-transition);background:#ffffff14;border:none;border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.portal-root .portal-mobile-logout:hover,.portal-root .portal-mobile-logout:focus-visible{background:#ffffff29}.portal-root .portal-mobile-logout svg{width:18px;height:18px;display:block}.portal-root .portal-hamburger{z-index:200;background:var(--navy);cursor:pointer;border:none;border-radius:50%;flex-direction:column;justify-content:center;align-items:center;gap:5px;width:44px;height:44px;display:none;position:fixed;top:16px;left:16px}.portal-root .portal-hamburger span{background:var(--text-on-dark);width:20px;height:2px;transition:all .35s var(--p-ease-spring);border-radius:2px;display:block}.portal-root .portal-hamburger.open span:first-child{transform:rotate(45deg)translate(5px,5px)}.portal-root .portal-hamburger.open span:nth-child(2){opacity:0}.portal-root .portal-hamburger.open span:nth-child(3){transform:rotate(-45deg)translate(5px,-5px)}.portal-root .sidebar-overlay{z-index:90;background:#1d355766;display:none;position:fixed;inset:0}.portal-root .bg-mesh{pointer-events:none;z-index:-1;background:radial-gradient(600px 400px at 70% 10%,#17bebb12,#0000),radial-gradient(500px 500px at 20% 80%,#1789fc0d,#0000),radial-gradient(400px 300px at 90% 60%,#9496c70f,#0000);position:fixed;inset:0 0 0 260px}.portal-root .login-screen{background:var(--bg-snow);justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex;position:relative}.portal-root .login-screen:before{content:"";pointer-events:none;z-index:0;background:radial-gradient(600px 400px at 70% 10%,#17bebb1a,#0000),radial-gradient(500px 500px at 20% 80%,#1789fc14,#0000),radial-gradient(400px 300px at 90% 60%,#9496c714,#0000);position:fixed;inset:0}.portal-root .login-card{z-index:1;width:100%;max-width:420px;padding:40px 36px;position:relative}.portal-root .login-brand{text-align:center;margin-bottom:28px}.portal-root .login-brand h1{letter-spacing:-.02em;font-size:1.4rem;font-weight:800}.portal-root .login-brand span{letter-spacing:.16em;text-transform:uppercase;color:var(--teal);margin-top:4px;font-size:.7rem;font-weight:700;display:block}.portal-root .login-hint{border-radius:var(--p-radius-sm);color:var(--text-secondary);text-align:center;background:#f4a6231a;border:1px solid #f4a62338;margin-top:16px;padding:12px 14px;font-size:.75rem;line-height:1.5}.portal-root .login-hint strong{color:var(--text-primary)}.portal-root .login-hint a{color:var(--teal);text-underline-offset:3px;transition:color var(--p-transition);font-weight:600;text-decoration:underline}.portal-root .login-hint a:hover{color:var(--text-primary)}.portal-root .login-back{text-align:center;font-family:var(--font-display), "Bricolage Grotesque", sans-serif;color:var(--text-muted);letter-spacing:.02em;transition:color var(--p-transition);margin-top:18px;font-size:.78rem;font-weight:600;display:block}.portal-root .login-back:hover{color:var(--teal)}@media (max-width:768px){.portal-root .portal-mobile-bar{display:flex}.portal-root .portal-hamburger{background:#ffffff14;border-radius:10px;flex-shrink:0;width:40px;height:40px;display:flex;position:static}.portal-root .sidebar{padding-top:16px;top:56px;transform:translate(-100%)}.portal-root .sidebar.open{transform:translate(0)}.portal-root .sidebar-overlay{top:56px}.portal-root .sidebar-overlay.open{display:block}.portal-root .main-content{width:100%;max-width:100%;margin-left:0;padding:72px 16px 32px}.portal-root .bg-mesh{left:0}.portal-root .stats-grid{grid-template-columns:1fr 1fr}.portal-root .content-grid,.portal-root .portal-detail-grid{grid-template-columns:1fr}.portal-root .top-bar{flex-direction:column;align-items:flex-start}.portal-root .form-grid-2{grid-template-columns:1fr}.portal-root .jarvis-header{gap:10px;padding-bottom:14px}.portal-root .jarvis-hero{gap:22px;padding:24px 8px}.portal-root .jarvis-composer-wrap{padding:10px 0 14px}.portal-root .jarvis-textarea{min-height:56px;font-size:1rem}.portal-root .jarvis-icon-btn span{display:none}.portal-root .jarvis-quick{flex-direction:column;align-items:stretch}.portal-root .jarvis-quick-btn{justify-content:flex-start}.portal-root .invoice-line-grid{grid-template-columns:1fr;gap:8px}.portal-root .invoice-line-grid .invoice-line-row{grid-template-columns:1fr auto;gap:8px;display:grid}}@media (max-width:480px){.portal-root .stats-grid{grid-template-columns:1fr}.portal-root .portal-mobile-user-name{display:none}.portal-root .main-content{padding:72px 12px 28px}}.ios-spinner{color:currentColor;vertical-align:middle;display:inline-block;position:relative}.ios-spinner-blade{opacity:.25;will-change:opacity;background:currentColor;border-radius:999px;width:8%;height:24%;animation:1s linear infinite ios-spinner-fade;position:absolute;top:44%;left:46%}.ios-spinner-blade:first-child{animation-delay:-1.667s;transform:rotate(0)translateY(-130%)}.ios-spinner-blade:nth-child(2){animation-delay:-1.583s;transform:rotate(30deg)translateY(-130%)}.ios-spinner-blade:nth-child(3){animation-delay:-1.5s;transform:rotate(60deg)translateY(-130%)}.ios-spinner-blade:nth-child(4){animation-delay:-1.417s;transform:rotate(90deg)translateY(-130%)}.ios-spinner-blade:nth-child(5){animation-delay:-1.333s;transform:rotate(120deg)translateY(-130%)}.ios-spinner-blade:nth-child(6){animation-delay:-1.25s;transform:rotate(150deg)translateY(-130%)}.ios-spinner-blade:nth-child(7){animation-delay:-1.167s;transform:rotate(180deg)translateY(-130%)}.ios-spinner-blade:nth-child(8){animation-delay:-1.083s;transform:rotate(210deg)translateY(-130%)}.ios-spinner-blade:nth-child(9){animation-delay:-1s;transform:rotate(240deg)translateY(-130%)}.ios-spinner-blade:nth-child(10){animation-delay:-.917s;transform:rotate(270deg)translateY(-130%)}.ios-spinner-blade:nth-child(11){animation-delay:-.833s;transform:rotate(300deg)translateY(-130%)}.ios-spinner-blade:nth-child(12){animation-delay:-.75s;transform:rotate(330deg)translateY(-130%)}@keyframes ios-spinner-fade{0%{opacity:.85}50%{opacity:.25}to{opacity:.25}}.btn-loading{pointer-events:none;position:relative}.btn-loading .btn-loading-label{visibility:hidden}.btn-loading-spinner{justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.route-progress{z-index:9999;pointer-events:none;background:0 0;height:2px;position:fixed;top:0;left:0;right:0}.route-progress-bar{background:linear-gradient(90deg, var(--teal,#17bebb) 0%, var(--azure,#1789fc) 100%);transform-origin:0;opacity:0;height:100%;transition:transform .3s ease-out,opacity .2s ease-out;transform:scaleX(0);box-shadow:0 0 8px #17bebb80}.route-progress-bar.start{opacity:1;transition-duration:.2s;transform:scaleX(.3)}.route-progress-bar.progress{opacity:1;transition-duration:2s;transform:scaleX(.75)}.route-progress-bar.finish{opacity:0;transition-duration:.3s;transform:scaleX(1)}.skeleton{background:linear-gradient(90deg,#1d35570f 0%,#1d35571f 50%,#1d35570f 100%) 0 0/200% 100%;border-radius:10px;animation:1.4s ease-in-out infinite skeleton-shimmer}@keyframes skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (max-width:768px){.portal-root .table-wrap:has(.responsive-table){overflow:visible}.portal-root .responsive-table{border-collapse:separate;border-spacing:0;border:0;width:100%}.portal-root .responsive-table thead{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.portal-root .responsive-table tbody{flex-direction:column;gap:12px;display:flex}.portal-root .responsive-table tr{cursor:pointer;background:#fff;border:1px solid #1d355714;border-radius:14px;flex-direction:column;gap:2px;padding:14px 16px;transition:border-color .18s,box-shadow .18s,transform .18s;display:flex;box-shadow:0 1px 2px #1d35570a}.portal-root .responsive-table tr:active{transform:scale(.995);box-shadow:0 0 0 2px #17bebb2e}.portal-root .responsive-table tr:not([data-non-interactive]):hover{border-color:#17bebb59}.portal-root .responsive-table td{text-align:left;justify-content:space-between;align-items:baseline;gap:14px;min-height:0;padding:8px 0;font-size:.92rem;display:flex;border:0!important}.portal-root .responsive-table td+td{border-top:1px solid #1d35570f!important}.portal-root .responsive-table td:before{content:attr(data-label);font-family:var(--font-body,"DM Sans", system-ui, sans-serif);letter-spacing:.06em;text-transform:uppercase;color:#1d35578c;flex:none;padding-top:2px;font-size:.68rem;font-weight:600}.portal-root .responsive-table td:empty{display:none}.portal-root .responsive-table td[data-label=""]{padding:0;display:block}.portal-root .responsive-table td[data-label=""]:before{display:none}.portal-root .responsive-table td[data-cell=primary]{font-family:var(--font-display,"Bricolage Grotesque", serif);color:var(--navy,#1d3557);order:-1;margin-bottom:4px;padding:0 0 10px;font-size:1rem;font-weight:600;display:block;border-bottom:1px solid #1d355714!important}.portal-root .responsive-table td[data-cell=primary]:before{display:none}.portal-root .responsive-table td[data-cell=primary]+td{border-top:0!important}.portal-root .responsive-table td[data-cell=action]{text-align:left;margin-top:6px;padding:12px 0 0;display:block;border-top:1px solid #1d355714!important}.portal-root .responsive-table td[data-cell=action]:before{display:none}.portal-root .responsive-table td[data-cell=action] .btn,.portal-root .responsive-table td[data-cell=action] button:not(.btn-glass-icon){width:100%;min-height:44px}.portal-root .responsive-table td[data-cell=action]>div{flex-direction:column;gap:8px;display:flex}.portal-root .responsive-table td .badge{font-size:.72rem}.portal-root .responsive-table tr>td:first-child:not([data-cell=primary]){padding-top:0}.portal-root .mobile-hide{display:none!important}}@media (min-width:769px){.portal-root .mobile-only{display:none!important}}.portal-root .list-status-badge{letter-spacing:.04em;text-transform:uppercase;border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:.72rem;font-weight:700;display:inline-flex}.portal-root .list-status-badge.status-nieuw{color:#7c3aed;background:#9747ff1f}.portal-root .list-status-badge.status-bezig{color:#c77600;background:#f4a62329}.portal-root .list-status-badge.status-klaar{color:#2ecc71;background:#2ecc7126}.portal-root .list-status-badge.status-open{color:#c77600;background:#f4a62329}.portal-root .list-status-badge.status-betaald{color:#2ecc71;background:#2ecc7126}.portal-root .list-status-badge.status-overdue{color:#d94f4f;background:#d94f4f24}
