:root{--color-primary: #234c63;--color-primary-light: #2e5a73;--color-deep: #001b7a;--color-accent: #14b8af;--color-accent-light: #3dd6cd;--color-accent-dark: #0f8f88;--color-warning: #d97706;--color-danger: #dc2626;--color-success: #16a34a;--color-bg: #eef3f8;--color-surface: #ffffff;--color-border: #dce5ee;--color-border-strong: #c3d2df;--color-text: #14242e;--color-muted: #64778a;--radius-sm: 6px;--radius: 10px;--radius-lg: 14px;--shadow-sm: 0 1px 2px rgba(20, 40, 55, .06), 0 1px 3px rgba(20, 40, 55, .04);--shadow: 0 4px 12px rgba(20, 40, 55, .08);--shadow-lg: 0 12px 28px rgba(20, 40, 55, .14);font-family:Inter,Segoe UI,system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{margin:0;background:var(--color-bg);color:var(--color-text);font-size:14px;line-height:1.5}h1{font-size:1.55rem;font-weight:700;letter-spacing:-.02em;margin:0 0 .25rem}h2{letter-spacing:-.01em}@keyframes fadeInUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}[dir=rtl] body,[dir=rtl],[dir=rtl] th,[dir=rtl] td{text-align:right}[dir=rtl] .nav-link{border-left:none;border-right:3px solid transparent}[dir=rtl] .nav-link.active{border-right-color:var(--color-accent-light)}[dir=rtl] .nav-link:hover{transform:translate(-2px)}[dir=rtl] .kpi-card:before,[dir=rtl] .notif{left:auto;right:0}[dir=rtl] .kpi-card{padding-left:1.25rem;padding-right:1.5rem}[dir=rtl] .notif{border-left:none;border-right:4px solid var(--color-muted)}[dir=rtl] .notif-info{border-right-color:var(--color-accent)}[dir=rtl] .notif-warning{border-right-color:var(--color-warning)}[dir=rtl] .notif-danger{border-right-color:var(--color-danger)}[dir=rtl] .panel h2:before{margin-left:.5rem;margin-right:0}[dir=rtl] .filter-count{margin-left:0;margin-right:auto}[dir=rtl] .content:after{right:auto;left:-60px}[dir=rtl] .tab{font-family:inherit}.login-page{display:flex;align-items:center;justify-content:center;min-height:100vh;background:radial-gradient(1200px 600px at 20% -10%,#2e5a73 0%,transparent 60%),linear-gradient(135deg,var(--color-deep) 0%,var(--color-primary) 60%,var(--color-accent-dark) 130%);position:relative;overflow:hidden}.login-page:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:url(/brand/fishes-watermark.png) center/55% no-repeat;opacity:.07;filter:brightness(0) invert(1)}.login-card{background:var(--color-surface);padding:2.5rem;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:400px;display:flex;flex-direction:column;gap:.4rem;position:relative;z-index:1;animation:fadeInUp .5s ease}.login-logo{width:185px;align-self:center;margin-bottom:.75rem}.login-card .subtitle{margin:0 0 1rem;color:var(--color-muted);font-size:.85rem;text-align:center}.login-card h2{margin:.25rem 0 .5rem;font-size:1.05rem;font-weight:600}.login-card label{font-size:.8rem;font-weight:600;margin-top:.5rem;color:var(--color-muted)}.login-card input{padding:.65rem .75rem;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);font-size:.95rem;font-family:inherit;transition:border-color .2s,box-shadow .2s}.login-card input:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px #14b8af2e}.login-card button{margin-top:1.5rem;padding:.75rem;background:linear-gradient(135deg,var(--color-primary),var(--color-accent-dark));color:#fff;border:none;border-radius:var(--radius-sm);font-size:.95rem;font-weight:600;font-family:inherit;cursor:pointer;transition:transform .15s,box-shadow .2s,filter .2s}.login-card button:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.06);box-shadow:0 8px 20px #14b8af66}.login-card button:disabled{opacity:.6;cursor:not-allowed}.login-card .error{color:var(--color-danger);font-size:.85rem;margin:.5rem 0 0}.app-layout{display:flex;min-height:100vh}.sidebar{width:248px;background:linear-gradient(180deg,var(--color-deep) 0%,var(--color-primary) 100%);color:#fff;display:flex;flex-direction:column;flex-shrink:0;position:sticky;top:0;height:100vh}.sidebar-brand{padding:1.25rem 1.1rem;border-bottom:1px solid rgba(255,255,255,.12);display:flex;align-items:center;justify-content:center}.sidebar-brand img{width:100%;max-width:180px;background:#fff;border-radius:var(--radius);padding:.7rem .85rem;box-shadow:var(--shadow-sm)}.sidebar nav{display:flex;flex-direction:column;padding:1rem .65rem;gap:.15rem;flex:1}.nav-section{font-size:.68rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:#ffffff73;padding:.25rem .85rem .5rem}.nav-link{display:flex;align-items:center;gap:.7rem;color:#ffffffd1;text-decoration:none;padding:.7rem .85rem;border-radius:var(--radius-sm);font-size:.92rem;font-weight:500;border-left:3px solid transparent;transition:background .18s,color .18s,border-color .18s,transform .18s}.nav-icon{width:19px;height:19px;flex-shrink:0;opacity:.85}.nav-link:hover{background:#ffffff1a;color:#fff;transform:translate(2px)}.nav-link.active{background:#14b8af2e;border-left-color:var(--color-accent-light);color:#fff;font-weight:600}.nav-link.active .nav-icon{opacity:1;color:var(--color-accent-light)}.sidebar-footer{padding:.9rem 1.1rem;border-top:1px solid rgba(255,255,255,.12)}.sidebar-version{font-size:.72rem;color:#ffffff80}.main-area{flex:1;display:flex;flex-direction:column;min-width:0}.navbar{display:flex;align-items:center;justify-content:space-between;background:var(--color-surface);border-bottom:1px solid var(--color-border);padding:.7rem 1.5rem;box-shadow:var(--shadow-sm);position:sticky;top:0;z-index:10}.navbar-user{display:flex;align-items:center;gap:.65rem}.avatar{width:38px;height:38px;border-radius:50%;background:linear-gradient(135deg,var(--color-primary),var(--color-accent));color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.85rem;flex-shrink:0}.navbar-user-info{display:flex;flex-direction:column;line-height:1.25}.navbar-user-name{font-weight:600;font-size:.92rem}.role-badge{font-size:.72rem;font-weight:600;color:var(--color-accent-dark)}.navbar-actions{display:flex;align-items:center;gap:1rem}.lang-switch{display:flex;gap:.2rem;background:var(--color-bg);padding:.2rem;border-radius:var(--radius-sm)}.lang-btn{border:none;background:transparent;border-radius:4px;padding:.3rem .55rem;font-size:.75rem;font-weight:600;color:var(--color-muted);cursor:pointer;transition:all .15s}.lang-btn.active{background:var(--color-primary);color:#fff;box-shadow:var(--shadow-sm)}.logout-btn{border:1px solid var(--color-border-strong);background:var(--color-surface);border-radius:var(--radius-sm);padding:.45rem .85rem;font-size:.85rem;font-weight:500;cursor:pointer;transition:all .15s}.logout-btn:hover{border-color:var(--color-danger);color:var(--color-danger);background:#fff5f5}.content{padding:1.75rem;flex:1;position:relative;animation:fadeIn .35s ease}.content:after{content:"";position:fixed;right:-60px;bottom:-60px;width:480px;height:480px;background:url(/brand/fishes-watermark.png) center/contain no-repeat;opacity:.045;pointer-events:none;z-index:0}.content>*{position:relative;z-index:1}.content h1{color:var(--color-primary)}.page-subtitle{color:var(--color-muted);font-size:.9rem;margin:0 0 1.5rem}.app-footer{background:var(--color-primary);color:#fffc;font-size:.72rem;text-align:center;padding:.55rem 1rem}.app-footer strong{color:var(--color-accent-light);font-weight:700}.centered{display:flex;align-items:center;justify-content:center;min-height:100vh}.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:1.1rem;margin-bottom:1.75rem}.kpi-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:1.2rem 1.25rem;position:relative;overflow:hidden;box-shadow:var(--shadow-sm);transition:transform .2s,box-shadow .2s;animation:fadeInUp .4s ease both}.kpi-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--color-accent)}.kpi-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg)}.kpi-card.warning:before{background:var(--color-warning)}.kpi-card.warning{background:#fffbf3}.kpi-title{font-size:.78rem;color:var(--color-muted);margin-bottom:.5rem;font-weight:500}.kpi-value{font-size:1.9rem;font-weight:800;letter-spacing:-.02em;color:var(--color-primary)}.kpi-subtitle{font-size:.78rem;color:var(--color-muted);margin-top:.3rem}.tabs{display:flex;gap:.4rem;border-bottom:1px solid var(--color-border-strong);margin-bottom:1.5rem;flex-wrap:wrap}.tab{background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;padding:.65rem 1rem;cursor:pointer;font-size:.92rem;font-weight:500;font-family:inherit;color:var(--color-muted);transition:color .2s,border-color .2s}.tab:hover{color:var(--color-accent-dark)}.tab.active{color:var(--color-primary);border-bottom-color:var(--color-accent);font-weight:600}.panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:1.4rem;margin-bottom:1.5rem;box-shadow:var(--shadow-sm);animation:fadeInUp .4s ease both}.panel h2{margin:0 0 1rem;font-size:1.05rem;font-weight:700;color:var(--color-primary);display:flex;align-items:center;gap:.5rem}.panel h2:before{content:"";width:4px;height:18px;border-radius:2px;background:var(--color-accent)}table{width:100%;border-collapse:collapse;font-size:.88rem}thead th{background:#eaf1f7;color:var(--color-primary);font-weight:600;font-size:.78rem;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}th,td{text-align:left;padding:.65rem .8rem;border-bottom:1px solid var(--color-border)}tbody tr{transition:background .12s}tbody tr:hover td{background:#f1f8fb}tbody tr:last-child td{border-bottom:none}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:.9rem;margin-bottom:1.1rem}.form-grid label{display:flex;flex-direction:column;font-size:.8rem;font-weight:600;gap:.35rem;color:var(--color-muted)}.form-grid input,.form-grid select,.form-grid textarea{padding:.55rem .65rem;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);font-size:.9rem;font-weight:400;font-family:inherit;color:var(--color-text);transition:border-color .2s,box-shadow .2s}.form-grid input:focus,.form-grid select:focus,.form-grid textarea:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px #14b8af24}.btn{background:linear-gradient(135deg,var(--color-primary),var(--color-primary-light));color:#fff;border:none;border-radius:var(--radius-sm);padding:.6rem 1.15rem;cursor:pointer;font-size:.88rem;font-weight:600;font-family:inherit;transition:transform .15s,box-shadow .2s,filter .2s}.btn:hover{transform:translateY(-1px);box-shadow:var(--shadow);filter:brightness(1.06)}.btn.accent{background:linear-gradient(135deg,var(--color-accent),var(--color-accent-light))}.btn.secondary{background:var(--color-surface);color:var(--color-primary);border:1px solid var(--color-border-strong)}.btn.secondary:hover{border-color:var(--color-accent);color:var(--color-accent-dark)}.btn-link{background:none;border:none;color:var(--color-accent-dark);cursor:pointer;text-decoration:underline;padding:0;font-size:.85rem;font-family:inherit;font-weight:500}.error{color:var(--color-danger);font-size:.88rem}.badge{display:inline-block;padding:.2rem .6rem;border-radius:20px;font-size:.72rem;font-weight:600}.badge.ok{background:#e8fbf7;color:var(--color-accent-dark)}.badge.warning{background:#fff4e5;color:var(--color-warning)}.badge.danger{background:#fdeaea;color:var(--color-danger)}.dot-badge{margin-left:.4rem;font-size:.62rem;padding:.1rem .4rem;vertical-align:middle}.filters{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;margin-bottom:1rem}.filters input[type=text],.filters input:not([type]),.filters select{padding:.5rem .6rem;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);font-size:.85rem;font-family:inherit}.filters input:not([type=checkbox]){min-width:230px}.filter-count{margin-left:auto;font-size:.8rem;font-weight:600;color:var(--color-muted)}.check-field{flex-direction:row!important;align-items:center;gap:.4rem!important;font-size:.85rem;font-weight:500;color:var(--color-text);cursor:pointer}.check-field input{width:16px;height:16px;accent-color:var(--color-accent)}.table-scroll{overflow-x:auto}.row-delegate td{background:#14b8af0f}.actions-cell{white-space:nowrap}.line-counts{display:flex;gap:.4rem;flex-wrap:wrap;margin-bottom:1rem}.tarifa-chips{display:flex;gap:.4rem;flex-wrap:wrap;margin-bottom:.9rem}.coste-entry{display:flex;align-items:center;gap:.5rem;padding:.15rem 0;font-size:.85rem}.add-task-row{display:flex;align-items:center;gap:.4rem}.add-task-row select,.add-task-row input{padding:.4rem .5rem;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);font-size:.85rem;font-family:inherit}.add-task-row .btn{padding:.4rem .7rem}.files-section{border-top:1px solid var(--color-border);margin-top:.5rem;padding-top:1rem}.files-section h3{font-size:.95rem;color:var(--color-primary);margin:0 0 .75rem}.file-row{display:flex;align-items:center;gap:.75rem;padding:.5rem .6rem;border-radius:var(--radius-sm);margin-bottom:.4rem;flex-wrap:wrap}.file-row-required{background:#fff4e5;border:1px solid #f0c98a}.file-row-label{display:flex;align-items:center;gap:.5rem;min-width:200px;font-weight:600;font-size:.85rem}.inline-row{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem;flex-wrap:wrap}.inline-row select,.inline-row input{padding:.45rem .55rem;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);font-size:.85rem;font-family:inherit}.inline-row input[type=number]{max-width:160px}.subhead{font-size:.9rem;color:var(--color-primary);margin:1.2rem 0 .6rem;font-weight:700}.notif-list{display:flex;flex-direction:column;gap:.5rem}.notif{display:flex;align-items:center;gap:.7rem;padding:.6rem .9rem;border-radius:var(--radius-sm);font-size:.88rem;border-left:4px solid var(--color-muted);background:var(--color-bg)}.notif-module{font-weight:700;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;padding:.15rem .5rem;border-radius:20px;background:#0000000d;white-space:nowrap}.notif-info{border-left-color:var(--color-accent);background:#e8fbf7}.notif-warning{border-left-color:var(--color-warning);background:#fff4e5}.notif-danger{border-left-color:var(--color-danger);background:#fdeaea}.mini-upload{display:inline-block;font-size:.78rem;color:var(--color-accent-dark);cursor:pointer;text-decoration:underline}.tracker{display:flex;flex-wrap:wrap;gap:.5rem;margin:.75rem 0 .5rem}.tracker-step{display:flex;align-items:center;gap:.4rem;font-size:.78rem;color:var(--color-muted);background:var(--color-bg);padding:.3rem .7rem;border-radius:20px}.tracker-step.done{background:#14b8af26;color:var(--color-accent-dark);font-weight:600}.tracker-dot{width:9px;height:9px;border-radius:50%;background:var(--color-border-strong)}.tracker-step.done .tracker-dot{background:var(--color-accent)}.subtabs{display:flex;gap:.3rem;margin-bottom:1.1rem}.subtab{background:var(--color-bg);border:1px solid var(--color-border);border-radius:20px;padding:.4rem 1rem;cursor:pointer;font-size:.85rem;font-weight:500;font-family:inherit;color:var(--color-muted);transition:all .15s}.subtab.active{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.photo-grid{display:flex;flex-wrap:wrap;gap:.5rem}.photo-chip{display:flex;align-items:center;gap:.4rem;background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:.4rem .7rem;font-size:.85rem}.row-nonconforme td{background:#fff4e5}.doc-alert{padding:.7rem 1rem;border-radius:var(--radius-sm);font-weight:600;font-size:.88rem;background:#fff4e5;color:var(--color-warning);border:1px solid #f0c98a}.doc-alert.doc-alert-late{background:#fdeaea;color:var(--color-danger);border-color:#f3b0b0}.doc-alert.ok{background:#e8fbf7;color:var(--color-accent-dark);border-color:#a9e8e0}td input:not([type=checkbox]):not([type=file]),td select{padding:.4rem .5rem;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);font-size:.85rem;font-family:inherit;width:100%;min-width:90px}.menu-btn{display:none;background:none;border:none;color:var(--color-primary);cursor:pointer;padding:.35rem;border-radius:var(--radius-sm)}.sidebar-overlay{display:none}.split-2{display:grid;grid-template-columns:1fr 1fr;gap:20px}@media (max-width: 900px){.sidebar{position:fixed;left:0;top:0;height:100vh;height:100dvh;z-index:60;transform:translate(-105%);transition:transform .25s ease;box-shadow:0 0 40px #00000059;width:min(280px,84vw)}.sidebar.open{transform:translate(0)}[dir=rtl] .sidebar{left:auto;right:0;transform:translate(105%)}[dir=rtl] .sidebar.open{transform:translate(0)}.sidebar-overlay{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#08162280;z-index:50}.menu-btn{display:inline-flex;align-items:center}.navbar{padding:.55rem .8rem;gap:.5rem;flex-wrap:wrap}.navbar-user-info{display:none}.navbar-actions{gap:.5rem}.content{padding:.9rem .8rem}h1{font-size:1.25rem}.kpi-grid{grid-template-columns:repeat(2,1fr)!important;gap:.6rem}.form-grid{grid-template-columns:1fr!important}.split-2{grid-template-columns:1fr}.tabs,.subtabs{overflow-x:auto;flex-wrap:nowrap;-webkit-overflow-scrolling:touch;scrollbar-width:none}.tabs::-webkit-scrollbar,.subtabs::-webkit-scrollbar{display:none}.tabs .tab,.subtabs .subtab{white-space:nowrap;flex-shrink:0}.panel{overflow-x:auto;padding:.9rem}.panel table,.table-scroll table{min-width:560px}.filters,.inline-row{flex-wrap:wrap;gap:.5rem}.app-footer{font-size:.62rem;padding:.6rem .8rem;line-height:1.5}.login-card{width:min(92vw,380px);padding:1.4rem 1.2rem}}@media (max-width: 480px){.kpi-grid{grid-template-columns:1fr 1fr!important}.lang-switch .lang-btn{padding:.25rem .45rem}.logout-btn{padding:.4rem .6rem;font-size:.78rem}}@media (max-width: 900px){.stack-mobile{grid-template-columns:1fr!important}}
