:root{color-scheme:dark;--bg:#060e12;--ink:#f0f6ed;--mut:#a8bab6;--brand:#d4f36a;--accent:#8de0cd;--card:#122026;--card2:#0c181d;--line:#304247;--wall:#c9d6d2;--floor:#16262c;--door:#ffb629;--glass:#5fb7e8;--furn:#3a4c50;--screen:#8de0cd;--screen-new:#d4f36a;--warn:#ffb629;--err:#ff6d6d;font-family:Inter,Arial,sans-serif;background:var(--bg);color:var(--ink)}
*{box-sizing:border-box}
[hidden]{display:none!important}
body{margin:0;background:var(--bg);color:var(--ink)}
button,input,select{font:inherit}
button,a,input,select{touch-action:manipulation}
button,a{cursor:pointer}
a{color:inherit;text-decoration:none}
main{max-width:1440px;margin:auto;padding:30px 4vw 60px}
.intro{display:flex;align-items:end;justify-content:space-between;gap:20px;flex-wrap:wrap;margin-bottom:16px}
.back{display:inline-block;color:var(--mut);font-size:13px;margin-bottom:12px}
.back:hover{color:var(--ink)}
.eyebrow{margin:0 0 6px;color:var(--brand);font:800 11px/1.3 ui-monospace,Menlo,monospace;letter-spacing:.16em;text-transform:uppercase}
h1{margin:0;font-size:clamp(26px,3.4vw,40px);line-height:1.05;letter-spacing:-.02em}
.address{margin:6px 0 0;color:var(--mut);font-size:14px}
.modes{display:flex;border:1px solid var(--line);border-radius:999px;padding:4px;background:var(--card2)}
.modes button{border:0;background:transparent;color:var(--mut);padding:9px 16px;border-radius:999px;font-weight:700;font-size:14px}
.modes button[aria-pressed="true"]{background:var(--brand);color:#0b1408}
.page-status{color:var(--mut);font-size:14px;margin:10px 0}
.page-status:empty{display:none}
.source{margin:0 0 16px;padding:10px 14px;border:1px dashed var(--line);border-radius:10px;color:var(--mut);font-size:13px;line-height:1.45;background:var(--card2)}
.source strong{color:var(--warn)}
.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 14px;padding:10px;border:1px solid var(--line);border-radius:12px;background:var(--card)}
.toolbar button,.order-actions button,.inspector button{border:1px solid var(--line);background:var(--card2);color:var(--ink);border-radius:8px;padding:8px 12px;font-size:13px;font-weight:600}
.toolbar button:hover,.order-actions button:hover,.inspector button:hover{border-color:var(--accent)}
.toolbar .ghost{color:var(--mut)}
.toolbar-label{color:var(--mut);font-size:12px;text-transform:uppercase;letter-spacing:.1em;margin-left:6px}
.toolbar-spacer{flex:1}
.proposal-title{min-width:220px;flex:0 1 320px;border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:8px;padding:8px 10px;font-weight:700}
.saved{color:var(--mut);font-size:12px}
.views{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.25fr);gap:16px}
.card{border:1px solid var(--line);background:var(--card);border-radius:14px;padding:16px;min-width:0}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.card h2{margin:0;font-size:15px;letter-spacing:.01em}
.hint{color:var(--mut);font-size:12px;margin:0}
.svg-wrap{background:var(--card2);border-radius:10px;border:1px solid var(--line);overflow:hidden}
svg{display:block;width:100%;height:auto;max-height:62vh;touch-action:none;user-select:none}
#drag-hint{margin-top:8px}
.wall-tabs{display:flex;gap:4px;flex-wrap:wrap}
.wall-tabs button{border:1px solid var(--line);background:var(--card2);color:var(--mut);border-radius:6px;padding:5px 9px;font-size:12px;font-weight:600}
.wall-tabs button[aria-selected="true"]{border-color:var(--accent);color:var(--ink);background:#173037}
.lower{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:16px;margin-top:16px}
.lower:has(.inspector[hidden]){grid-template-columns:1fr}
.table-wrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
th{color:var(--mut);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.08em}
tbody tr{cursor:pointer}
tbody tr:hover{background:#16292f}
tbody tr[aria-selected="true"]{background:#1b363d}
td code{font-size:12px;color:var(--accent)}
.tag{display:inline-block;padding:2px 7px;border-radius:999px;font-size:11px;font-weight:700;border:1px solid var(--line);color:var(--mut)}
.tag.alta{color:var(--screen-new);border-color:var(--screen-new)}
.tag.baja{color:var(--err);border-color:var(--err)}
.tag.modificacion,.tag.sustitucion{color:var(--warn);border-color:var(--warn)}
.inspector label{display:grid;gap:4px;font-size:12px;color:var(--mut);margin:0 0 10px}
.inspector input,.inspector select{border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:7px;padding:7px 9px;font-size:14px;width:100%}
.inspector .row{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.inspector .check{display:flex;align-items:center;gap:8px;color:var(--ink)}
.inspector .check input{width:auto}
.inspector .facts{font-size:12px;color:var(--mut);line-height:1.5;margin:4px 0 12px}
.inspector .facts b{color:var(--ink);font-weight:600}
.inspector .danger{color:var(--err);border-color:rgba(255,109,109,.5)}
.inspector .buttons{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.order{margin-top:16px}
.issues{list-style:none;padding:0;margin:0 0 12px;display:grid;gap:6px}
.issues li{font-size:13px;padding:7px 10px;border-radius:8px;border:1px solid var(--line);background:var(--card2)}
.issues li.error{border-color:rgba(255,109,109,.55)}
.issues li.error::before{content:"✖ ";color:var(--err)}
.issues li.aviso::before{content:"▲ ";color:var(--warn)}
.ok{color:var(--accent);font-size:13px;margin:0 0 12px}
.actions{margin:0;padding-left:20px;display:grid;gap:10px}
.actions li{font-size:13px;line-height:1.45}
.actions li strong{font-size:14px}
.actions ul{margin:4px 0 0;padding-left:18px;color:var(--mut)}
.actions .itil{color:var(--accent)}
.actions .contenidos{color:var(--brand)}
.empty{color:var(--mut);font-size:13px}
/* SVG · 100 unidades por metro. Rótulos, trazos finos y márgenes se multiplican por --k (escala
   del Xpacio: 1 en un local de 14 m como Starbucks, 0,25 en una sala de 3,5 m), así se leen igual
   en pantalla sea cual sea el tamaño. Paredes, huecos y pantallas van a su medida real. */
.floor{fill:var(--floor)}
.wall{stroke:var(--wall);stroke-width:14;stroke-linecap:square;fill:none}
.wall-hit{stroke:transparent;stroke-width:max(28px,calc(60px * var(--k,1)));fill:none;cursor:pointer}
.wall-hit:hover+.wall-label,.wall-hit:focus+.wall-label{fill:var(--ink)}
.wall.active{stroke:var(--accent)}
.wall-label{fill:var(--mut);font-size:calc(22px * var(--k,1));font-weight:700;pointer-events:none}
.gap-door{stroke:var(--floor);stroke-width:18}
.door-arc{fill:none;stroke:var(--door);stroke-width:calc(3px * var(--k,1));stroke-dasharray:calc(6px * var(--k,1)) calc(5px * var(--k,1))}
.gap-glass{stroke:var(--glass);stroke-width:8}
.furniture{fill:var(--furn);stroke:#56696d;stroke-width:calc(2px * var(--k,1))}
.furniture-label{fill:var(--ink);font-size:calc(20px * var(--k,1));pointer-events:none}
.dim{fill:var(--mut);font-size:calc(20px * var(--k,1))}
.dim-line{stroke:var(--mut);stroke-width:calc(1.5px * var(--k,1))}
.scr{cursor:pointer}
.scr-body{fill:var(--screen);stroke:#0b1b1f;stroke-width:calc(2px * var(--k,1))}
.scr.new .scr-body{fill:var(--screen-new)}
.scr.selected .scr-body{stroke:#fff;stroke-width:calc(5px * var(--k,1))}
.scr-cone{fill:var(--screen);opacity:.10;pointer-events:none}
.scr.new .scr-cone{fill:var(--screen-new)}
.scr-label{fill:var(--ink);font-size:calc(20px * var(--k,1));font-weight:700;pointer-events:none;paint-order:stroke;stroke:#0c181d;stroke-width:calc(5px * var(--k,1))}
.scr.has-error .scr-body{fill:var(--err)}
.scr.moving .scr-body{stroke:#fff;stroke-width:calc(3px * var(--k,1));stroke-dasharray:calc(8px * var(--k,1)) calc(5px * var(--k,1))}
.scr-ghost{fill:none;stroke:var(--mut);stroke-width:calc(2px * var(--k,1));stroke-dasharray:calc(8px * var(--k,1)) calc(6px * var(--k,1));pointer-events:none}
.elev-wall{fill:#1d3036;stroke:var(--wall);stroke-width:calc(3px * var(--k,1))}
.elev-floor{stroke:var(--wall);stroke-width:calc(4px * var(--k,1))}
.elev-door{fill:#2c2414;stroke:var(--door);stroke-width:calc(2px * var(--k,1))}
.elev-glass{fill:rgba(95,183,232,.16);stroke:var(--glass);stroke-width:calc(2px * var(--k,1))}
.elev-furn{fill:rgba(58,76,80,.8);stroke:#56696d;stroke-width:calc(2px * var(--k,1))}
.guide{stroke:var(--warn);stroke-width:calc(1.5px * var(--k,1));stroke-dasharray:calc(6px * var(--k,1)) calc(6px * var(--k,1));opacity:.7}
.guide-label{fill:var(--warn);font-size:calc(16px * var(--k,1));opacity:.85}
.scr:focus{outline:none}
.scr:focus-visible .scr-body{stroke:#fff;stroke-width:calc(5px * var(--k,1))}
#planta .wall-label{font-size:calc(30px * var(--k,1))}#planta .furniture-label{font-size:calc(26px * var(--k,1))}#planta .scr-label{font-size:calc(28px * var(--k,1))}
#alzado .scr-label{font-size:calc(26px * var(--k,1))}#alzado .dim{font-size:calc(24px * var(--k,1))}#alzado .furniture-label{font-size:calc(24px * var(--k,1))}#alzado .guide-label{font-size:calc(20px * var(--k,1))}
.scr-label.group{fill:var(--accent)}
/* Dispositivos del inventario (players, webcam): marcas pequeñas, con su CI ITIL en el título. */
.device-mark{fill:#0c181d;stroke:var(--brand);stroke-width:calc(3px * var(--k,1))}
.device.iot .device-mark{stroke:var(--warn)}
.device-label{fill:var(--brand);font-size:calc(24px * var(--k,1));font-weight:700;paint-order:stroke;stroke:#0c181d;stroke-width:calc(4px * var(--k,1))}
.device.iot .device-label{fill:var(--warn)}
.devices{margin-top:14px}
.devices h3{margin:0 0 6px;font-size:13px;color:var(--mut);font-weight:600;letter-spacing:.02em}
/* Calco subido: sobre el suelo, debajo de lo demás, sin capturar el puntero */
.calco-img{pointer-events:none}
.source button,.no-plan button{margin-left:6px;border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:7px;padding:4px 10px;font-size:12px;font-weight:600}
.source button:hover,.no-plan button:hover{border-color:var(--accent)}
.source .source-upload strong{color:var(--brand)}
.no-plan{margin:10px 0 16px;padding:14px 16px;border:1px dashed var(--line);border-radius:12px;background:var(--card2);color:var(--ink);font-size:14px;line-height:1.5}
.no-plan button{margin:8px 0 0;display:inline-block;background:var(--brand);color:#0b1408;border-color:var(--brand);padding:7px 14px;font-size:13px}
/* ▤ Subir plano · vive en el panel derecho del shell (≈180 px útiles): todo en una columna.
   Dentro del panel mandan los colores del shell (--brand, --accent, --line…). */
.upload{display:grid;gap:9px;min-width:0;color:var(--ink);font-size:12.5px;line-height:1.4;outline:none;border-radius:8px}
.upload:focus-visible{outline:2px solid var(--brand);outline-offset:4px}
.upload-title{margin:0;font:700 12px/1.4 ui-monospace,Menlo,monospace;letter-spacing:.1em;text-transform:uppercase;color:var(--brand)}
.upload-hint{margin:0;color:var(--mut);font-size:11.5px;line-height:1.4;overflow-wrap:anywhere}
.upload-drop{position:relative;display:grid;gap:4px;justify-items:center;text-align:center;padding:16px 8px;border:1.5px dashed var(--line);border-radius:10px;background:var(--card2);cursor:pointer;transition:border-color .15s,background .15s}
.upload-drop:hover,.upload-drop:focus-within,.upload-drop.over{border-color:var(--brand);background:rgba(120,243,255,.07)}
.upload-drop:focus-within{outline:2px solid var(--brand);outline-offset:2px}
.upload-drop input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;font-size:0}
.upload-drop-main{font-weight:650;font-size:12.5px;color:var(--ink);overflow-wrap:anywhere}
.upload-drop-types{font:10px/1.3 ui-monospace,Menlo,monospace;letter-spacing:.03em;color:var(--mut)}
.upload-preview{display:grid;gap:6px;padding:8px;border:1px solid var(--line);border-radius:8px;background:var(--card2);overflow-wrap:anywhere}
.upload-preview img{display:block;width:100%;max-height:150px;object-fit:contain;border-radius:4px;background:#fff}
.upload-preview strong{font-size:13px;color:var(--ink)}
.upload-meta{color:var(--mut);font-size:11.5px}
.upload-meta code{color:var(--brand);font-size:11px}
.upload-issues{list-style:none;margin:0;padding:0;display:grid;gap:4px;max-height:200px;overflow:auto;font-size:11.5px;line-height:1.35}
.upload-issues li{padding:5px 7px;border:1px solid var(--line);border-radius:6px;background:var(--card2);overflow-wrap:anywhere}
.upload-issues li.error{border-color:rgba(255,109,109,.55)}
.upload-issues li.error::before{content:"✖ ";color:var(--err)}
.upload-issues li.aviso::before{content:"▲ ";color:var(--accent)}
.upload-issues li.head,.upload-issues li.more{border:0;background:none;padding:2px 0;color:var(--mut)}
.upload-room{margin:0;padding:8px;min-width:0;display:grid;gap:8px;border:1px solid var(--line);border-radius:8px}
.upload-room legend{padding:0 4px;font:700 10.5px/1.3 ui-monospace,Menlo,monospace;letter-spacing:.06em;text-transform:uppercase;color:var(--mut)}
.upload-room label,.trace label{display:grid;gap:3px;min-width:0;font-size:11px;color:var(--mut)}
.upload-room input,.trace input[type=number]{width:100%;min-width:0;border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:6px;padding:6px 7px;font-size:13px}
.upload-dims{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}
.upload-dims input{padding:6px 3px;text-align:center;-moz-appearance:textfield;appearance:textfield}
.upload-dims input::-webkit-inner-spin-button,.upload-dims input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.upload-unit{margin:0;font-size:10.5px;line-height:1.35;color:var(--mut)}
#advanced-tools .upload .upload-apply{border-color:rgba(255,216,102,.6);color:var(--accent)}
#advanced-tools .upload .upload-apply:hover{background:var(--accent);color:#1a0e00}
#advanced-tools .upload .upload-apply:disabled{opacity:.45;cursor:progress}
.upload-link{justify-self:start;border:0;background:none;padding:0;color:var(--mut);font-size:11.5px;text-decoration:underline;cursor:pointer}
.upload-link:hover{color:var(--ink)}
.upload-status{margin:0;font-size:11.5px;line-height:1.4;color:var(--good,#88ffaa);overflow-wrap:anywhere}
.upload-status:empty{display:none}
.upload-status.err{color:var(--err)}
.trace{display:grid;gap:8px;padding-top:10px;border-top:1px solid var(--line)}
.trace input[type=range]{width:100%;margin:2px 0 0;accent-color:var(--brand)}
.trace output{color:var(--ink)}
.upload-note{margin:0;padding:7px 8px;border:1px dashed var(--line);border-radius:8px;font-size:10.5px;line-height:1.4;color:var(--mut)}
/* ▤ Creación de Xpacios: debajo de «Subir plano», con el mismo aspecto. */
.create{margin-top:6px;padding-top:12px;border-top:1px solid var(--line)}
.create label{display:grid;gap:3px;min-width:0;font-size:11px;color:var(--mut)}
.create input,.create select{width:100%;min-width:0;border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:6px;padding:6px 7px;font-size:13px}
.create select{padding:6px 4px}
#advanced-tools .create .create-btn{min-height:38px}
#advanced-tools .create .create-total{border-color:rgba(255,216,102,.6);color:var(--accent)}
#advanced-tools .create .create-total:hover{background:var(--accent);color:#1a0e00}
.create-tabs{display:flex;flex-wrap:wrap;gap:4px}
.create-tabs button{flex:1 1 auto;border:1px solid var(--line);background:transparent;color:var(--mut);border-radius:999px;padding:4px 9px;font:600 11px/1.3 ui-monospace,Menlo,monospace;letter-spacing:.02em;cursor:pointer}
.create-tabs button[aria-selected="true"]{border-color:var(--brand);color:#001620;background:var(--brand)}
.create-pane{display:grid;gap:9px;min-width:0}
/* «Con foto o vídeo» (DCL-ddf3203078fe9471f3796130): miniaturas, progreso y resultado de la estimación. */
.create textarea{width:100%;min-width:0;border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:6px;padding:6px 7px;font-family:inherit;font-size:13px;line-height:1.35;resize:vertical}
.photo-thumbs{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(54px,1fr));gap:5px}
.photo-thumbs li{position:relative;min-width:0;aspect-ratio:4/3;border:1px solid var(--line);border-radius:6px;overflow:hidden;background:var(--card2)}
.photo-thumbs img{display:block;width:100%;height:100%;object-fit:cover}
.photo-n{position:absolute;left:3px;bottom:3px;padding:0 4px;border-radius:4px;background:rgba(0,0,0,.65);color:#fff;font:600 10px/1.5 ui-monospace,Menlo,monospace}
.photo-x{position:absolute;top:2px;right:2px;width:18px;height:18px;display:grid;place-items:center;padding:0;border:0;border-radius:50%;background:rgba(0,0,0,.65);color:#fff;font-size:12px;line-height:1;cursor:pointer}
.photo-x:hover,.photo-x:focus-visible{background:var(--err)}
.photo-x:disabled{opacity:.4;cursor:default}
.photo-thumbs li.photo-count{grid-column:1/-1;aspect-ratio:auto;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px;border:0;background:none;color:var(--mut);font-size:11.5px}
.photo-progress{display:grid;gap:5px;font-size:11.5px;color:var(--mut)}
.photo-progress progress{width:100%;height:6px;accent-color:var(--brand)}
.photo-conf{width:100%;height:8px}
.photo-refs-title{margin-top:2px}
.photo-refs{margin:0;padding:0 0 0 16px;display:grid;gap:2px;color:var(--mut);font-size:11.5px}
.photo-refs span{color:var(--ink)}
.photo-ref-n{font:10px ui-monospace,Menlo,monospace;color:var(--brand)!important}
#advanced-tools .create #photo-estimate:disabled{opacity:.45;cursor:not-allowed}
.no-plan-actions{display:inline-flex;gap:8px;flex-wrap:wrap}
@media(max-width:1000px){.views{grid-template-columns:1fr}.lower{grid-template-columns:1fr}}
@media(max-width:600px){main{padding:22px 16px 48px}.modes{width:100%}.modes button{flex:1;padding:9px 8px}.proposal-title{flex-basis:100%}.toolbar-spacer{display:none}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
