/* ── Reset & base ─────────────────────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}

/* ── Theme tokens ─────────────────────────────────────────────────────────
   Dark is the default (:root). Light overrides via html[data-theme="light"].
   js/theme.js writes data-theme; an inline script in index.html applies the
   saved choice before first paint so there is no flash of the wrong theme. */
:root{
  color-scheme: dark;

  --bg:        #080f1c;
  --panel:     #0d1626;
  --panel2:    #111e33;
  --panel3:    #172340;
  --border:    #1c2d4a;
  --border2:   #253d60;
  --text:      #dde6f0;
  --text2:     #7a93b0;
  --text3:     #3f5775;
  --accent:    #0ea5e9;
  --accent-d:  #0284c7;
  --accent-bg: rgba(14,165,233,.10);
  --accent-glow: rgba(14,165,233,.25);
  --green:     #34d399;
  --amber:     #fbbf24;
  --red:       #f87171;
  --radius:    8px;
  --radius-sm: 5px;
  --shadow:    0 4px 24px rgba(0,0,0,.5);

  /* Theme-dependent surfaces that used to be hard-coded */
  --canvas:      #08090c;              /* empty-state backdrop (pre-load) */
  --canvas-dot:  rgba(255,255,255,.10);
  --cbg:         #000000;              /* paper behind the drawing (dark) */
  --svg-shadow:  rgba(0,0,0,.4);
  --overlay:     rgba(13,22,38,.92);   /* spinner backdrop */
  --toolbar-shadow: 0 2px 12px rgba(0,0,0,.3);
  --panel-shadow:   -4px 0 24px rgba(0,0,0,.3);
  --err-bg:    rgba(248,113,113,.12);
  --err-bd:    rgba(248,113,113,.35);
  --warn-bg:   rgba(251,191,36,.10);
  --warn-bd:   rgba(251,191,36,.32);
  --sel-bg:    rgba(14,165,233,.13);
  --pin-bd:    rgba(14,165,233,.35);
  /* Selected P&ID object */
  --sel-ink:   #f59e0b;
  --sel-glow:  rgba(245,158,11,.55);
  /* Drop-zone illustration */
  --illo-fill:   #1e293b;
  --illo-stroke: #334155;
  --illo-dash:   #475569;
}

:root[data-theme="light"]{
  color-scheme: light;

  --bg:        #eef2f7;
  --panel:     #ffffff;
  --panel2:    #f5f8fc;
  --panel3:    #e8eef6;
  --border:    #dde5ee;
  --border2:   #c3d0e0;
  --text:      #0f1e33;
  --text2:     #5a7290;
  --text3:     #93a6bd;
  --accent:    #0284c7;
  --accent-d:  #0369a1;
  --accent-bg: rgba(2,132,199,.09);
  --accent-glow: rgba(2,132,199,.30);
  --green:     #059669;
  --amber:     #b45309;
  --red:       #dc2626;
  --shadow:    0 4px 24px rgba(15,23,42,.14);

  --canvas:      #dfe6ef;
  --canvas-dot:  rgba(15,23,42,.10);
  --svg-shadow:  rgba(15,23,42,.18);
  --overlay:     rgba(255,255,255,.94);
  --toolbar-shadow: 0 2px 12px rgba(15,23,42,.07);
  --panel-shadow:   -4px 0 24px rgba(15,23,42,.07);
  --err-bg:    rgba(220,38,38,.09);
  --err-bd:    rgba(220,38,38,.30);
  --warn-bg:   rgba(180,83,9,.09);
  --warn-bd:   rgba(180,83,9,.28);
  --sel-bg:    rgba(2,132,199,.11);
  --pin-bd:    rgba(2,132,199,.35);
  --sel-ink:   #ea580c;               /* darker orange reads better on white */
  --sel-glow:  rgba(234,88,12,.45);
  --illo-fill:   #e2e8f0;
  --illo-stroke: #94a3b8;
  --illo-dash:   #b4c1d1;
}

body{
  font-family:'Segoe UI',system-ui,-apple-system,sans-serif;
  background:var(--bg);
  color:var(--text);
  height:100vh;
  display:flex;
  flex-direction:column;
  overflow:hidden;
  transition:background .2s,color .2s;
}

/* ── Toolbar ─────────────────────────────────────────────────────────────── */
#toolbar{
  position:relative;
  background:var(--panel);
  border-bottom:1px solid var(--border);
  padding:0 14px;
  height:54px;
  display:flex;
  align-items:center;
  gap:10px;
  flex-shrink:0;
  z-index:20;
  box-shadow:0 1px 0 var(--border), var(--toolbar-shadow);
}
/* Accent hairline along the bottom edge */
#toolbar::after{
  content:'';
  position:absolute;left:0;right:0;bottom:-1px;height:1px;
  background:linear-gradient(90deg,transparent,var(--accent-glow) 25%,var(--accent-glow) 75%,transparent);
  opacity:.7;
  pointer-events:none;
}

/* Brand */
.brand{display:flex;align-items:center;gap:10px;flex-shrink:0;padding-right:2px}
.brand-icon{
  width:30px;height:30px;
  display:flex;align-items:center;justify-content:center;
  flex-shrink:0;
}
.brand-icon img{width:100%;height:100%;display:block}
.brand-text{display:flex;flex-direction:column;line-height:1.15}
.brand-name{
  font-size:13.5px;font-weight:700;letter-spacing:.2px;
  color:var(--text);
}
.brand-sub{
  font-size:9px;font-weight:600;letter-spacing:1.3px;
  text-transform:uppercase;
  color:var(--accent);
  opacity:.85;
}

/* Separators */
.tb-sep{width:1px;height:24px;background:var(--border2);flex-shrink:0;opacity:.8}
.tb-sep-v{width:1px;height:16px;background:var(--border2);margin:0 3px;opacity:.7}

/* Button groups */
.tb-group{display:flex;align-items:center;gap:5px}
/* Segmented control (zoom cluster) */
.tb-seg{
  height:36px;
  background:var(--panel2);
  border:1px solid var(--border);
  border-radius:10px;
  padding:0 4px;
  gap:1px;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.10);
}
.tb-seg .btn-icon{width:28px;height:28px;border-radius:7px}

/* Buttons */
.btn{
  height:32px;
  background:transparent;
  border:1px solid transparent;
  color:var(--text2);
  padding:0 12px;
  border-radius:8px;
  font-size:12.5px;
  font-weight:500;
  font-family:inherit;
  cursor:pointer;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:7px;
  transition:background .15s,color .15s,border-color .15s,box-shadow .15s,transform .08s;
  white-space:nowrap;
  line-height:1;
}
.btn svg{width:16px;height:16px;flex-shrink:0;display:block}
.btn:hover{
  background:var(--panel3);
  border-color:var(--border2);
  color:var(--text);
}
.btn:active{transform:translateY(1px)}
.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* Toggle buttons that reflect an on/off panel state */
.btn.is-active{
  color:var(--accent);
  background:var(--accent-bg);
  border-color:var(--pin-bd);
}
.btn.is-active:hover{color:var(--accent);background:var(--accent-bg)}

.btn-primary{
  background:linear-gradient(180deg,var(--accent),var(--accent-d));
  border-color:var(--accent-d);
  color:#fff;
  font-weight:600;
  padding:0 15px;
  box-shadow:0 1px 2px rgba(0,0,0,.22), inset 0 1px 0 rgba(255,255,255,.18);
}
.btn-primary:hover{
  filter:brightness(1.08);
  color:#fff;
  border-color:var(--accent-d);
  box-shadow:0 2px 12px var(--accent-glow), inset 0 1px 0 rgba(255,255,255,.22);
}
.btn-icon{
  width:32px;height:32px;
  padding:0;
}

#file-input{display:none}

/* Zoom label */
#zoom-label{
  font-size:11.5px;
  font-weight:600;
  color:var(--text);
  min-width:46px;
  padding:0 2px;
  text-align:center;
  letter-spacing:.2px;
  font-variant-numeric:tabular-nums;
}

.toolbar-r{margin-left:auto;display:flex;align-items:center;gap:10px;min-width:0}

/* Narrow windows — shed the least essential chrome first */
@media (max-width:880px){
  .brand-text{display:none}
}
@media (max-width:680px){
  .btn-primary .btn-label{display:none}
  .btn-primary{width:32px;padding:0}
}

/* ── Main layout ─────────────────────────────────────────────────────────── */
#main{flex:1;display:flex;overflow:hidden}

/* ── Canvas ──────────────────────────────────────────────────────────────── */
#canvas-wrap{
  flex:1;
  position:relative;
  overflow:hidden;
  background:var(--canvas);
  background-image:
    radial-gradient(circle, var(--canvas-dot) 1px, transparent 1px);
  background-size:24px 24px;
  transition:background-color .2s;
}
#canvas-wrap.drag-over{outline:2px dashed var(--accent);outline-offset:-4px}
#pid-svg{
  position:absolute;top:0;left:0;width:100%;height:100%;
  cursor:default;
  -webkit-user-select:none;user-select:none;
  filter:drop-shadow(0 2px 20px var(--svg-shadow));
}
/* Closed hand only while the left button is held (pan-zoom.js adds .dragging
   on mousedown, removes it on mouseup). Descendants are covered too, else
   .pid-obj's pointer cursor would win mid-drag. */
#pid-svg.dragging,
#pid-svg.dragging *{cursor:grabbing}

/* ── Dark-mode drawing ────────────────────────────────────────────────────
   Ink colours are remapped per element in JS (themeColor() in xml-helpers.js)
   so authored colours survive intact — a filter here would distort them.
   Only the paper rect is recoloured in CSS.
   :not([data-theme="light"]) so this still applies if JS never runs. */
:root:not([data-theme="light"]) #cbg{
  fill:var(--cbg) !important;
}

/* ── Cursor coordinate readout ───────────────────────────────────────────── */
#coord-readout{
  position:absolute;
  right:10px;bottom:10px;
  z-index:15;
  display:flex;
  align-items:center;
  gap:5px;
  padding:4px 9px;
  background:var(--overlay);
  border:1px solid var(--border);
  border-radius:20px;
  box-shadow:0 2px 10px rgba(0,0,0,.18);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  font-size:11px;
  font-family:'Cascadia Code','Consolas','Courier New',monospace;
  font-variant-numeric:tabular-nums;
  color:var(--text);
  pointer-events:none;
  -webkit-user-select:none;user-select:none;
  opacity:0;
  transition:opacity .15s;
}
#coord-readout.show{opacity:1}
#coord-x,#coord-y{min-width:52px;text-align:right}
.coord-axis{
  color:var(--text3);
  font-weight:700;
  letter-spacing:.5px;
}
.coord-unit{
  color:var(--text2);
  margin-left:1px;
  font-size:10px;
}

/* ── Drop message ────────────────────────────────────────────────────────── */
#drop-msg{
  position:absolute;top:50%;left:50%;
  transform:translate(-50%,-50%);
  text-align:center;
  pointer-events:none;
  transition:opacity .25s;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:0;
}
#drop-msg.hidden{opacity:0}
.drop-illustration{
  width:160px;height:107px;
  margin-bottom:20px;
  opacity:.55;
}
/* Illustration colours are theme tokens (CSS beats presentation attributes) */
.drop-illustration .illo-body{fill:var(--illo-fill);stroke:var(--illo-stroke)}
.drop-illustration .illo-line{stroke:var(--illo-stroke)}
.drop-illustration .illo-dash{stroke:var(--illo-dash)}
.drop-illustration .illo-accent{stroke:var(--accent)}
.drop-t{
  font-size:18px;font-weight:600;
  color:var(--text);
  margin-bottom:8px;
  letter-spacing:.2px;
}
.drop-s{
  font-size:13px;color:var(--text2);
  margin-bottom:14px;
}
.drop-s strong{color:var(--accent)}
.drop-formats{
  font-size:11px;
  color:var(--text3);
  background:var(--panel);
  border:1px solid var(--border);
  border-radius:20px;
  padding:4px 12px;
  letter-spacing:.5px;
  text-transform:uppercase;
}
/* Load failure message — hidden until there is one */
.drop-err{
  display:none;
  margin-top:14px;
  max-width:340px;
  font-size:11.5px;
  line-height:1.5;
  color:var(--red);
  background:var(--err-bg);
  border:1px solid var(--err-bd);
  border-radius:var(--radius);
  padding:7px 12px;
}
.drop-err.show{display:block}

/* ── Spinner ─────────────────────────────────────────────────────────────── */
#spinner{
  position:absolute;top:50%;left:50%;
  transform:translate(-50%,-50%);
  background:var(--overlay);
  border:1px solid var(--border2);
  border-radius:12px;
  padding:22px 32px;
  text-align:center;
  display:none;
  z-index:50;
  box-shadow:var(--shadow);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
}
#spinner.show{display:block}
.spin-ring{
  width:32px;height:32px;
  border:2.5px solid var(--border2);
  border-top-color:var(--accent);
  border-radius:50%;
  animation:spin .7s linear infinite;
  margin:0 auto 12px;
  will-change:transform;
}
.spin-label{font-size:12px;color:var(--text2);letter-spacing:.3px}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── Info panel ──────────────────────────────────────────────────────────── */
#info{
  width:0;
  background:var(--panel);
  border-left:1px solid transparent;
  display:flex;
  flex-direction:column;
  flex-shrink:0;
  overflow:hidden;
  transition:width .22s cubic-bezier(.4,0,.2,1),border-color .22s;
  box-shadow:var(--panel-shadow);
}
#info.open{width:288px;border-left-color:var(--border)}

#info-hdr{
  padding:13px 14px 12px;
  border-bottom:1px solid var(--border);
  display:flex;
  align-items:center;
  justify-content:space-between;
  background:var(--panel2);
  gap:8px;
}
.info-hdr-left{display:flex;align-items:center;gap:8px;min-width:0}
.info-type-badge{
  width:8px;height:8px;border-radius:50%;
  background:var(--accent);
  flex-shrink:0;
  box-shadow:0 0 6px var(--accent-glow);
}
#info-type{
  font-size:11.5px;
  font-weight:700;
  color:var(--text);
  text-transform:uppercase;
  letter-spacing:.8px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.info-hdr-btns{display:flex;align-items:center;gap:2px;flex-shrink:0}
#info-pin,#info-close{
  background:none;
  border:1px solid transparent;
  color:var(--text3);
  cursor:pointer;
  width:26px;height:26px;
  border-radius:var(--radius-sm);
  display:flex;align-items:center;justify-content:center;
  flex-shrink:0;
  transition:background .15s,color .15s,border-color .15s;
  padding:0;
}
#info-pin:hover,#info-close:hover{
  background:var(--panel3);
  border-color:var(--border2);
  color:var(--text);
}
#info-pin.pinned{
  color:var(--accent);
  background:var(--accent-bg);
  border-color:var(--pin-bd);
}

#info-body{
  flex:1;overflow-y:auto;
  padding:8px 0;
  -webkit-user-select:none;user-select:none;
}
#info-body::-webkit-scrollbar{width:4px}
#info-body::-webkit-scrollbar-track{background:transparent}
#info-body::-webkit-scrollbar-thumb{background:var(--border2);border-radius:2px}

.irow{
  display:flex;
  align-items:flex-start;
  gap:8px;
  padding:6px 14px;
  border-bottom:1px solid var(--border);
  font-size:11.5px;
  transition:background .1s;
}
.irow:last-child{border-bottom:none}
.irow:hover{background:var(--panel2)}
.ikey{
  color:var(--text2);
  min-width:96px;
  flex-shrink:0;
  padding-top:1px;
  font-size:11px;
  letter-spacing:.1px;
}
.ival{
  color:var(--text);
  word-break:break-all;
  font-weight:500;
  line-height:1.4;
}
.ival:first-child:last-child{
  color:var(--accent);
  font-family:'Cascadia Code','Consolas','Courier New',monospace;
  font-size:11px;
}

/* Section divider in info panel */
.isec{
  padding:10px 14px 4px;
  font-size:9.5px;
  font-weight:700;
  letter-spacing:1px;
  text-transform:uppercase;
  color:var(--text3);
  border-top:1px solid var(--border);
}

/* ── Sidebar ─────────────────────────────────────────────────────────────── */
#sidebar{
  width:240px;
  background:var(--panel);
  border-right:1px solid var(--border);
  display:flex;
  flex-direction:column;
  flex-shrink:0;
  overflow:hidden;
  transition:width .22s cubic-bezier(.4,0,.2,1);
}
#sidebar.collapsed{width:0;border-right-color:transparent}

#sidebar-hdr{
  padding:10px 12px;
  border-bottom:1px solid var(--border);
  background:var(--panel2);
  display:flex;
  align-items:center;
  gap:7px;
  flex-shrink:0;
}
.sidebar-hdr-icon{flex-shrink:0;opacity:.5}
#sidebar-hdr span{
  font-size:10px;
  font-weight:700;
  letter-spacing:.9px;
  text-transform:uppercase;
  color:var(--text2);
  white-space:nowrap;
}

#tree-root{
  flex:1;
  overflow-y:auto;
  overflow-x:hidden;
  padding:2px 0 8px;
}
#tree-root::-webkit-scrollbar{width:3px}
#tree-root::-webkit-scrollbar-track{background:transparent}
#tree-root::-webkit-scrollbar-thumb{background:var(--border2);border-radius:2px}

.tree-empty{
  padding:24px 14px;
  font-size:11px;
  color:var(--text3);
  text-align:center;
  line-height:1.6;
}

/* ── Section headers ─────────────────────────────────────────────────────── */
.t-sec{margin-top:2px}
.t-sec-hdr{
  padding:6px 10px 5px;
  display:flex;
  align-items:center;
  gap:5px;
  cursor:pointer;
  -webkit-user-select:none;user-select:none;
  border-top:1px solid var(--border);
  border-bottom:1px solid var(--border);
  background:var(--panel2);
}
.t-sec:first-child .t-sec-hdr{border-top:none}
.t-sec-hdr:hover{background:var(--panel3)}
.t-sec-caret{
  font-size:8px;
  color:var(--text3);
  width:10px;
  flex-shrink:0;
}
.t-sec-title{
  font-size:9px;
  font-weight:700;
  letter-spacing:1px;
  text-transform:uppercase;
  color:var(--text2);
  flex:1;
}
.t-count{
  font-size:9px;
  font-weight:600;
  color:var(--text2);
  background:var(--panel3);
  border:1px solid var(--border2);
  border-radius:9px;
  padding:1px 6px;
}

/* ── Tree rows (both parent and leaf) ───────────────────────────────────── */
.t-node{display:flex;flex-direction:column}

.t-row{
  display:flex;
  align-items:center;
  gap:3px;
  padding:3px 8px 3px 10px;
  cursor:pointer;
  -webkit-user-select:none;user-select:none;
  transition:background .1s;
  min-width:0;
  position:relative;
}
.t-row:hover{background:var(--panel2)}
.t-row.t-active{
  background:var(--sel-bg);
  border-right:2px solid var(--accent);
}
.t-row.t-active .t-label{color:var(--accent);font-weight:600}
.t-row.t-active .t-badge{color:var(--accent);opacity:.8}
.t-row.t-active .t-toggle{color:var(--accent)}

/* Indent for leaf rows */
.t-leaf-row{padding-left:14px}


/* ── Toggle (▶/▼) ────────────────────────────────────────────────────────── */
.t-toggle{
  font-size:8px;
  width:11px;
  min-width:11px;
  color:var(--text3);
  line-height:1;
  flex-shrink:0;
  cursor:pointer;
  transition:color .12s;
  text-align:center;
}
.t-row:hover .t-toggle{color:var(--text2)}

/* ── Icon cell ───────────────────────────────────────────────────────────── */
.t-icon{
  width:16px;
  height:16px;
  flex-shrink:0;
  display:flex;
  align-items:center;
  justify-content:center;
}
.t-icon svg{display:block}

/* ── Label + badge ───────────────────────────────────────────────────────── */
.t-label{
  font-size:11.5px;
  font-weight:400;
  color:var(--text);
  flex:1;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  line-height:1.3;
}
.t-badge{
  font-size:9px;
  color:var(--text3);
  background:var(--panel3);
  border:1px solid var(--border);
  border-radius:3px;
  padding:1px 4px;
  flex-shrink:0;
  white-space:nowrap;
  margin-left:2px;
}

/* ── Children container ──────────────────────────────────────────────────── */
/* Nesting goes 4 deep (line → segment → group → item) in a 240px panel, so
   each level indents less than the one above it. */
.t-children{
  border-left:1px solid var(--border);
  margin-left:15px;
}
.t-children .t-children{margin-left:10px}
.t-children .t-children .t-children{margin-left:8px}

/* ── Utility ─────────────────────────────────────────────────────────────── */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* ── Validation panel ────────────────────────────────────────────────────── */
#val-section{
  flex-shrink:0;
  border-top:1px solid var(--border);
  display:flex;
  flex-direction:column;
  overflow:hidden;
  max-height:34px; /* collapsed: show header only */
  transition:max-height .22s cubic-bezier(.4,0,.2,1);
}
#val-section.val-expanded{max-height:280px}

#val-hdr{
  height:34px;
  min-height:34px;
  padding:0 10px;
  display:flex;
  align-items:center;
  gap:6px;
  background:var(--panel2);
  cursor:pointer;
  -webkit-user-select:none;user-select:none;
}
#val-hdr:hover{background:var(--panel3)}
.val-title{
  font-size:10px;
  font-weight:700;
  letter-spacing:.9px;
  text-transform:uppercase;
  color:var(--text2);
  flex:1;
  white-space:nowrap;
}

/* count badges */
.val-badge{
  font-size:9.5px;
  font-weight:700;
  min-width:18px;
  text-align:center;
  padding:1px 4px;
  border-radius:3px;
  background:var(--panel3);
  border:1px solid var(--border);
  color:var(--text3);
  line-height:1.5;
}
.val-badge.has-issues{
  background:var(--err-bg);
  border-color:var(--err-bd);
  color:var(--red);
}
.val-badge-warn.has-issues{
  background:var(--warn-bg);
  border-color:var(--warn-bd);
  color:var(--amber);
}

/* chevron toggle button */
.val-toggle-btn{
  background:none;border:none;
  color:var(--text3);cursor:pointer;
  padding:2px;
  display:flex;align-items:center;justify-content:center;
  border-radius:3px;
  transition:color .12s, transform .22s;
}
.val-toggle-btn:hover{color:var(--text)}
#val-section.val-expanded .val-toggle-btn{transform:rotate(180deg)}

/* body / issue list */
#val-body{
  flex:1;
  overflow-y:auto;
  overflow-x:hidden;
}
#val-body::-webkit-scrollbar{width:3px}
#val-body::-webkit-scrollbar-track{background:transparent}
#val-body::-webkit-scrollbar-thumb{background:var(--border2);border-radius:2px}

.val-empty{
  padding:16px 12px;
  font-size:11px;
  color:var(--text3);
  text-align:center;
}
.val-ok{
  padding:14px 12px;
  font-size:11px;
  color:var(--green);
  display:flex;
  align-items:center;
  gap:6px;
  justify-content:center;
}

/* individual issue row */
.val-item{
  display:flex;
  align-items:flex-start;
  gap:7px;
  padding:7px 10px;
  border-bottom:1px solid var(--border);
  cursor:default;
}
.val-item:last-child{border-bottom:none}
.val-item:hover{background:var(--panel2)}

.val-icon{
  flex-shrink:0;
  margin-top:1px;
}
.val-error  .val-icon{color:var(--red)}
.val-warning .val-icon{color:var(--amber)}

.val-content{flex:1;min-width:0}
.val-msg{
  font-size:11px;
  color:var(--text);
  line-height:1.45;
  word-break:break-word;
}
.val-ctx{
  font-size:10px;
  color:var(--text3);
  margin-top:2px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.val-source-banner{
  font-size:9.5px;
  color:var(--text3);
  padding:5px 10px;
  border-bottom:1px solid var(--border);
  background:var(--panel2);
  letter-spacing:.3px;
}

/* ── Theme toggle ────────────────────────────────────────────────────────── */
#theme-btn svg{transition:transform .28s cubic-bezier(.4,0,.2,1)}
#theme-btn:hover svg{transform:rotate(-15deg)}
/* Show the icon for the theme you'd switch TO */
#theme-btn .icon-sun{display:none}
:root[data-theme="light"] #theme-btn .icon-sun{display:block}
:root[data-theme="light"] #theme-btn .icon-moon{display:none}

/* Tree glyphs are tuned for a dark backdrop — deepen them slightly on light */
:root[data-theme="light"] .t-icon svg{filter:saturate(1.15) brightness(.82)}

/* ── P&ID object interaction ─────────────────────────────────────────────── */
.pid-obj{cursor:pointer;pointer-events:visible}
/* Opacity, not a glow: CSS filter lengths on SVG resolve in user units (mm
   here), so a blur radius would balloon around a 6 mm symbol. Opacity is
   unitless and reaches <use> symbols too. */
.pid-obj:hover{opacity:.65;transition:opacity .12s}
.pid-obj.sel:hover{opacity:1}

/* Selection = recolour only, no outline. Every primitive's stroke is written
   as var(--pid-ink, <its own colour>) by setStroke() in xml-helpers.js, so
   defining --pid-ink here repaints the whole object — including symbols drawn
   with <use>, which no selector can reach into but custom properties do. */
.pid-obj.sel{--pid-ink:var(--sel-ink)}
