:root{
 --bg:#f4f5f7;--card:#fff;--ink:#111827;--ink2:#4b5563;--muted:#6b7280;--line:#e5e7eb;--brand:#f5b400;--brand-ink:#7a5500;--brand-soft:#fff8db;--navy:#0f1d33;
 --ok:#15803d;--ok-soft:#dcfce7;--warn:#b45309;--warn-soft:#fef3c7;--bad:#b91c1c;--bad-soft:#fee2e2;--blue:#1d4ed8;--blue-soft:#dbeafe;
 --r:14px;--shadow:0 1px 2px rgba(0,0,0,.05),0 4px 14px rgba(0,0,0,.05);
 --s-aviso:#7c3aed;--s-asignada:#1d4ed8;--s-en_curso:#d97706;--s-terminada:#15803d;--s-facturada:#9ca3af;--s-anulada:#9ca3af;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.45 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;-webkit-tap-highlight-color:transparent}
a{color:inherit}
button,input,select,textarea{font:inherit;color:inherit}
.boot{padding:40vh 0;text-align:center;color:var(--muted)}
h1,h2,h3{margin:0;line-height:1.2}
h1{font-size:22px}h2{font-size:17px}h3{font-size:15px}
.muted{color:var(--muted)}.small{font-size:13px}.nowrap{white-space:nowrap}.right{margin-left:auto}.num{font-variant-numeric:tabular-nums}
.hidden{display:none!important}

/* Botones */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 16px;border-radius:10px;border:1px solid var(--line);background:#fff;font-weight:600;cursor:pointer;text-decoration:none;white-space:nowrap}
.btn:active{transform:translateY(1px)}
.btn.primary{background:var(--navy);border-color:var(--navy);color:#fff}
.btn.accent{background:var(--brand);border-color:var(--brand);color:var(--ink)}
.btn.dark{background:var(--navy);border-color:var(--navy);color:#fff}
.btn.green{background:#16a34a;border-color:#16a34a;color:#fff}
.btn.orange{background:#d97706;border-color:#d97706;color:#fff}
.btn.danger{color:var(--bad);border-color:#fecaca}
.btn.ghost{border-color:transparent;background:transparent}
.btn.big{min-height:58px;font-size:18px;width:100%;border-radius:14px}
.btn.sm{min-height:36px;padding:0 12px;font-size:14px;border-radius:10px}
.btn:disabled{opacity:.5;cursor:default}
.btns{display:flex;gap:8px;flex-wrap:wrap}

/* Estructura */
.layout{min-height:100vh}
.side{display:none}
.top{position:sticky;top:0;z-index:20;background:rgba(244,245,247,.94);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);padding:calc(8px + env(safe-area-inset-top)) 14px 8px;display:flex;align-items:center;gap:10px;min-height:60px}
.top .title{flex:1;min-width:0}
.top .title h1{font-size:19px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.top .title .sub{font-size:13px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.top .back{width:44px;height:44px;border-radius:12px;border:0;background:transparent;font-size:26px;cursor:pointer;margin-left:-8px}
.main{padding:14px 14px calc(96px + env(safe-area-inset-bottom));max-width:1180px;margin:0 auto}
.bottom{position:fixed;left:0;right:0;bottom:0;z-index:30;background:#fff;border-top:1px solid var(--line);display:grid;grid-auto-flow:column;grid-auto-columns:1fr;padding:4px 4px calc(4px + env(safe-area-inset-bottom))}
.bottom a{display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 0;text-decoration:none;font-size:11px;font-weight:600;color:var(--muted);border-radius:10px;position:relative}
.bottom a span{font-size:22px;line-height:1.1;display:flex}
.bottom a.on{color:var(--ink)}
.bottom a.on span{filter:none}
.bottom a.plus span.circle{width:52px;height:52px;margin-top:-22px;border-radius:50%;background:var(--navy);color:#fff;display:grid;place-items:center;font-size:26px;box-shadow:0 6px 16px rgba(15,29,51,.35)}
.bottom .badge-count{position:absolute;top:2px;left:calc(50% + 6px)}
.badge-count{display:inline-block;min-width:18px;padding:0 5px;border-radius:9px;background:var(--bad);color:#fff;font-size:11px;line-height:18px;text-align:center;font-weight:700}

@media(min-width:900px){
 .layout{display:grid;grid-template-columns:236px minmax(0,1fr)}
 .side{display:flex;flex-direction:column;gap:4px;position:sticky;top:0;height:100vh;padding:18px 12px;background:var(--navy);color:#e5e7eb}
 .side .brand{display:flex;align-items:center;gap:10px;padding:4px 8px 18px;font-weight:800;font-size:18px;color:#fff}
 .side .brand img{width:34px;height:34px;border-radius:9px}
 .side a{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;text-decoration:none;font-weight:600;color:#cbd5e1}
 .side a:hover{background:#1b2b47}
 .side a.on{background:#1b2b47;color:#fff;box-shadow:inset 3px 0 0 var(--brand)}
 .side a .badge-count{margin-left:auto}
 .side .new{margin:0 0 14px}
 .side .foot{margin-top:auto;font-size:13px;color:#94a3b8;padding:8px 12px}
 .bottom{display:none}
 .top{padding:12px 24px;min-height:68px}
 .main{padding:22px 24px 40px}
}

/* Tarjetas y formularios */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:16px;margin-bottom:14px}
.card>h2{margin-bottom:12px;display:flex;align-items:center;gap:8px}
.field{display:block;margin-bottom:12px}
.field>span{display:block;font-size:13px;font-weight:600;color:var(--ink2);margin-bottom:5px}
.input,select.input,textarea.input{width:100%;min-height:48px;padding:10px 12px;border:1px solid #d1d5db;border-radius:12px;background:#fff;font-size:16px}
textarea.input{min-height:96px;resize:vertical}
.input:focus{outline:3px solid #fde68a;border-color:var(--brand)}
.row{display:grid;gap:10px;grid-template-columns:1fr 1fr}
.grid2{display:grid;gap:14px}
@media(min-width:900px){.grid2{grid-template-columns:1.3fr 1fr;align-items:start}}
.chips{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
.chips::-webkit-scrollbar{display:none}
.chips.wrap{flex-wrap:wrap;overflow:visible}
.chip{flex:none;display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:0 14px;border-radius:999px;border:1px solid var(--line);background:#fff;font-weight:600;font-size:14px;cursor:pointer;white-space:nowrap}
.chip.on{background:var(--navy);border-color:var(--navy);color:#fff}
.chip .n{opacity:.7;font-weight:700}
.check{display:flex;align-items:center;gap:10px;min-height:44px;font-weight:600;cursor:pointer}
.check input{width:22px;height:22px;accent-color:var(--navy)}
.with-mic{position:relative}
.with-mic .mic{position:absolute;right:8px;bottom:8px;width:40px;height:40px;border-radius:50%;border:0;background:#eef2f7;color:var(--navy);font-size:18px;cursor:pointer;display:grid;place-items:center}
.with-mic .mic.rec{background:var(--bad);color:#fff;animation:pulse 1s infinite}
@keyframes pulse{50%{opacity:.6}}
.search{position:relative}
.search .input{padding-left:40px}
.search::before{content:"";position:absolute;left:14px;top:15px;width:18px;height:18px;background:var(--muted);-webkit-mask:var(--m) center/contain no-repeat;mask:var(--m) center/contain no-repeat;--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}
.suggest{border:1px solid var(--line);border-radius:12px;background:#fff;margin-top:6px;overflow:hidden;box-shadow:var(--shadow)}
.suggest button{display:block;width:100%;text-align:left;padding:10px 12px;border:0;border-bottom:1px solid var(--line);background:#fff;cursor:pointer}
.suggest button:last-child{border-bottom:0}
.suggest button:hover{background:var(--brand-soft)}

/* Estados */
.st{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:700;color:#fff;background:var(--c,#64748b);white-space:nowrap}
.tag{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:700;padding:2px 8px;border-radius:6px;background:#f1f5f9;color:var(--ink2)}
.tag.bad{background:var(--bad-soft);color:var(--bad)}.tag.ok{background:var(--ok-soft);color:var(--ok)}.tag.blue{background:var(--blue-soft);color:var(--blue)}

/* Resumen y listas */
.summary{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}
.summary button{text-align:left;border:1px solid var(--line);background:#fff;border-radius:var(--r);padding:12px 14px;cursor:pointer;box-shadow:var(--shadow)}
.summary button.on{outline:2px solid var(--navy)}
.summary b{display:block;font-size:26px;line-height:1.1}
.summary span{font-size:13px;color:var(--muted);font-weight:600}
.summary small{display:block;font-size:12px;color:var(--ok);font-weight:700}
.jobs{display:grid;gap:10px;margin-top:12px}
@media(min-width:1100px){.jobs.cols{grid-template-columns:1fr 1fr}}
.job{display:block;background:#fff;border:1px solid var(--line);border-left:5px solid var(--c,#64748b);border-radius:var(--r);padding:12px 14px;text-decoration:none;box-shadow:var(--shadow)}
.job .l1{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.job .l1 .n{font-weight:800}
.job .l2{font-weight:700;margin-top:6px}
.job .l3{color:var(--ink2);font-size:14px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.job .l4{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:8px;font-size:13px;color:var(--muted)}
.job .assign{margin-top:10px}
.job .assign select{min-height:40px;font-size:14px}
.empty{text-align:center;padding:36px 16px;color:var(--muted)}
.empty b{display:block;font-size:17px;color:var(--ink);margin-bottom:6px}
.list{display:grid;grid-template-columns:minmax(0,1fr)}
.list>a,.list>div{display:flex;align-items:center;gap:10px;padding:12px 2px;border-bottom:1px solid var(--line);text-decoration:none}
.list>:last-child{border-bottom:0}
.list .grow{flex:1;min-width:0}
.list .grow b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.section-title{display:flex;align-items:center;gap:8px;margin:18px 2px 8px;font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}

/* Trabajo */
.jobhead .who{font-size:20px;font-weight:800;margin:6px 0 2px}
.jobhead .desc{white-space:pre-wrap;margin-top:8px;padding:10px 12px;border-radius:12px;background:#f9fafb;border:1px solid var(--line)}
.quick{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}
.timer{display:flex;align-items:center;gap:12px;padding:14px;border-radius:14px;background:var(--warn-soft);color:#78350f;margin-bottom:10px;font-weight:700}
.timer b{font-size:26px;font-variant-numeric:tabular-nums;margin-left:auto}
.timer .dot{width:12px;height:12px;border-radius:50%;background:#d97706;animation:pulse 1.2s infinite}
.lines .ln{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}
.lines .ln:last-child{border-bottom:0}
.lines .q{min-width:58px;font-weight:800;font-variant-numeric:tabular-nums}
.lines .d{flex:1;min-width:0}
.lines .d small{display:block;color:var(--muted);font-size:12px}
.lines .p{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.lines .x{width:36px;height:36px;border-radius:10px;border:1px solid var(--line);background:#fff;cursor:pointer;color:var(--muted)}
.lines .ln.edit{cursor:pointer}
.totals{display:grid;grid-template-columns:1fr auto;gap:4px 16px;margin-top:10px;padding-top:10px;border-top:2px solid var(--ink);font-variant-numeric:tabular-nums}
.totals .big{font-size:20px;font-weight:800}
.photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:8px}
.photos a{aspect-ratio:1;border-radius:12px;background:#e5e7eb center/cover no-repeat;display:block}
.hours{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:8px 0}
.done-box{padding:14px;border-radius:14px;background:var(--ok-soft);color:#14532d;font-weight:600;margin-bottom:14px}
.done-box img{display:block;max-width:240px;max-height:110px;background:#fff;border-radius:8px;margin-top:8px}
.events{font-size:13px;color:var(--ink2)}
.events div{padding:5px 0;border-bottom:1px dashed var(--line)}
.events div:last-child{border:0}

/* Equipo */
.person{border-left:5px solid var(--pc,#94a3b8)}
.person .ph{display:flex;align-items:center;gap:10px}
.person .ph .av{width:40px;height:40px;border-radius:50%;background:var(--pc,#94a3b8);color:#fff;display:grid;place-items:center;font-weight:800;flex:none}
.person .now{margin-top:10px;padding:10px 12px;border-radius:12px;background:var(--warn-soft);color:#78350f;font-weight:600;font-size:14px}
.person .now.off{background:#f3f4f6;color:var(--muted)}
.tl{margin-top:10px;font-size:14px}
.tl>div{display:flex;gap:10px;padding:7px 0;border-top:1px solid var(--line)}
.tl .t{width:94px;flex:none;font-variant-numeric:tabular-nums;color:var(--ink2);font-weight:600}
.week{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;font-size:14px}
.week th,.week td{padding:10px 6px;border-bottom:1px solid var(--line);text-align:center}
.week th:first-child,.week td:first-child{text-align:left}
.week td.z{color:#d1d5db}
.week tr.tot td{font-weight:800;border-bottom:0}
.scroll-x{overflow-x:auto}
.datenav{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.datenav b{min-width:150px;text-align:center}

/* Facturar */
.group{padding:0;overflow:hidden}
.group .gh{display:flex;align-items:center;gap:10px;padding:14px 16px;background:#f9fafb;border-bottom:1px solid var(--line)}
.group .gl{padding:0 16px}
.group label{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line);cursor:pointer}
.group label:last-child{border-bottom:0}
.group input[type=checkbox]{width:22px;height:22px;accent-color:var(--navy);flex:none}
.sticky-bar{position:sticky;bottom:calc(70px + env(safe-area-inset-bottom));z-index:15;display:flex;align-items:center;gap:8px;background:var(--navy);color:#fff;border-radius:16px;padding:10px;box-shadow:0 8px 24px rgba(0,0,0,.25)}
.sticky-bar .input{width:auto;min-width:0;flex:none;width:142px;min-height:44px;padding:6px 6px;color:var(--ink);font-size:15px}
.sticky-bar .btn{flex:1;min-width:0;padding:0 8px;font-size:15px}
.sticky-bar b{font-size:15px}
@media(min-width:900px){.sticky-bar{bottom:16px}}

/* Albarán y factura imprimibles */
.paper{background:#fff;border:1px solid var(--line);border-radius:6px;padding:28px;max-width:820px;margin:0 auto;font-size:14px;box-shadow:var(--shadow)}
.paper .ph{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;border-bottom:3px solid var(--navy);padding-bottom:14px;margin-bottom:14px}
.paper .ph h2{font-size:22px}
.paper .doc{text-align:right}
.paper .doc b{font-size:20px;display:block}
.paper .parties{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:14px}
.paper .parties div{padding:10px;border:1px solid var(--line);border-radius:6px}
.paper table{width:100%;border-collapse:collapse;margin:8px 0}
.paper th{font-size:12px;text-align:left;color:var(--muted);border-bottom:1px solid var(--ink);padding:6px 4px}
.paper td{padding:6px 4px;border-bottom:1px solid var(--line);vertical-align:top}
.paper .r{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.paper .alb{margin-top:14px}
.paper .alb h3{font-size:14px;background:#f3f4f6;padding:6px 8px;border-radius:4px}
.paper .work{white-space:pre-wrap;padding:6px 4px;color:var(--ink2)}
.paper .tot{margin-left:auto;width:min(300px,100%);margin-top:12px}
.paper .tot div{display:flex;justify-content:space-between;padding:4px 0}
.paper .tot .big{font-size:18px;font-weight:800;border-top:2px solid var(--ink);padding-top:8px}
.paper .sig{margin-top:16px;display:flex;gap:20px;align-items:flex-end;flex-wrap:wrap}
.paper .sig img{max-width:240px;max-height:100px;border-bottom:1px solid var(--ink)}
.paper .foot{margin-top:20px;font-size:12px;color:var(--muted);white-space:pre-wrap}
.noprint{}
@media print{
 body{background:#fff}
 .side,.bottom,.top,.noprint,#toast{display:none!important}
 .layout{display:block}.main{padding:0;max-width:none}
 .paper{border:0;box-shadow:none;padding:0;max-width:none}
}

/* Login */
.login{max-width:400px;margin:0 auto;padding:12vh 20px 40px}
.login .logo{display:flex;align-items:center;gap:12px;font-size:26px;font-weight:800;margin-bottom:24px}
.login .logo img{width:52px;height:52px;border-radius:14px}

/* Diálogos */
dialog{border:0;border-radius:18px;padding:0;width:min(560px,100vw - 16px);max-height:calc(100vh - 16px);box-shadow:0 20px 60px rgba(0,0,0,.3)}
dialog::backdrop{background:rgba(15,23,42,.5)}
dialog .dh{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:8px;padding:12px 12px 12px 18px;background:#fff;border-bottom:1px solid var(--line)}
dialog .dh h2{flex:1}
dialog .db{padding:16px 18px 18px}
.danger-zone{display:flex;gap:10px;justify-content:space-between;flex-wrap:wrap;margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}
canvas.sig{display:block;width:100%;height:190px;border:2px dashed #9ca3af;border-radius:12px;background:#fff;touch-action:none;margin-bottom:8px}
.stepper{display:flex;align-items:center;gap:10px}
.stepper button{width:52px;height:52px;border-radius:14px;border:1px solid var(--line);background:#fff;font-size:24px;font-weight:700;cursor:pointer}
.stepper input{width:100px;text-align:center;font-size:22px;font-weight:800}
@media(max-width:600px){dialog{width:100vw;max-width:100vw;max-height:100dvh;height:100dvh;border-radius:0;margin:0}}

#toast{position:fixed;left:50%;bottom:calc(90px + env(safe-area-inset-bottom));transform:translateX(-50%) translateY(20px);opacity:0;pointer-events:none;background:var(--ink);color:#fff;padding:12px 18px;border-radius:12px;font-weight:600;z-index:100;transition:.2s;max-width:calc(100vw - 32px)}
#toast.show{opacity:1;transform:translateX(-50%)}
#toast.bad{background:var(--bad)}

/* Iconos de línea (estilo Lucide) */
.i{display:inline-block;width:1.15em;height:1.15em;vertical-align:-.2em;flex:none;background:currentColor;-webkit-mask:var(--m) center/contain no-repeat;mask:var(--m) center/contain no-repeat}
.i-wrench{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z'/%3E%3C/svg%3E")}
.i-receipt{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1Z'/%3E%3Cpath d='M8 7h8M8 11h8M8 15h5'/%3E%3C/svg%3E")}
.i-file{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z'/%3E%3Cpath d='M14 2v4a2 2 0 0 0 2 2h4M8 13h8M8 17h8M8 9h2'/%3E%3C/svg%3E")}
.i-users{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='9' cy='7' r='4'/%3E%3Cpath d='M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75'/%3E%3C/svg%3E")}
.i-hardhat{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 18a1 1 0 0 0 1 1h18a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v2z'/%3E%3Cpath d='M10 10V5a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v5M4 15v-3a6 6 0 0 1 6-6M14 6a6 6 0 0 1 6 6v3'/%3E%3C/svg%3E")}
.i-user{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='12' cy='7' r='4'/%3E%3C/svg%3E")}
.i-package{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z'/%3E%3Cpath d='M12 22V12M3.3 7 12 12l8.7-5'/%3E%3C/svg%3E")}
.i-filepen{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v9.5'/%3E%3Cpath d='M14 2v4a2 2 0 0 0 2 2h4M13.38 15.62a2.1 2.1 0 1 0-3-3L5 18v3h3z'/%3E%3C/svg%3E")}
.i-sliders{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 4h-7M10 4H3M21 12h-9M8 12H3M21 20h-5M12 20H3M14 2v4M8 10v4M16 18v4'/%3E%3C/svg%3E")}
.i-check{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='m9 12 2 2 4-4'/%3E%3C/svg%3E")}
.i-pin{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 10c0 4.99-5.53 10.19-7.4 11.8a1 1 0 0 1-1.2 0C9.53 20.19 4 14.99 4 10a8 8 0 0 1 16 0'/%3E%3Ccircle cx='12' cy='10' r='3'/%3E%3C/svg%3E")}
.i-alert{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4M12 17h.01'/%3E%3C/svg%3E")}
.i-building{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z'/%3E%3Cpath d='M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2M10 6h4M10 10h4M10 14h4M10 18h4'/%3E%3C/svg%3E")}
.i-calendar{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2'/%3E%3Cpath d='M16 2v4M8 2v4M3 10h18'/%3E%3C/svg%3E")}
.i-pen{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20h9M16.38 3.62a1 1 0 0 1 3 3L7.37 18.64a2 2 0 0 1-.86.5l-2.87.84a.5.5 0 0 1-.62-.62l.84-2.87a2 2 0 0 1 .5-.86z'/%3E%3C/svg%3E")}
.i-phone{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'/%3E%3C/svg%3E")}
.i-plug{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 22v-5M9 8V2M15 8V2M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z'/%3E%3C/svg%3E")}
.i-clock{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 6v6l4 2'/%3E%3C/svg%3E")}
.i-printer{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9V2h12v7M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2'/%3E%3Crect x='6' y='14' width='12' height='8'/%3E%3C/svg%3E")}
.i-nav{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 11l19-9-9 19-2-8-8-2z'/%3E%3C/svg%3E")}
.i-camera{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z'/%3E%3Ccircle cx='12' cy='13' r='3'/%3E%3C/svg%3E")}
.i-mic{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3ZM19 10v2a7 7 0 0 1-14 0v-2M12 19v3'/%3E%3C/svg%3E")}
.i-stop{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='6' y='6' width='12' height='12' rx='1'/%3E%3C/svg%3E")}
.i-refresh{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8M21 3v5h-5M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16M8 16H3v5'/%3E%3C/svg%3E")}
.i-play{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 4l13 8-13 8V4z'/%3E%3C/svg%3E")}
.i-pause{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 4v16M15 4v16'/%3E%3C/svg%3E")}
.i-undo{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 14 4 9l5-5M4 9h10.5a5.5 5.5 0 0 1 0 11H11'/%3E%3C/svg%3E")}
.i-menu{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6h16M4 12h16M4 18h16'/%3E%3C/svg%3E")}
.i-plus{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 5v14M5 12h14'/%3E%3C/svg%3E")}
.i-x{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E")}
.i-euro{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 10h12M4 14h9M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2'/%3E%3C/svg%3E")}
.i-search{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}
.i-bolt{--m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13 2 4 14h7l-1 8 9-12h-7z'/%3E%3C/svg%3E")}

.side a .i,.list .i{color:inherit;opacity:.85}
.job .l4 span{display:inline-flex;align-items:center;gap:4px}
.card>h2 .i{color:var(--muted)}
.chip .i{opacity:.8}
.photos>p{grid-column:1/-1;margin:0}

/* Fichajes */
.clockin{text-align:center;padding:28px 18px}
.clockin h2{margin:10px 0 8px}
.big-ic{font-size:44px;color:var(--navy)}
.shiftbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 12px;border-radius:12px;background:#eef2f7;margin-bottom:12px;font-weight:600}
.shiftbar b{margin-left:auto;font-variant-numeric:tabular-nums;font-size:18px}
.week.shifts td,.week.shifts th{text-align:left}
.week tr.z td{color:var(--muted)}
.printonly{display:none}
.sigs{margin-top:40px;display:none;grid-template-columns:1fr 1fr;gap:40px}
.sigs div{border-top:1px solid var(--ink);padding-top:6px;font-size:12px}
@media print{.printonly{display:block}.sigs{display:grid}}
.week tr.printonly-row{display:none}
@media print{.week tr.printonly-row{display:table-row}}

/* Proyectos */
.gray-card{background:#f8fafc}
select.input.sm-select{flex:none;width:auto;min-height:36px;padding:4px 8px;font-size:14px}
.ai-busy{display:flex;gap:12px;align-items:center;margin-top:12px;padding:14px;border-radius:12px;background:var(--blue-soft);color:#1e3a8a}
.spin{width:22px;height:22px;border-radius:50%;border:3px solid #93c5fd;border-top-color:#1d4ed8;animation:spin 1s linear infinite;flex:none}
@keyframes spin{to{transform:rotate(360deg)}}
.note-box{margin-top:12px;padding:12px 14px;border-radius:12px;background:#f1f5f9;color:var(--ink2);font-size:14px}
.err-box{margin-top:12px;padding:12px 14px;border-radius:12px;background:var(--bad-soft);color:#7f1d1d;font-size:14px}
.facts{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;margin:8px 0}
.facts b{font-weight:600}
.ul{margin:4px 0;padding-left:20px}.ul li{margin-bottom:4px}
.ul.checks{list-style:none;padding:0}.ul.checks .check{min-height:32px;font-weight:500}
.alert{padding:10px 12px;border-radius:10px;margin-bottom:8px;font-size:14px;border-left:4px solid}
.alert-alta{background:var(--bad-soft);border-color:var(--bad)}.alert-media{background:var(--warn-soft);border-color:#d97706}.alert-baja{background:#f1f5f9;border-color:#94a3b8}
.chapter{margin-bottom:10px}
.ch-head{display:flex;justify-content:space-between;padding:8px 0;border-bottom:2px solid var(--line)}
.pitem{display:flex;gap:10px;align-items:flex-start;padding:10px 0;border-bottom:1px solid var(--line);cursor:pointer}
.pitem .grow{flex:1;min-width:0}.pitem .grow b{display:block;font-weight:600;font-size:14px}.pitem .grow .small{display:block}
.pitem .num{white-space:nowrap;font-weight:700}
[class^=dot-]{display:inline-block;width:10px;height:10px;border-radius:50%;flex:none;margin-top:5px}
.dot-ok{background:#16a34a}.dot-dudoso{background:#f59e0b}.dot-sin{background:#dc2626}
.tot-grid{display:grid;grid-template-columns:1fr auto;gap:8px 12px;align-items:center}
.tot-grid label{display:flex;align-items:center;gap:6px}
.tot-grid .pct{width:70px;min-height:36px;padding:4px 8px;text-align:right}
.tot-grid .big{font-size:20px}
.writeup{min-height:320px;font-size:14px;line-height:1.5}
.writeup-print h3{margin:14px 0 6px}.writeup-print p{margin:0 0 8px}.writeup-print li{margin-left:18px}

/* Plantilla de factura y albarán */
.sheet{position:relative;font-size:13.5px;padding:34px 40px 28px 52px;font-family:Arial,Helvetica,sans-serif}
.legal-v{position:absolute;left:14px;bottom:28%;transform:rotate(-90deg);transform-origin:left bottom;white-space:nowrap;font-size:9.5px;color:#333;width:0}
.sheet-logo{text-align:center;margin-bottom:26px}.sheet-logo img{max-height:130px;max-width:60%}.sheet-logo h1{font-size:26px}
.sheet-meta{display:grid;grid-template-columns:1fr 1fr;gap:20px;align-items:center;margin-bottom:24px}
.sheet-num div{margin:4px 0;font-size:15px}.sheet-num b{font-size:16px}
.sheet-client{line-height:1.6;text-transform:uppercase}.sheet-client b{font-weight:400}
.sheet-table{width:100%;border-collapse:collapse;border:1.5px solid #222}
.sheet-table th{background:#e6e6e6;border:1.5px solid #222;padding:6px;font-size:14px;color:#111;text-align:center}
.sheet-table td{border-left:1.5px solid #222;border-right:1.5px solid #222;padding:4px 8px;vertical-align:top;border-bottom:0}
.sheet-table .c{text-align:center;white-space:nowrap;width:1%;padding:4px 14px}
.sheet-table tr.sub td{color:#444;font-size:12.5px;padding-top:10px}
.sheet-table tr.fill td{height:180px}
.sheet-iban{margin:10px 0 0;font-size:13px}
.sheet-tot{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;background:#e6e6e6;border:1.5px solid #222;border-top:0;padding:7px 14px;font-size:14px}
.sheet-iban+.sheet-tot{border-top:1.5px solid #222;margin-top:8px}
.sheet-tot b{margin-right:10px}
.sheet-pay{margin-top:22px;font-size:14px}.sheet-pay b{margin-right:24px}
.sheet-foot{margin-top:26px;text-align:center;font-size:12.5px}
.sheet .sig{margin-top:22px}
.logo-box{display:flex;align-items:center;gap:16px;margin-bottom:14px;flex-wrap:wrap}.logo-box img{max-height:70px;max-width:200px;border:1px solid var(--line);border-radius:8px;padding:6px;background:#fff}
@media print{.sheet{padding:0 0 0 30px;font-size:12.5px}.legal-v{left:-6px}.sheet-table tr.fill td{height:320px}}
.chip.tchk{cursor:pointer;font-weight:500}.chip.tchk input{width:18px;height:18px;accent-color:var(--navy)}
.ph-logo{display:block;max-height:80px;max-width:260px;margin-bottom:6px}

/* Licitaciones */
.tender.is-new{border-left:5px solid var(--bad)}
.tender-meta{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:8px;font-size:14px;align-items:center}
.tender-meta span{display:inline-flex;align-items:center;gap:5px}
.due-bad{color:var(--bad);font-weight:700}
.tender-banner{display:flex;align-items:center;gap:10px;padding:12px 14px;margin-bottom:14px;border-radius:14px;background:var(--navy);color:#fff;text-decoration:none}
.tender-banner .i{color:var(--brand);font-size:20px}

/* Sobres */
.env{border:1px solid var(--line);border-radius:12px;margin:10px 0;overflow:hidden}
.env-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 12px;background:#f8fafc;border-bottom:1px solid var(--line)}
.env-item{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:flex-start;padding:10px 12px;border-bottom:1px solid var(--line)}
.env-item:last-child{border-bottom:0}
.env-item .grow{flex:1 1 220px;min-width:0}.env-item .grow b{display:block;font-size:14px}.env-item .grow span{display:block}
.env-item .btns{flex:0 0 auto;align-items:center;margin-left:auto}
.check.small{min-height:32px;font-size:13px}

/* Obra */
.summary.money b{font-size:19px}
.summary .neg b,.neg{color:var(--bad)}
table.mini{width:100%;border-collapse:collapse;font-size:13.5px;font-variant-numeric:tabular-nums}
table.mini th{font-size:12px;color:var(--muted);text-align:left;border-bottom:1px solid var(--line);padding:6px 4px}
table.mini td{padding:6px 4px;border-bottom:1px solid var(--line)}
table.mini .r{text-align:right;white-space:nowrap}
.po-pick{max-height:300px;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:0 8px}
.po-pick .check{align-items:flex-start;font-weight:500}
tr.clickable{cursor:pointer}tr.clickable:hover td{background:#f9fafb}
