/* paramforge.css — tema professionale scuro stile CAD. M0. */
:root {
  --bg: #16171b;
  --bg2: #1e1f24;
  --panel: #212329;
  --line: #34373f;
  --ink: #e6e9ee;
  --mut: #9aa1ad;
  --accent: #2b8c5e;
  --accent-ink: #eafff3;
  --warn: #f4c542;
}
* { box-sizing: border-box; }
html, body { height: 100%; margin: 0; }
body {
  display: flex;
  flex-direction: column;
  height: 100vh;
  background: var(--bg);
  color: var(--ink);
  font: 13px/1.4 system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
  overflow: hidden;
}

/* top bar */
.pf-top {
  display: flex; align-items: center; justify-content: space-between;
  height: 44px; padding: 0 14px;
  background: var(--bg2); border-bottom: 1px solid var(--line);
}
.brand { display: flex; align-items: center; gap: 8px; font-weight: 700; font-size: 15px; }
.brand .logo {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; border-radius: 6px; background: var(--accent);
  color: #fff; font-weight: 800; font-size: 13px;
}
.brand .ms { font-weight: 500; font-size: 11px; color: var(--mut); margin-left: 6px; }
.proj-chip { font-size: 11px; color: var(--accent-ink); background: #23302a; border: 1px solid var(--accent); border-radius: 20px; padding: 3px 10px; margin-left: 8px; cursor: pointer; white-space: nowrap; max-width: 260px; overflow: hidden; text-overflow: ellipsis; }
.proj-chip:hover { filter: brightness(1.15); }
.top-actions button {
  font: inherit; font-size: 12px; font-weight: 600; cursor: pointer;
  color: var(--ink); background: var(--panel);
  border: 1px solid var(--line); border-radius: 7px; padding: 6px 12px;
}
.top-actions button:hover { border-color: var(--accent); }
.top-actions { display: flex; align-items: center; gap: 8px; }
.top-link { font: inherit; font-size: 12px; font-weight: 700; text-decoration: none; color: var(--accent-ink); background: #23302a; border: 1px solid var(--accent); border-radius: 7px; padding: 6px 12px; }
.top-link:hover { background: #2b8c5e; }

/* main: pannelli + canvas */
.pf-main { flex: 1; display: flex; min-height: 0; }
.pf-left, .pf-right {
  background: var(--bg2); border-right: 1px solid var(--line);
  padding: 12px; display: flex; flex-direction: column; gap: 6px;
}
.pf-left { width: 150px; }
.pf-right { width: 210px; border-right: 0; border-left: 1px solid var(--line); position: relative; }
.pf-right-grip { position: absolute; left: -3px; top: 0; width: 7px; height: 100%; cursor: ew-resize; z-index: 6; }
.pf-right-grip:hover { background: var(--accent); opacity: .35; }
.ph-title { font-weight: 700; font-size: 12px; text-transform: uppercase; letter-spacing: .05em; color: var(--mut); }
.ph-note { font-size: 12px; color: var(--mut); opacity: .8; }
.ph-note b { color: var(--accent); }

.canvas-wrap { position: relative; flex: 1; min-width: 0; background: var(--bg); }
#cad { position: absolute; inset: 0; width: 100%; height: 100%; display: block; cursor: crosshair; }

/* bottom: command line + status */
.pf-bottom { background: var(--bg2); border-top: 1px solid var(--line); }
.cmd-row { display: flex; align-items: center; gap: 8px; padding: 6px 12px; border-bottom: 1px solid var(--line); }
.cmd-prompt { color: var(--accent); font-weight: 700; font-family: ui-monospace, monospace; }
#cmd {
  flex: 0 0 360px; font: inherit; font-family: ui-monospace, monospace;
  color: var(--ink); background: var(--bg); border: 1px solid var(--line);
  border-radius: 6px; padding: 5px 9px;
}
#cmd:focus { outline: none; border-color: var(--accent); }
.cmd-hint { color: var(--mut); font-size: 12px; }
/* rifiuto di un comando: stesso posto, colore del tratto candidato (arancio) */
.cmd-hint.hint-err { color: #ff8c1a; font-weight: 600; }

.status-row { display: flex; align-items: center; gap: 8px; padding: 5px 12px; font-size: 12px; }
.pill {
  font: inherit; font-size: 11px; font-weight: 700; letter-spacing: .04em; cursor: pointer;
  color: var(--mut); background: transparent; border: 1px solid var(--line);
  border-radius: 6px; padding: 3px 9px;
}
.pill.on { color: var(--accent-ink); background: var(--accent); border-color: var(--accent); }
.pill.dim { opacity: .4; }
.pill-free.on { color: #1a1206; background: var(--warn); border-color: var(--warn); }
.pill-track.on { color: #04140c; background: #49d38a; border-color: #49d38a; }
.pill-constr.on { color: #fff; background: #8b95e6; border-color: #8b95e6; }
.pill-dimc.on { color: #fff; background: #8b95e6; border-color: #8b95e6; }

/* popup contestuale dei vincoli (fluttua sul canvas, accanto alla selezione) */
.constraint-popup { position: absolute; z-index: 20; display: flex; flex-wrap: wrap; gap: 3px; max-width: 236px; padding: 4px; background: rgba(30,31,36,0.97); border: 1px solid var(--line); border-radius: 8px; box-shadow: 0 6px 20px rgba(0,0,0,0.45); }
.constraint-popup[hidden] { display: none; }
.cpop-btn { display: flex; align-items: center; gap: 4px; font-size: 11px; color: var(--ink); background: var(--panel); border: 1px solid var(--line); border-radius: 5px; padding: 3px 6px; cursor: pointer; white-space: nowrap; }
.cpop-btn:hover { border-color: #8b95e6; color: #b9c0f2; }
.cpop-btn .cons-glyph { font-size: 12px; color: #8b95e6; }
.cpop-key { display: inline-flex; align-items: center; justify-content: center; min-width: 13px; height: 13px; padding: 0 2px; font-size: 9px; font-family: ui-monospace, monospace; color: var(--accent-ink); background: #8b95e6; border-radius: 3px; }

/* sezione Vincoli nell'ispettore */
.insp-cons { margin-top: 4px; border-top: 1px dashed var(--line); padding-top: 4px; }
.insp-subtitle { font-size: 10.5px; letter-spacing: .04em; text-transform: uppercase; color: var(--mut); margin-bottom: 3px; }
.insp-crow { display: flex; align-items: center; gap: 6px; font-size: 12px; padding: 2px 2px; }
.insp-crow.off { opacity: .5; }
.insp-cname { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.insp-ceye, .insp-cdel { font: inherit; font-size: 12px; line-height: 1; background: transparent; border: 0; cursor: pointer; padding: 0 2px; }
.insp-ceye { color: #8b95e6; }
.insp-cdel { color: var(--mut); }
.insp-cdel:hover { color: #ff6b6b; }
.insp-cval { width: 58px; font: inherit; font-size: 11px; text-align: right; color: #8b95e6; background: var(--panel); border: 1px solid var(--line); border-radius: 4px; padding: 1px 4px; }
.insp-cval:focus { outline: none; border-color: #8b95e6; }
.sep { width: 1px; height: 16px; background: var(--line); margin: 0 4px; }
.readout { color: var(--mut); font-family: ui-monospace, monospace; }
.grow { flex: 1; }
.local { color: var(--accent); font-weight: 600; }

/* --- toolbar (M1) --- */
.pf-left { width: 184px; gap: 10px; overflow-y: auto; }
.tool-group { display: flex; flex-direction: column; gap: 5px; }
.tg-title { font-size: 10px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--mut); }
.tg-btns { display: flex; flex-direction: column; gap: 3px; }
.tool-btn {
  display: flex; align-items: center; gap: 8px; width: 100%;
  font: inherit; font-size: 12.5px; cursor: pointer; text-align: left;
  color: var(--ink); background: var(--panel); border: 1px solid var(--line);
  border-radius: 7px; padding: 5px 8px;
}
.tool-btn:hover { border-color: var(--accent); background: #262a31; }
.tool-btn.active { background: var(--accent); color: #fff; border-color: var(--accent); }
.tool-btn.active .tb-key { color: #eafff3; border-color: rgba(255,255,255,.4); }
.tb-glyph { width: 18px; text-align: center; font-size: 14px; }
.tb-label { flex: 1; }
.tb-key {
  font-family: ui-monospace, monospace; font-size: 10px; color: var(--mut);
  border: 1px solid var(--line); border-radius: 4px; padding: 1px 5px;
}
.tg-hint { margin-top: auto; font-size: 11px; color: var(--mut); opacity: .8; line-height: 1.4; }

/* --- popup tooltip comando --- */
.pf-tip {
  position: fixed; z-index: 50; max-width: 250px;
  background: #0f1013; color: var(--ink);
  border: 1px solid var(--accent); border-radius: 8px;
  padding: 9px 11px; box-shadow: 0 8px 24px rgba(0,0,0,.5);
  pointer-events: none; font-size: 12px;
}
.tip-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 4px; }
.tip-name { font-weight: 700; }
.tip-key { font-family: ui-monospace, monospace; font-size: 11px; color: #001406; background: var(--accent); border-radius: 4px; padding: 1px 6px; }
.tip-desc { color: var(--mut); line-height: 1.45; }
.tip-alias { margin-top: 5px; color: var(--mut); font-size: 11px; }
.tip-alias b { color: var(--accent); font-family: ui-monospace, monospace; }

/* --- menù a spunta dei vincoli (pannello destro) --- */
.pf-right { overflow-y: auto; }
.ph-bottom { margin-top: auto; }
.cons-panel { display: flex; flex-direction: column; gap: 8px; }
.cons-sel { font-size: 11px; color: var(--mut); padding: 4px 0; border-bottom: 1px solid var(--line); }
.cons-apply { display: flex; flex-direction: column; gap: 2px; }
.cons-opt { display: flex; align-items: center; gap: 8px; padding: 5px 6px; border-radius: 6px; cursor: pointer; font-size: 12.5px; }
.cons-opt:hover { background: #262a31; }
.cons-opt input { accent-color: var(--accent); width: 15px; height: 15px; }
.cons-glyph { width: 16px; text-align: center; color: var(--accent); }
.cons-title { font-size: 10px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: var(--mut); margin-top: 8px; }
.cons-list { display: flex; flex-direction: column; gap: 3px; }
.cons-empty { font-size: 11px; color: var(--mut); opacity: .8; padding: 4px 0; }
.cons-note { font-size: 11px; color: var(--warn); line-height: 1.4; padding: 4px 0; }

/* --- pannello Layer (sidebar destra) --- */
.layer-list { display: flex; flex-direction: column; gap: 3px; }
.layer-row { display: flex; align-items: center; gap: 7px; padding: 4px 6px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel); }
.layer-row.current { border-color: var(--accent); background: #23302a; }
.layer-dot { width: 12px; height: 12px; border-radius: 3px; flex: 0 0 auto; border: 1px solid rgba(255,255,255,.2); }
.layer-name { flex: 1; font-size: 12.5px; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.layer-row.current .layer-name { font-weight: 700; color: var(--accent-ink); }
.layer-count { font-family: ui-monospace, monospace; font-size: 10px; color: var(--mut); }
.layer-eye { font: inherit; font-size: 13px; line-height: 1; color: var(--accent); background: transparent; border: 0; cursor: pointer; padding: 0 2px; }
.layer-eye:hover { color: var(--accent-ink); }
.layer-add { font: inherit; font-size: 12px; font-weight: 600; cursor: pointer; color: var(--ink); background: var(--panel); border: 1px dashed var(--line); border-radius: 6px; padding: 5px 8px; margin-top: 2px; }
.layer-add:hover { border-color: var(--accent); }
.ph-sep { height: 1px; background: var(--line); margin: 10px 0 4px; }
.ph-tag { font-weight: 600; font-size: 10.5px; text-transform: none; letter-spacing: 0; color: var(--accent); }

/* --- barra layout riquadri --- */
.layout-bar { display: flex; gap: 4px; margin: 4px 0 2px; }
.layout-btn { flex: 1; font: inherit; font-size: 12px; letter-spacing: 1px; cursor: pointer; color: var(--mut); background: var(--panel); border: 1px solid var(--line); border-radius: 6px; padding: 3px 0; }
.layout-btn:hover { border-color: var(--accent); color: var(--ink); }
.layout-btn.on { border-color: var(--accent); color: var(--accent-ink); background: #23302a; font-weight: 700; }

/* --- albero delle viste (rami orientazione → viste → layer) --- */
.vtree-group { margin-bottom: 6px; }
.vtree-ghead { font-size: 10px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: var(--mut); padding: 2px 2px; border-bottom: 1px solid var(--line); margin-bottom: 3px; }
.vtree-view { display: flex; align-items: center; gap: 5px; padding: 3px 5px; border: 1px solid transparent; border-radius: 6px; }
.vtree-view.current { border-color: var(--accent); background: #23302a; }
.vtree-view .view-name { flex: 1; font-size: 12.5px; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vtree-view.current .view-name { font-weight: 700; color: var(--accent-ink); }
.vtree-leaves { margin: 2px 0 4px 14px; border-left: 1px dashed var(--line); padding-left: 8px; display: flex; flex-direction: column; gap: 2px; }
.vtree-ghead { cursor: pointer; user-select: none; }
.vtree-view.drop-hi { outline: 1px dashed var(--accent); background: #1c2a22; }
.vtree-leaf { display: flex; align-items: center; gap: 6px; padding: 2px 4px; border-radius: 5px; cursor: pointer; font-size: 12px; }
.vtree-leaf:hover { background: #1c2026; }
.vtree-lname { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vtree-lop { font-family: ui-monospace, monospace; font-size: 9.5px; color: var(--mut); background: transparent; border: 1px solid var(--line); border-radius: 4px; cursor: pointer; padding: 0 3px; }
.vtree-lop:hover { border-color: var(--accent); color: var(--accent); }
.vtree-lop.dim { opacity: .35; cursor: default; }
.vtree-eye, .vtree-pen { font: inherit; font-size: 12px; line-height: 1; color: var(--accent); background: transparent; border: 0; cursor: pointer; padding: 0 1px; }
.vtree-eye:hover, .vtree-pen:hover { color: var(--accent-ink); }
.vtree-pen.off { color: var(--mut); }
.vtree-leaf .layer-dot { cursor: pointer; }
.pf-lrow .layer-dot { cursor: pointer; width: 12px; height: 12px; border-radius: 3px; }
.pf-lrow .pf-pen { font: inherit; font-size: 12px; line-height: 1; background: transparent; border: 0; cursor: pointer; color: var(--accent); padding: 0 1px; }
.pf-lrow .pf-pen.off { color: var(--mut); }
.vtree-empty { font-size: 11px; color: var(--mut); opacity: .7; padding: 2px 4px; }

/* --- pannello Viste (multi-vista stile Revit) --- */
.view-list { display: flex; flex-direction: column; gap: 4px; margin: 4px 0; }
.view-row { display: flex; align-items: center; gap: 6px; padding: 4px 6px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel); }
.view-row.current { border-color: var(--accent); background: #23302a; }
.view-name { flex: 1; font-size: 12.5px; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.view-row.current .view-name { font-weight: 700; color: var(--accent-ink); }
.view-del { font: inherit; font-size: 14px; line-height: 1; color: var(--mut); background: transparent; border: 0; cursor: pointer; padding: 0 3px; }
.view-del:hover { color: var(--accent); }
.layer-row { flex-wrap: wrap; }
.layer-w { width: 46px; font: inherit; font-size: 10.5px; color: var(--ink); background: var(--bg); border: 1px solid var(--line); border-radius: 4px; padding: 1px 3px; }
.layer-lt { font: inherit; font-size: 10.5px; color: var(--ink); background: var(--bg); border: 1px solid var(--line); border-radius: 4px; padding: 1px 2px; }
.layer-w:focus, .layer-lt:focus, .layer-uni:focus { outline: none; border-color: var(--accent); }
.layer-uni { font: inherit; font-size: 10.5px; color: var(--ink); background: var(--bg); border: 1px solid var(--line); border-radius: 4px; padding: 1px 2px; max-width: 90px; }
.layer-stato { font-size: 9.5px; padding: 1px 5px; border-radius: 8px; border: 1px solid var(--line); white-space: nowrap; }
.layer-stato.stato-norma { color: var(--accent-ink); border-color: var(--accent); }
.layer-stato.stato-custom { color: var(--mut); }
.layer-ord { display: inline-flex; flex-direction: column; gap: 1px; margin-left: auto; }
.layer-ordb { font: inherit; font-size: 8px; line-height: 1; padding: 1px 3px; color: var(--ink); background: var(--bg); border: 1px solid var(--line); border-radius: 3px; cursor: pointer; }
.layer-ordb:hover:not(:disabled) { border-color: var(--accent); color: var(--accent-ink); }
.layer-ordb:disabled { opacity: 0.3; cursor: default; }
/* --- viste v2: meta, config, wizard, ordinamento --- */
.view-meta { font-size: 9.5px; color: var(--mut); white-space: nowrap; }
.view-cfg { font: inherit; font-size: 12px; line-height: 1; color: var(--mut); background: transparent; border: 0; cursor: pointer; padding: 0 2px; }
.view-cfg:hover { color: var(--accent); }
.view-tools { display: flex; gap: 6px; }
.view-tools .layer-add { flex: 1; }
.view-sort { display: flex; align-items: center; gap: 6px; margin-top: 4px; font-size: 11px; color: var(--mut); }
.view-sortbtn { font: inherit; font-size: 12px; cursor: pointer; color: var(--ink); background: var(--panel); border: 1px solid var(--line); border-radius: 5px; padding: 1px 8px; }
.view-sortbtn:hover { border-color: var(--accent); color: var(--accent); }

/* --- modale --- */
.pf-modal-back { position: fixed; inset: 0; z-index: 200; background: rgba(0,0,0,.55); display: flex; align-items: center; justify-content: center; }
.pf-modal { width: 380px; max-width: 92vw; max-height: 86vh; overflow: auto; background: var(--bg2); border: 1px solid var(--accent); border-radius: 10px; box-shadow: 0 12px 40px rgba(0,0,0,.55); padding: 14px; }
.pf-modal-title { font-size: 14px; font-weight: 800; color: var(--ink); margin-bottom: 10px; }
.pf-modal-body { display: flex; flex-direction: column; gap: 8px; }
.pf-field { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: 12.5px; color: var(--mut); }
.pf-field > span { flex: 0 0 46%; }
.pf-field input[type=text], .pf-field input[type=number], .pf-field select { flex: 1; font: inherit; font-size: 12.5px; color: var(--ink); background: var(--bg); border: 1px solid var(--line); border-radius: 6px; padding: 4px 7px; }
.pf-field input[type=checkbox] { accent-color: var(--accent); width: 16px; height: 16px; }
.pf-field-title { font-size: 11px; font-weight: 700; color: var(--mut); margin-top: 6px; }
.pf-layers { display: flex; flex-direction: column; gap: 3px; max-height: 180px; overflow: auto; border: 1px solid var(--line); border-radius: 6px; padding: 5px; }
.pf-lrow { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink); }
.pf-lrow.disabled { opacity: .45; }
.pf-lrow input[type=checkbox] { accent-color: var(--accent); }
.pf-lname { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pf-lop { font-size: 10.5px; color: var(--ink); background: var(--bg); border: 1px solid var(--line); border-radius: 4px; }
.pf-modal-foot { display: flex; justify-content: flex-end; gap: 8px; margin-top: 12px; }
.pf-mbtn { font: inherit; font-size: 12.5px; font-weight: 600; cursor: pointer; color: var(--ink); background: var(--panel); border: 1px solid var(--line); border-radius: 6px; padding: 6px 14px; }
.pf-mbtn:hover { border-color: var(--accent); }
.pf-mbtn.primary { background: #23302a; border-color: var(--accent); color: var(--accent-ink); }

/* --- selettore colore (palette + personalizzato) --- */
.pf-swatches { display: flex; flex-wrap: wrap; gap: 6px; padding: 2px 0; }
.pf-swatch { width: 26px; height: 26px; border-radius: 6px; border: 2px solid var(--line); cursor: pointer; padding: 0; }
.pf-swatch:hover { border-color: var(--accent); }
.pf-swatch.on { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent); }
.pf-swatch-add { position: relative; display: flex; align-items: center; justify-content: center; background: var(--panel); color: var(--mut); font-size: 15px; font-weight: 700; overflow: hidden; }
.pf-swatch-add input[type=color] { position: absolute; inset: 0; opacity: 0; cursor: pointer; width: 100%; height: 100%; }

/* --- cubo delle viste (wizard) --- */
.cube-stage { height: 200px; margin: 8px auto; perspective: 620px; display: flex; align-items: center; justify-content: center; touch-action: none; cursor: grab; }
.cube-stage:active { cursor: grabbing; }
.cube { position: relative; width: 140px; height: 140px; transform-style: preserve-3d; transition: transform .04s linear; }
.cube-face { position: absolute; left: 0; top: 0; width: 140px; height: 140px; display: flex; align-items: center; justify-content: center; font: 700 15px ui-monospace, monospace; letter-spacing: 1px; color: var(--ink); background: rgba(74,163,224,.14); border: 1.5px solid var(--line); box-sizing: border-box; cursor: pointer; user-select: none; }
.cube-face:hover { background: rgba(74,163,224,.28); border-color: var(--accent); }
.cube-face.on { background: #23302a; border-color: var(--accent); color: var(--accent-ink); box-shadow: inset 0 0 0 2px var(--accent); }
.cube-sel { display: flex; flex-direction: column; gap: 4px; }
.cube-selrow { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: 12.5px; color: var(--ink); }
.cube-count { width: 60px; font: inherit; font-size: 12px; color: var(--ink); background: var(--bg); border: 1px solid var(--line); border-radius: 6px; padding: 3px 6px; }

.layer-alpha { font-family: ui-monospace, monospace; font-size: 9.5px; color: var(--mut); background: transparent; border: 1px solid var(--line); border-radius: 4px; cursor: pointer; padding: 1px 3px; min-width: 30px; }
.layer-alpha:hover { border-color: var(--accent); color: var(--accent); }
.layer-alpha.dim { opacity: 0.35; cursor: default; }
.layer-pen { font: inherit; font-size: 12px; line-height: 1; color: var(--accent); background: transparent; border: 0; cursor: pointer; padding: 0 2px; }
.layer-pen:hover { color: var(--accent-ink); }
.layer-pen.off { color: var(--mut); opacity: 0.8; }

/* --- pannello Vincoli tra oggetti --- */
.constraint-tools { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; margin: 4px 0; }
.cons-btn { display: flex; align-items: center; gap: 5px; font-size: 11px; color: var(--ink); background: var(--panel); border: 1px solid var(--line); border-radius: 5px; padding: 4px 6px; cursor: pointer; text-align: left; }
.cons-btn:hover { border-color: var(--accent); color: var(--accent); }
.cons-glyph { font-size: 13px; width: 14px; text-align: center; color: var(--accent); }
.constraint-list { display: flex; flex-direction: column; gap: 3px; margin-top: 4px; }
.cons-row { display: flex; align-items: center; gap: 6px; font-size: 12px; padding: 2px 4px; border: 1px solid var(--line); border-radius: 5px; }
.cons-row.off { opacity: .5; }
.cons-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cons-cnt { font-family: ui-monospace, monospace; font-size: 9.5px; color: var(--mut); }
.cons-eye, .cons-del { font: inherit; font-size: 12px; line-height: 1; background: transparent; border: 0; cursor: pointer; color: var(--accent); padding: 0 2px; }
.cons-del { color: var(--mut); }
.cons-del:hover { color: #ff6b6b; }
/* campo quota guida inline (numero mm o nome-parametro) */
.cons-val { width: 58px; font: inherit; font-size: 11px; text-align: right; color: var(--accent); background: var(--panel); border: 1px solid var(--line); border-radius: 4px; padding: 1px 4px; }
.cons-val:focus { outline: none; border-color: var(--accent); }

/* --- pannello Parametri (guida) --- */
.param-list { display: flex; flex-direction: column; gap: 3px; margin-top: 4px; }
.param-row { display: flex; align-items: center; gap: 6px; font-size: 12px; padding: 2px 4px; border: 1px solid var(--line); border-radius: 5px; }
.param-name { flex: 1; font-family: ui-monospace, monospace; color: var(--accent); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.param-val { width: 66px; font: inherit; font-size: 11px; text-align: right; color: var(--ink); background: var(--panel); border: 1px solid var(--line); border-radius: 4px; padding: 1px 4px; }
.param-val:focus { outline: none; border-color: var(--accent); }
.param-del { font: inherit; font-size: 12px; line-height: 1; color: var(--mut); background: transparent; border: 0; cursor: pointer; padding: 0 2px; }
.param-del:hover { color: #ff6b6b; }

/* --- pannello Proprietà entità (ispettore) --- */
.insp-panel { display: flex; flex-direction: column; gap: 4px; margin: 4px 0; }
.insp-empty { font-size: 11.5px; color: var(--mut); opacity: .8; line-height: 1.4; padding: 2px 0; }
.insp-fields { display: flex; flex-direction: column; gap: 4px; margin-top: 2px; }
.insp-row { display: flex; align-items: center; gap: 6px; }
.insp-label { flex: 0 0 74px; font-size: 11.5px; color: var(--mut); }
.insp-input { flex: 1; min-width: 0; font: inherit; font-size: 12px; color: var(--ink); background: var(--bg); border: 1px solid var(--line); border-radius: 5px; padding: 3px 6px; }
.insp-input:focus { outline: none; border-color: var(--accent); }
.insp-value { flex: 1; font-family: ui-monospace, monospace; font-size: 11.5px; color: var(--ink); text-align: right; }
.insp-ro .insp-label { color: var(--mut); }
.insp-check { gap: 8px; }
.insp-check input { accent-color: var(--accent); width: 15px; height: 15px; }
.insp-check span { font-size: 12px; color: var(--ink); }
.insp-btn { font: inherit; font-size: 11px; font-weight: 600; cursor: pointer; color: var(--ink); background: var(--panel); border: 1px solid var(--line); border-radius: 5px; padding: 2px 8px; }
.insp-btn:hover { border-color: var(--accent); color: var(--accent); }

/* --- menù SNAP (vincoli-snap nidificati) --- */
.snap-menu { position: fixed; z-index: 60; min-width: 180px; background: #0f1013; border: 1px solid var(--accent); border-radius: 8px; padding: 8px; box-shadow: 0 8px 24px rgba(0,0,0,.5); }
.snap-title { font-size: 10px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: var(--mut); margin-bottom: 6px; }
.snap-row { display: flex; align-items: center; gap: 8px; padding: 5px 4px; font-size: 13px; cursor: pointer; border-radius: 5px; }
.snap-row:hover { background: #1c2026; }
.snap-row input { accent-color: var(--accent); width: 15px; height: 15px; }
.snap-sep { height: 1px; background: var(--line); margin: 5px 0; }
.cons-item { display: flex; align-items: center; gap: 6px; padding: 4px 6px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel); }
.cons-item.off { opacity: .5; }
.cons-item input[type=checkbox] { accent-color: var(--accent); }
.cons-lbl { flex: 1; font-size: 12px; }
.cons-meta { font-size: 10px; color: var(--mut); }
.cons-val { width: 56px; font: inherit; font-size: 11px; color: var(--ink); background: var(--bg); border: 1px solid var(--line); border-radius: 4px; padding: 2px 5px; }
.cons-del { font: inherit; font-size: 12px; line-height: 1; color: var(--mut); background: transparent; border: 0; cursor: pointer; padding: 2px 4px; }
.cons-del:hover { color: #e0564f; }

/* --- Consolle Python (pannello ancorato in basso, mostra/nasconde) --- */
.pf-console { position: fixed; left: 0; right: 0; bottom: 0; z-index: 500; height: 300px; display: flex; flex-direction: column;
  background: var(--panel, #1b1d22); border-top: 1px solid var(--line, #333); box-shadow: 0 -8px 24px rgba(0,0,0,.35); }
.pf-console[hidden] { display: none; }
.pfc-head { display: flex; align-items: center; gap: 10px; padding: 6px 10px; border-bottom: 1px solid var(--line, #333); }
.pfc-title { font-weight: 600; font-size: 12.5px; color: var(--ink, #e7e7ea); }
.pfc-status { font-size: 11px; color: var(--mut, #9aa1ad); font-family: ui-monospace, monospace; }
.pfc-x { margin-left: auto; font-size: 13px; line-height: 1; color: var(--mut, #9aa1ad); background: transparent; border: 0; cursor: pointer; padding: 2px 6px; }
.pfc-x:hover { color: var(--ink, #e7e7ea); }
.pfc-out { flex: 1; overflow-y: auto; padding: 8px 10px; font-family: ui-monospace, "SFMono-Regular", monospace; font-size: 12px; line-height: 1.5; }
.pfc-line { white-space: pre-wrap; word-break: break-word; color: var(--ink, #dfe1e6); }
.pfc-line.cmd { color: var(--accent, #6ea8fe); }
.pfc-line.res { color: #8fd18f; }
.pfc-line.ok { color: #8fd18f; }
.pfc-line.err { color: #e0716b; }
.pfc-in { display: flex; gap: 8px; padding: 8px 10px; border-top: 1px solid var(--line, #333); align-items: stretch; }
.pfc-in textarea { flex: 1; resize: none; min-height: 40px; font-family: ui-monospace, monospace; font-size: 12.5px;
  color: var(--ink, #e7e7ea); background: var(--bg2, #14161a); border: 1px solid var(--line, #333); border-radius: 6px; padding: 7px 9px; }
.pfc-in textarea:focus { outline: none; border-color: var(--accent, #6ea8fe); }
.pfc-run { flex: 0 0 auto; font: inherit; font-size: 12px; font-weight: 600; cursor: pointer; color: #fff;
  background: var(--accent, #3b82f6); border: 0; border-radius: 6px; padding: 0 14px; }
.pfc-run:hover { filter: brightness(1.08); }

/* ===== Ribbon UI (Rapida / Completa) — 2026-07-06 ===== */
.logo-btn { display:inline-flex; align-items:center; justify-content:center; width:26px; height:26px; border-radius:7px; background:var(--accent); color:#fff; font-weight:800; font-size:14px; border:0; cursor:pointer; }
.logo-btn:hover { filter:brightness(1.12); }
.bname { font-weight:700; font-size:15px; margin-left:2px; }
.hist-strip { display:flex; gap:3px; margin-left:12px; }
.hist-strip button { width:26px; height:26px; font-size:14px; line-height:1; cursor:pointer; color:var(--ink); background:var(--panel); border:1px solid var(--line); border-radius:6px; }
.hist-strip button:hover { border-color:var(--accent); }

.mode-switch { display:flex; border:1px solid var(--line); border-radius:8px; overflow:hidden; }
.mode-switch button { font:inherit; font-size:12px; font-weight:700; cursor:pointer; color:var(--mut); background:var(--panel); border:0; padding:6px 12px; }
.mode-switch button.on { color:var(--accent-ink); background:var(--accent); }

.pf-ribbon { display:flex; align-items:stretch; padding:6px 12px; background:var(--bg2); border-bottom:1px solid var(--line); overflow-x:auto; }
.rb-group { display:flex; flex-direction:column; align-items:center; padding:0 8px; }
.rb-btns { display:flex; gap:4px; align-items:center; flex-wrap:wrap; justify-content:center; max-width:540px; }
.rb-div { width:1px; background:var(--line); margin:6px 4px; align-self:stretch; }
.rb-btn { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px; min-width:48px; height:48px; padding:4px 6px; font:inherit; cursor:pointer; color:var(--ink); background:var(--panel); border:1px solid var(--line); border-radius:8px; }
.rb-btn:hover { border-color:var(--accent); }
.rb-btn.active { border-color:var(--accent); background:#23302a; }
.rb-glyph { font-size:18px; line-height:1; }
.rb-name { font-size:10px; color:var(--mut); white-space:nowrap; }
.rb-title { margin-top:5px; font-size:10px; font-weight:800; letter-spacing:.06em; text-transform:uppercase; color:var(--mut); }
.rb-plus { width:30px; height:48px; font-size:15px; cursor:pointer; color:var(--accent-ink); background:#20272a; border:1px dashed var(--accent); border-radius:8px; }
.rb-plus:hover { background:#23302a; }
.rb-flyout { position:fixed; z-index:60; display:flex; gap:4px; padding:6px; background:var(--bg2); border:1px solid var(--accent); border-radius:10px; box-shadow:0 8px 24px rgba(0,0,0,.5); }
.rb-flyout[hidden] { display:none; }

.pop-menu { position:fixed; z-index:70; min-width:184px; padding:6px; background:var(--bg2); border:1px solid var(--line); border-radius:10px; box-shadow:0 8px 24px rgba(0,0,0,.5); }
.pop-menu[hidden] { display:none; }
.pop-menu button { display:flex; align-items:center; justify-content:space-between; gap:12px; width:100%; font:inherit; font-size:13px; text-align:left; cursor:pointer; color:var(--ink); background:transparent; border:0; border-radius:6px; padding:7px 10px; }
.pop-menu button:hover { background:var(--panel); }
.pm-key { font-size:11px; color:var(--mut); }
.pm-sep { height:1px; background:var(--line); margin:4px 2px; }
.pm-head { font-size:10px; font-weight:800; letter-spacing:.06em; text-transform:uppercase; color:var(--mut); padding:4px 8px 6px; }
.pm-empty { font-size:12px; color:var(--mut); padding:6px 10px; }

/* Modalità Rapida: nascondi i pannelli avanzati (Viste, Vincoli, Parametri) */
body.mode-rapida .pf-adv { display:none; }

/* cluster bottone + varianti (es. diametro sotto raggio) */
.rb-cluster { display:flex; align-items:stretch; gap:2px; }
.rb-subplus { width:18px; height:48px; font-size:11px; cursor:pointer; color:var(--accent-ink); background:#20272a; border:1px dashed var(--accent); border-radius:8px; padding:0; }
.rb-subplus:hover { background:#23302a; }

/* ===== Beta: cancello accesso + feedback ===== */
.beta-gate { position:fixed; inset:0; z-index:9999; display:flex; align-items:center; justify-content:center; background:rgba(10,11,14,.92); backdrop-filter:blur(3px); }
.beta-card { width:320px; max-width:90vw; background:var(--bg2); border:1px solid var(--line); border-radius:14px; padding:26px 22px; text-align:center; }
.beta-logo { width:44px; height:44px; margin:0 auto 12px; border-radius:11px; background:var(--accent); color:#fff; font-weight:800; font-size:22px; display:flex; align-items:center; justify-content:center; }
.beta-card h1 { font-size:18px; margin:0 0 4px; }
.beta-card p { font-size:13px; color:var(--mut); margin:0 0 16px; }
.beta-card input { width:100%; font:inherit; font-size:14px; padding:10px 12px; color:var(--ink); background:var(--panel); border:1px solid var(--line); border-radius:8px; margin-bottom:10px; }
.beta-card input:focus { outline:none; border-color:var(--accent); }
.beta-card button { width:100%; font:inherit; font-weight:700; font-size:14px; padding:10px; cursor:pointer; color:var(--accent-ink); background:var(--accent); border:0; border-radius:8px; }
.beta-card button:disabled { opacity:.6; cursor:default; }
.beta-err { min-height:16px; margin-top:10px; font-size:12px; color:#ff6b6b; }
.auth-or { font-size:11.5px; color:var(--mut); text-transform:uppercase; letter-spacing:.06em; margin:6px 0; }
.beta-card button.auth-google { color:var(--ink); background:var(--panel); border:1px solid var(--line); font-weight:600; }
.beta-card button.auth-google:hover { border-color:var(--accent); }
.auth-switch { margin-top:12px; }
.auth-switch a { font-size:12.5px; color:var(--accent); text-decoration:none; cursor:pointer; }

/* --- Consent gate (onboarding legale) --- */
.consent-gate { position:fixed; inset:0; z-index:9997; display:flex; align-items:center; justify-content:center; background:rgba(10,11,14,.72); padding:18px; }
.consent-card { width:760px; max-width:96vw; max-height:92vh; display:flex; flex-direction:column; background:var(--bg2); border:1px solid var(--line); border-radius:14px; padding:22px; }
.consent-head { text-align:center; margin-bottom:12px; }
.consent-head h1 { font-size:19px; margin:8px 0 2px; }
.consent-head p { font-size:13px; color:var(--mut); margin:0; }
.consent-docs { display:grid; grid-template-columns:1fr 1fr; gap:12px; min-height:0; }
@media (max-width:640px){ .consent-docs { grid-template-columns:1fr; } }
.consent-doc { display:flex; flex-direction:column; min-height:0; }
.consent-doc-tit { font-size:12px; font-weight:800; text-transform:uppercase; letter-spacing:.04em; color:var(--mut); margin-bottom:6px; }
.consent-doc-body { flex:1; overflow-y:auto; height:34vh; background:var(--panel); border:1px solid var(--line); border-radius:8px; padding:12px; font-size:12.5px; line-height:1.5; }
.consent-doc-body h1,.consent-doc-body h2,.consent-doc-body h3,.consent-doc-body h4 { font-size:13.5px; margin:12px 0 4px; }
.consent-doc-body h1 { font-size:15px; }
.consent-doc-body ul { margin:4px 0 4px 18px; } .consent-doc-body p { margin:6px 0; }
.consent-doc-body blockquote { border-left:3px solid var(--accent); margin:8px 0; padding:4px 10px; color:var(--mut); background:rgba(127,127,127,.06); }
.consent-doc-body code { background:rgba(127,127,127,.14); padding:1px 4px; border-radius:4px; }
.consent-ck { display:flex; align-items:baseline; gap:8px; font-size:13px; margin-top:10px; cursor:pointer; }
.consent-ck input { margin-top:2px; accent-color:var(--accent); }
.consent-ck .req { font-size:10.5px; color:#e0894f; text-transform:uppercase; letter-spacing:.03em; }
.consent-ck .opt { font-size:10.5px; color:var(--mut); text-transform:uppercase; letter-spacing:.03em; }
.consent-foot { display:flex; align-items:center; gap:12px; margin-top:14px; }
.consent-foot .beta-err { flex:1; margin:0; }
.consent-foot button { font:inherit; font-weight:700; font-size:14px; padding:10px 20px; cursor:pointer; color:var(--accent-ink); background:var(--accent); border:0; border-radius:8px; }
.consent-foot button:disabled { opacity:.5; cursor:not-allowed; }
.auth-switch a:hover { text-decoration:underline; }

.fb-modal { position:fixed; inset:0; z-index:9998; display:flex; align-items:center; justify-content:center; background:rgba(10,11,14,.6); }
.fb-card { width:360px; max-width:92vw; background:var(--bg2); border:1px solid var(--line); border-radius:14px; padding:22px; }
.fb-card h2 { font-size:17px; margin:0 0 4px; }
.fb-card p { font-size:12.5px; color:var(--mut); margin:0 0 14px; }
.fb-stars { display:flex; gap:6px; justify-content:center; margin-bottom:12px; }
.fb-stars button { font-size:26px; line-height:1; background:none; border:0; cursor:pointer; color:var(--line); padding:0; }
.fb-stars button.on { color:var(--warn); }
.fb-card textarea { width:100%; font:inherit; font-size:13px; padding:10px; color:var(--ink); background:var(--panel); border:1px solid var(--line); border-radius:8px; resize:vertical; }
.fb-card textarea:focus { outline:none; border-color:var(--accent); }
.fb-row { display:flex; gap:8px; margin-top:12px; }
.fb-skip { flex:0 0 auto; font:inherit; padding:9px 14px; cursor:pointer; color:var(--mut); background:var(--panel); border:1px solid var(--line); border-radius:8px; }
.fb-send { flex:1; font:inherit; font-weight:700; padding:9px; cursor:pointer; color:var(--accent-ink); background:var(--accent); border:0; border-radius:8px; }

/* ===== Finestra di import (raster/vettoriale) ===== */
.imp-dialog { position:fixed; top:64px; right:18px; z-index:80; width:250px; background:var(--bg2); border:1px solid var(--line); border-radius:12px; box-shadow:0 10px 30px rgba(0,0,0,.5); padding:14px; }
.imp-head { display:flex; align-items:center; gap:8px; margin-bottom:10px; }
.imp-badge { font-size:10px; font-weight:800; letter-spacing:.05em; padding:2px 7px; border-radius:6px; }
.imp-badge.ras { color:#0c447c; background:#b5d4f4; }
.imp-badge.vec { color:#173404; background:#c0dd97; }
.imp-name { font-size:12px; color:var(--mut); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.imp-body { display:flex; flex-direction:column; gap:8px; }
.imp-f { display:flex; flex-direction:column; gap:3px; font-size:11px; color:var(--mut); }
.imp-f input, .imp-f select { font:inherit; font-size:13px; color:var(--ink); background:var(--panel); border:1px solid var(--line); border-radius:7px; padding:6px 8px; }
.imp-f input:focus, .imp-f select:focus { outline:none; border-color:var(--accent); }
.imp-pos { font-size:12px; color:var(--ink); display:flex; align-items:center; gap:6px; }
.imp-mini { font:inherit; font-size:11px; cursor:pointer; color:var(--accent-ink); background:var(--panel); border:1px solid var(--line); border-radius:6px; padding:2px 8px; }
.imp-mini:hover { border-color:var(--accent); }
.imp-note { font-size:11px; color:var(--mut); opacity:.85; }
.imp-foot { display:flex; gap:8px; margin-top:12px; }
.imp-cancel { flex:0 0 auto; font:inherit; padding:8px 12px; cursor:pointer; color:var(--mut); background:var(--panel); border:1px solid var(--line); border-radius:8px; }
.imp-ok { flex:1; font:inherit; font-weight:700; padding:8px; cursor:pointer; color:var(--accent-ink); background:var(--accent); border:0; border-radius:8px; }

/* ===== Gestore Reference ===== */
.ref-mgr { position:fixed; top:64px; right:18px; z-index:82; width:300px; max-height:78vh; overflow-y:auto; background:var(--bg2); border:1px solid var(--line); border-radius:12px; box-shadow:0 10px 30px rgba(0,0,0,.5); padding:12px; }
.rm-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
.rm-title { font-weight:700; font-size:14px; }
.rm-x { width:26px; height:26px; cursor:pointer; color:var(--ink); background:var(--panel); border:1px solid var(--line); border-radius:6px; }
.rm-x:hover { border-color:var(--accent); }
.rm-sec { font-size:10px; font-weight:800; letter-spacing:.06em; text-transform:uppercase; color:var(--mut); margin:8px 0 4px; }
.rm-row { display:flex; align-items:center; gap:8px; padding:6px 0; border-top:1px solid var(--line); }
.rm-th { width:40px; height:40px; object-fit:cover; border:1px solid var(--line); border-radius:6px; background:#0d0e11; flex:0 0 auto; }
.rm-mid { flex:1; min-width:0; display:flex; flex-direction:column; gap:4px; }
.rm-name { font-size:12px; color:var(--ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rm-sub { font-size:10px; color:var(--mut); }
.rm-mid input[type=range] { width:100%; }
.rm-ctrls { display:flex; gap:4px; flex-wrap:wrap; }
.rm-ctrls button, .rm-ctrls select { font:inherit; font-size:10.5px; cursor:pointer; color:var(--ink); background:var(--panel); border:1px solid var(--line); border-radius:6px; padding:3px 6px; }
.rm-ctrls button:hover { border-color:var(--accent); }
.rm-icon { width:28px; height:28px; flex:0 0 auto; cursor:pointer; color:var(--ink); background:var(--panel); border:1px solid var(--line); border-radius:6px; }
.rm-icon:hover { border-color:var(--accent); }

/* elenco file reference */
.rm-listhint { font-size:10.5px; color:var(--mut); margin:2px 0 6px; }
.rf-row { display:flex; align-items:center; gap:9px; padding:7px 6px; border-top:1px solid var(--line); border-radius:7px; cursor:pointer; user-select:none; }
.rf-row:hover, .rf-row:focus { background:var(--panel); outline:none; }
.rf-th { width:38px; height:38px; object-fit:cover; border:1px solid var(--line); border-radius:6px; background:#0d0e11; flex:0 0 auto; }
.rf-ic { width:38px; height:38px; display:flex; align-items:center; justify-content:center; font-size:20px; color:var(--accent); border:1px solid var(--line); border-radius:6px; background:#0d0e11; flex:0 0 auto; }
.rf-mid { flex:1; min-width:0; }
.rf-name { font-size:12.5px; color:var(--ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rf-sub { font-size:10.5px; color:var(--mut); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rf-menu { width:26px; height:26px; flex:0 0 auto; cursor:pointer; font-size:16px; line-height:1; color:var(--ink); background:transparent; border:1px solid transparent; border-radius:6px; }
.rf-menu:hover { background:var(--bg2); border-color:var(--line); }

/* finestra impostazioni di un file */
.ref-settings { position:fixed; top:64px; right:330px; z-index:83; width:280px; max-height:78vh; overflow-y:auto; background:var(--bg2); border:1px solid var(--accent); border-radius:12px; box-shadow:0 10px 30px rgba(0,0,0,.55); padding:12px; }
.rs-th { width:100%; max-height:130px; object-fit:contain; border:1px solid var(--line); border-radius:8px; background:#0d0e11; margin-bottom:8px; }
.rs-f { display:flex; align-items:center; justify-content:space-between; gap:8px; font-size:12px; color:var(--mut); margin:6px 0; }
.rs-f input { width:120px; font:inherit; font-size:12px; }
.ref-ctx { min-width:210px; }

/* input dinamico distanza/angolo (linea/polilinea) */
.dyn-input { position:fixed; z-index:86; display:flex; gap:6px; background:var(--bg2); border:1px solid var(--accent); border-radius:9px; padding:5px; box-shadow:0 6px 20px rgba(0,0,0,.5); }
.dyn-input[hidden] { display:none; }
.dyn-lab { display:flex; align-items:center; gap:4px; background:var(--bg); border:1px solid var(--line); border-radius:6px; padding:2px 6px; }
.dyn-lab.on { border-color:var(--accent); box-shadow:0 0 0 1px var(--accent) inset; }
.dyn-lab span { font-size:11px; font-weight:700; color:var(--mut); }
.dyn-lab input { width:58px; font:inherit; font-size:12.5px; color:var(--ink); background:transparent; border:0; outline:none; }

/* barra modalità maschera */
.mask-bar { position:fixed; left:50%; bottom:70px; transform:translateX(-50%); z-index:85; display:flex; align-items:center; gap:10px; background:var(--bg2); border:1px solid var(--accent); border-radius:10px; padding:8px 12px; box-shadow:0 8px 24px rgba(0,0,0,.5); }
.mask-info { font-size:12px; color:var(--mut); }
.mask-cnt { font-size:12px; color:var(--ink); font-weight:700; }
.mask-ok { font:inherit; font-weight:700; font-size:12px; cursor:pointer; color:var(--accent-ink); background:var(--accent); border:0; border-radius:7px; padding:6px 10px; }
.mask-cancel { font:inherit; font-size:12px; cursor:pointer; color:var(--ink); background:var(--panel); border:1px solid var(--line); border-radius:7px; padding:6px 9px; }

/* Barra opzioni contestuale del Muro (edilizia) — sotto il ribbon */
.wall-opts { display: flex; align-items: center; gap: 14px; padding: 5px 12px; background: #eef3ef; border-bottom: 1px solid #cdd8cf; font-size: 12px; }
.wall-opts[hidden] { display: none; }
.wall-opts .wo-lab { font-weight: 600; color: #2c5c3a; }
.wall-opts .wo-f { display: inline-flex; align-items: center; gap: 5px; color: #333; }
.wall-opts select, .wall-opts input { font: inherit; padding: 2px 5px; border: 1px solid #b9c7bc; border-radius: 4px; background: #fff; }
.wall-opts input[type=number] { width: 64px; }
.wall-opts input:disabled { background: #e7ece8; color: #789; }
.wall-opts #wallTypeAdd { font: inherit; padding: 2px 8px; border: 1px solid #b9c7bc; border-radius: 4px; background: #fff; cursor: pointer; }
.wall-opts #wallTypeAdd:hover { background: #dce7de; }
.wall-opts .wo-u { margin-left: auto; color: #2c5c3a; font-variant-numeric: tabular-nums; }

/* Libreria oggetti (edilizia) */
.lib-list { display: flex; flex-direction: column; gap: 2px; margin-bottom: 6px; }
.lib-row { display: flex; align-items: center; gap: 6px; padding: 3px 6px; border-radius: 4px; cursor: default; }
.lib-row:hover { background: rgba(127,127,127,0.12); }
.lib-thumb { flex: 0 0 auto; width: 48px; height: 40px; cursor: pointer; background: rgba(0,0,0,0.15); border-radius: 4px; }
.lib-name { flex: 1; cursor: pointer; font-size: 12px; }
.lib-name:hover { text-decoration: underline; }
.lib-tag { font-size: 10px; opacity: 0.6; }
.lib-edit { background: none; border: none; cursor: pointer; opacity: 0.6; }
.lib-edit:hover { opacity: 1; }
.lib-preview { display: block; margin-top: 8px; width: 100%; max-width: 340px; background: rgba(0,0,0,0.15); border-radius: 6px; }

/* Libreria a schermo intero (design 2026-09-14-libreria-schermo-intero): finestra flottante,
   non modale, ridimensionabile — sostituisce la vecchia sidebar F3 (solo .lib-thumb resta
   in uso altrove, in plotter.js). */
.pf-libwin {
  position: fixed; z-index: 150; display: flex; flex-direction: column;
  background: var(--bg2); border: 1px solid var(--accent); border-radius: 10px;
  box-shadow: 0 16px 48px rgba(0,0,0,.55); overflow: hidden; min-width: 480px; min-height: 320px;
}
/* `.pf-libwin { display: flex }` sopra altrimenti sovrascrive l'attributo [hidden] (stesso
   bug della barra "In coda..." fantasma di AIForge Studio, round 12): senza questa regola
   `el.hidden = true` non nasconde nulla perché un display esplicito sullo stesso selettore
   vince sempre sulla regola [hidden] dello user-agent stylesheet. */
.pf-libwin[hidden] { display: none; }
.libwin-bar { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 8px 10px; background: var(--panel); border-bottom: 1px solid var(--line); cursor: move; user-select: none; touch-action: none; }
.libwin-title { font-weight: 800; font-size: 13px; color: var(--ink); }
.libwin-close { font: inherit; font-size: 16px; line-height: 1; color: var(--mut); background: transparent; border: 0; cursor: pointer; padding: 2px 6px; border-radius: 5px; }
.libwin-close:hover { color: var(--ink); background: rgba(127,127,127,.15); }
.libwin-body { flex: 1; display: flex; min-height: 0; }
.libwin-sections { flex: 0 0 170px; overflow-y: auto; border-right: 1px solid var(--line); padding: 6px; background: var(--bg); }
.libwin-gtitle { font-size: 10.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--mut); margin: 8px 4px 3px; }
.libwin-gtitle:first-child { margin-top: 2px; }
.libwin-sec { font-size: 12.5px; color: var(--ink); padding: 6px 8px; border-radius: 6px; cursor: pointer; }
.libwin-sec:hover { background: rgba(127,127,127,.12); }
.libwin-sec.current { background: #23302a; color: var(--accent-ink); font-weight: 700; }
.libwin-sec.soon { color: var(--mut); cursor: default; font-style: italic; }
.libwin-sec.soon:hover { background: none; }
.libwin-right { flex: 1; display: flex; min-width: 0; }
.libwin-grid { flex: 1; overflow-y: auto; padding: 12px; display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 10px; align-content: start; }
.libwin-card { display: flex; flex-direction: column; gap: 4px; padding: 6px; border-radius: 8px; border: 1px solid transparent; }
.libwin-card:hover { border-color: var(--line); background: rgba(127,127,127,.08); }
.libwin-thumb { width: 100%; height: 76px; cursor: pointer; background: rgba(0,0,0,.18); border-radius: 6px; }
.libwin-cname { font-size: 11.5px; color: var(--ink); cursor: pointer; line-height: 1.25; }
.libwin-cname:hover { text-decoration: underline; }
.libwin-cmeta { display: flex; align-items: center; gap: 4px; }
.libwin-ctag { font-size: 9.5px; color: var(--mut); flex: 1; }
.libwin-cbtn { font: inherit; font-size: 12px; background: none; border: 0; cursor: pointer; opacity: .65; color: var(--ink); padding: 0 2px; }
.libwin-cbtn:hover { opacity: 1; color: var(--accent-ink); }
.libwin-add { grid-column: 1 / -1; font: inherit; font-size: 12px; font-weight: 600; cursor: pointer; color: var(--ink); background: var(--panel); border: 1px dashed var(--line); border-radius: 6px; padding: 8px; }
.libwin-add:hover { border-color: var(--accent); }
.libwin-soon { grid-column: 1 / -1; color: var(--mut); font-size: 12.5px; padding: 20px; text-align: center; }
.libwin-editor { flex: 0 0 260px; overflow-y: auto; border-left: 1px solid var(--line); padding: 10px; background: var(--bg); }
.libwin-ehead { display: flex; align-items: center; gap: 6px; margin-bottom: 8px; }
.libwin-ename { flex: 1; font: inherit; font-size: 12.5px; font-weight: 700; color: var(--ink); background: var(--panel); border: 1px solid var(--line); border-radius: 6px; padding: 4px 7px; }
.libwin-epreview { display: block; width: 100%; height: auto; aspect-ratio: 260 / 160; background: rgba(0,0,0,.18); border-radius: 6px; margin-bottom: 8px; }
.libwin-resize { position: absolute; right: 0; bottom: 0; width: 16px; height: 16px; cursor: nwse-resize; touch-action: none; }
.libwin-resize::after { content: ""; position: absolute; right: 3px; bottom: 3px; width: 8px; height: 8px; border-right: 2px solid var(--line); border-bottom: 2px solid var(--line); }
@media (max-width: 640px) {
  .pf-libwin { left: 8px !important; right: 8px; width: auto !important; }
  .libwin-sections { flex-basis: 120px; }
  .libwin-editor { flex-basis: 200px; }
}
