@import"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap";.sidebar{position:fixed;top:0;left:0;bottom:0;width:240px;background:var(--sidebar-bg);transform:translate(-100%);transition:transform .2s ease;z-index:50;display:flex;flex-direction:column}.sidebar.open{transform:translate(0)}.sidebar-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:40}.sidebar-brand{padding:var(--space-lg) var(--space-md)}.sidebar-brand img{width:94%;height:auto;display:block}.sidebar-nav{display:flex;flex-direction:column;padding:0 var(--space-sm);flex:1;overflow-y:auto}.sidebar-link{display:flex;align-items:center;gap:var(--space-sm);padding:11px var(--space-sm);border-radius:var(--r-sm);color:var(--sidebar-text);text-decoration:none;font-weight:500;font-size:.92rem}.sidebar-link-icon{font-size:1.15rem;flex-shrink:0}.sidebar-link:hover{color:var(--sidebar-text-active)}.sidebar-link.active{background:var(--sidebar-active);color:var(--sidebar-text-active)}.sidebar-group{display:flex;flex-direction:column;gap:2px;padding:var(--space-sm) 0}.sidebar-group:first-child{padding-top:0}.sidebar-group+.sidebar-group{border-top:1px solid var(--sidebar-divider)}.sidebar-config{padding:var(--space-sm);border-top:1px solid var(--sidebar-divider)}.sidebar-user{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md);border-top:1px solid var(--sidebar-divider)}.sidebar-user-avatar{width:36px;height:36px;border-radius:50%;background:var(--brand);color:var(--brand-contrast);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.85rem;flex-shrink:0}.sidebar-user-info{display:flex;flex-direction:column;min-width:0;flex:1}.sidebar-user-name{color:var(--sidebar-text-active);font-size:.85rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-user-role{color:var(--sidebar-text);font-size:.75rem;text-transform:capitalize}.sidebar-logout{background:none;border:none;color:var(--sidebar-text);cursor:pointer;font-size:1.1rem;display:flex;align-items:center;padding:var(--space-xs);flex-shrink:0}.sidebar-logout:hover{color:var(--sidebar-text-active)}@media(min-width:768px){.sidebar{position:sticky;transform:none;width:var(--sidebar-w);flex-shrink:0;height:100vh;top:0}.sidebar-overlay{display:none}}.topbar{height:var(--topbar-h);display:flex;align-items:center;gap:var(--space-md);padding:0 var(--space-md);background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:30}.topbar-menu-btn{background:none;border:none;font-size:1.3rem;color:var(--text);cursor:pointer;display:flex;padding:var(--space-xs);flex-shrink:0}.topbar-titles{min-width:0}.topbar-title{margin:0;font-size:1.15rem;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-subtitle{margin:2px 0 0;font-size:.8rem;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-spacer{flex:1}.topbar-fecha{display:none;align-items:center;gap:var(--space-xs);color:var(--text-muted);font-size:.85rem;white-space:nowrap}.topbar-notif{position:relative;flex-shrink:0}.topbar-bell{position:relative;background:none;border:none;color:var(--text-muted);font-size:1.25rem;cursor:pointer;display:flex;align-items:center;padding:var(--space-xs)}.topbar-bell-badge{position:absolute;top:0;right:0;background:var(--brand);color:var(--brand-contrast);font-size:.65rem;font-weight:700;line-height:1;border-radius:var(--r-pill);min-width:16px;height:16px;display:flex;align-items:center;justify-content:center;padding:0 3px}.topbar-notif-menu{position:absolute;top:calc(100% + var(--space-sm));right:0;width:320px;max-width:calc(100vw - 2 * var(--space-md));max-height:360px;overflow-y:auto;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--shadow-pop);z-index:40;padding:var(--space-sm) 0}.topbar-notif-titulo{font-weight:700;font-size:.9rem;padding:var(--space-xs) var(--space-md) var(--space-sm);border-bottom:1px solid var(--border)}.topbar-notif-vacio{padding:var(--space-md);font-size:.85rem;color:var(--text-muted)}.topbar-notif-grupo-titulo{padding:var(--space-sm) var(--space-md) var(--space-xs);font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}.topbar-notif-item{display:flex;flex-direction:column;gap:2px;width:100%;text-align:left;background:none;border:none;cursor:pointer;padding:var(--space-xs) var(--space-md)}.topbar-notif-item:hover{background:var(--surface-2)}.topbar-notif-item-titulo{font-size:.85rem;font-weight:600;color:var(--text)}.topbar-notif-item-sub{font-size:.75rem;color:var(--text-muted)}@media(min-width:768px){.topbar-menu-btn{display:none}.topbar-fecha{display:flex}}.shell{display:flex;min-height:100vh}.shell-main{flex:1;display:flex;flex-direction:column;min-width:0}.shell-content{padding:var(--space-md);flex:1;background:var(--bg-app)}@media(min-width:768px){.shell-content{padding:var(--space-lg)}}.login-page{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-lg);padding:var(--space-lg);background:var(--bg-login)}.login-header{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);text-align:center}.login-logo{width:100%;max-width:288px;height:auto}.login-tagline{margin:0;color:var(--text-muted);font-size:1rem}.login-card{background:var(--surface);border-radius:var(--r-lg);padding:var(--space-xl);width:100%;max-width:480px;box-shadow:var(--shadow-pop);display:flex;flex-direction:column}.login-title{margin:0 0 var(--space-sm);font-size:1.3rem;font-weight:700;color:var(--text)}.login-title-underline{display:block;width:40px;height:3px;border-radius:var(--r-pill);background:var(--brand);margin-bottom:var(--space-lg)}.login-field-label{font-size:.85rem;font-weight:600;color:var(--text);margin-bottom:var(--space-xs)}.login-input{display:flex;align-items:center;gap:var(--space-sm);border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);padding:0 var(--space-md);margin-bottom:var(--space-md)}.login-input:focus-within{border-color:var(--brand)}.login-input-icon{color:var(--text-faint);font-size:1.1rem;flex-shrink:0}.login-input input{flex:1;border:none;outline:none;background:transparent;font-family:var(--font);font-size:1rem;color:var(--text);padding:12px 0;min-width:0}.login-input input::placeholder{color:var(--text-faint)}.login-toggle-eye{background:none;border:none;cursor:pointer;color:var(--text-faint);font-size:1.1rem;display:flex;align-items:center;padding:var(--space-xs)}.login-toggle-eye:hover{color:var(--text-muted)}.login-error{color:var(--danger);font-size:.9rem;margin:-8px 0 var(--space-md)}.login-submit{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);width:100%;border:none;border-radius:var(--r-md);background:var(--brand);color:var(--brand-contrast);font-family:var(--font);font-weight:700;font-size:1.05rem;padding:14px 20px;cursor:pointer;transition:background .15s ease,transform .05s ease}.login-submit:hover:not(:disabled){background:var(--brand-hover)}.login-submit:active:not(:disabled){transform:scale(.99)}.login-submit:disabled{opacity:.7;cursor:not-allowed}.login-footer{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);color:var(--text-muted);font-size:.85rem;text-align:center}.login-footer-tick{display:block;width:32px;height:3px;border-radius:var(--r-pill);background:var(--brand)}.btn{font-family:var(--font);font-weight:600;font-size:.95rem;border:none;border-radius:var(--r-md);padding:12px 20px;cursor:pointer;transition:background .15s ease,transform .05s ease,opacity .15s ease}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-primary{background:var(--brand);color:var(--brand-contrast)}.btn-primary:not(:disabled):hover{background:var(--brand-hover)}.btn-accent{background:var(--ink);color:var(--brand-contrast)}.btn-accent:not(:disabled):hover{opacity:.9}.btn-outline{background:transparent;color:var(--text);border:1px solid var(--border)}.btn-outline:not(:disabled):hover{background:var(--surface-2)}.btn-danger{background:var(--danger);color:var(--brand-contrast)}.btn-danger:not(:disabled):hover{opacity:.9}.fichaje-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--space-md)}.fichaje-card{background:var(--color-surface);border-radius:var(--radius-lg);padding:var(--space-xl);width:100%;max-width:400px;text-align:center}.fichaje-btn{width:100%;font-size:1.3rem;padding:28px;margin:var(--space-lg) 0}.fichaje-mensaje{font-size:.9rem;margin-bottom:var(--space-lg)}.fichaje-card .list{text-align:left;font-size:.85rem;color:var(--color-text-muted)}.card{background:var(--surface);border-radius:var(--r-md);border:1px solid var(--border);box-shadow:var(--shadow-card);padding:var(--space-md);margin-bottom:var(--space-md)}.card-title{margin:0 0 var(--space-md);font-size:1rem;font-weight:700;color:var(--text)}.table-empty{color:var(--text-muted);font-size:.9rem;padding:var(--space-md) 0}.table-wrap{overflow-x:auto}.table{width:100%;border-collapse:collapse;font-size:.9rem}.table th{text-align:left;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);padding:var(--space-sm);border-bottom:1px solid var(--border);white-space:nowrap}.table td{padding:var(--space-sm);border-bottom:1px solid var(--border);vertical-align:middle;color:var(--text)}.table tr:last-child td{border-bottom:none}.table tr.clickable{cursor:pointer}.table tr.clickable:hover{background:var(--bg-app)}.table td.num,.table th.num{text-align:right}.table td.saldo,.table td.danger{color:var(--danger);font-weight:600}.badge{display:inline-block;font-size:.75rem;font-weight:600;padding:3px 10px;border-radius:var(--r-pill);white-space:nowrap}.badge-pendiente{background:var(--st-pendiente-bg);color:var(--st-pendiente-tx)}.badge-aprobado{background:var(--st-aprobado-bg);color:var(--st-aprobado-tx)}.badge-revision{background:var(--st-revision-bg);color:var(--st-revision-tx)}.badge-fabricacion{background:var(--st-fabricacion-bg);color:var(--st-fabricacion-tx)}.badge-montaje{background:var(--st-montaje-bg);color:var(--st-montaje-tx)}.badge-rechazado{background:var(--st-rechazado-bg);color:var(--st-rechazado-tx)}.stat-grid{display:grid;grid-template-columns:1fr;gap:var(--space-md);margin-bottom:var(--space-lg)}.stat-card{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--shadow-card);padding:var(--space-md)}.stat-card-icon{display:flex;align-items:center;justify-content:center;width:44px;height:44px;flex-shrink:0;border-radius:var(--r-md);background:var(--brand-soft);color:var(--brand);font-size:1.3rem}.stat-card-body{display:flex;flex-direction:column;flex:1;min-width:0}.stat-card-value{font-size:1.5rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;overflow-wrap:break-word}.stat-card-label{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}.stat-card-link{display:inline-flex;align-items:center;justify-content:flex-end;gap:4px;flex-basis:100%;font-size:.85rem;font-weight:600;color:var(--brand);white-space:nowrap}.dash-grid{display:grid;grid-template-columns:1fr;gap:var(--space-md)}.dash-card-footer{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--border);font-size:.85rem}.dash-link{display:inline-flex;align-items:center;gap:4px;font-weight:600;color:var(--brand);white-space:nowrap}@media(min-width:640px){.stat-grid{grid-template-columns:repeat(2,1fr)}}@media(min-width:1024px){.stat-grid{grid-template-columns:repeat(4,1fr)}.dash-grid{grid-template-columns:repeat(2,1fr)}}@media(min-width:1024px)and (max-width:1399px){.stat-card-value{font-size:1.15rem}}.field{display:flex;flex-direction:column;gap:var(--space-xs);margin-bottom:var(--space-md)}.field-label{font-size:.85rem;font-weight:600;color:var(--text-muted)}.field-input{font-family:var(--font);font-size:1rem;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-sm);background:var(--surface);color:var(--text);width:100%}.field-input:focus{outline:2px solid var(--brand-soft);border-color:var(--brand);outline-offset:1px}textarea.field-input{resize:vertical;min-height:80px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:flex-end;justify-content:center;z-index:100}.modal{background:var(--surface);border-radius:var(--r-lg) var(--r-lg) 0 0;width:100%;max-width:480px;max-height:90vh;overflow-y:auto;padding:var(--space-md);box-shadow:var(--shadow-pop)}.modal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md)}.modal-header h2{margin:0;font-size:1.1rem;color:var(--text)}.modal-close{background:none;border:none;font-size:1.5rem;cursor:pointer;line-height:1;color:var(--text-muted)}@media(min-width:768px){.modal-overlay{align-items:center}.modal{border-radius:var(--r-lg);padding:var(--space-lg)}}.toast-container{position:fixed;bottom:var(--space-md);right:var(--space-md);z-index:1000;display:flex;flex-direction:column;gap:var(--space-sm);max-width:calc(100vw - 2 * var(--space-md))}.toast{padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);box-shadow:var(--shadow-md);color:#fff;font-size:.9rem;font-weight:600;animation:toast-in .2s ease-out}.toast-success{background:var(--color-success)}.toast-error{background:var(--color-danger)}.toast-info{background:var(--color-info)}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}:root{--brand: #ef6b00;--brand-hover: #d65f00;--brand-soft: #fff1e6;--brand-contrast: #ffffff;--ink: #222323;--bg-app: #f4f5f7;--bg-login: #eef0f2;--surface: #ffffff;--surface-2: #fbfbfb;--sidebar-bg: #222323;--sidebar-active: #2e2f2f;--sidebar-text: #b9bcbe;--sidebar-text-active: #ffffff;--sidebar-accent: var(--brand);--sidebar-divider: rgba(255, 255, 255, .08);--text: #222323;--text-muted: #6b7075;--text-faint: #9aa0a6;--border: #e4e6e9;--border-strong: #d3d6da;--st-pendiente-bg: #ffe9d6;--st-pendiente-tx: #c2410c;--st-aprobado-bg: #d6f0dd;--st-aprobado-tx: #15803d;--st-revision-bg: #dbe8ff;--st-revision-tx: #1d4ed8;--st-fabricacion-bg:#dbe8ff;--st-fabricacion-tx:#1d4ed8;--st-montaje-bg: #ffe9d6;--st-montaje-tx: #c2410c;--st-rechazado-bg: #f3d6d6;--st-rechazado-tx: #b91c1c;--danger: #dc2626;--success: #15803d;--r-sm: 8px;--r-md: 12px;--r-lg: 16px;--r-pill: 999px;--shadow-card: 0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04);--shadow-pop: 0 10px 30px rgba(0,0,0,.12);--font: "Inter", system-ui, -apple-system, sans-serif;--sidebar-w: 250px;--topbar-h: 64px;--space-xs: 4px;--space-sm: 8px;--space-md: 16px;--space-lg: 24px;--space-xl: 32px;--color-primary: var(--brand);--color-accent: var(--brand);--color-accent-light: var(--brand-soft);--color-surface: var(--surface);--color-bg: var(--bg-app);--color-text: var(--text);--color-text-muted: var(--text-muted);--color-text-inverse: var(--brand-contrast);--color-border: var(--border);--color-danger: var(--danger);--color-success: var(--success);--color-warning: var(--st-pendiente-tx);--color-info: var(--st-revision-tx);--color-neutral: var(--text-muted);--font-family: var(--font);--radius-sm: var(--r-sm);--radius-md: var(--r-md);--radius-lg: var(--r-lg);--shadow-md: var(--shadow-card);--sidebar-width: var(--sidebar-w);--topbar-height: var(--topbar-h)}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font);color:var(--text);background:var(--bg-app);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}.num,table td.num,.monto,.saldo,.total{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}.muted{color:var(--text-muted);font-size:.9rem}.list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.list li{padding:var(--space-sm) 0;border-bottom:1px solid var(--border);font-size:.9rem}.list li:last-child{border-bottom:none}.page-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-md);flex-wrap:wrap}.page-header h1{margin:0}a{color:var(--brand)}h1,h2,h3,h4{font-weight:700;letter-spacing:-.01em}
