/* ════════════════════════════════════════════════════════════════════════
   STELLA NOVA · APLICACIÓN
   La superficie no convencional para la que se generaliza el sistema:
   visualización de conocimiento (grafos semánticos + mapas conceptuales)
   con paneles laterales y gestión de relaciones. Tres variaciones de la
   misma data bajo el mismo lenguaje: Atlas · Códice · Taller.
   ════════════════════════════════════════════════════════════════════════ */

.sn-app {
	border: var(--sn-hair);
	border-radius: var(--sn-radius-l);
	overflow: hidden;
	box-shadow: var(--sn-lift);
	background: var(--sn-field);
	height: 34rem;
	display: grid;
	grid-template-rows: auto 1fr;
}
@media (max-width: 48rem) { .sn-app { height: auto; } }

/* Barra superior de la app */
.sn-appbar { display: flex; align-items: center; gap: var(--sn-s-3); padding: var(--sn-s-2) var(--sn-s-3); background: var(--sn-paper); border-bottom: var(--sn-hair); }
.sn-appbar .sn-iso { width: 1.5rem; height: 1.5rem; }
.sn-appbar .title { font-family: var(--sn-font-serif); font-weight: 600; font-size: var(--sn-fs-md); }
.sn-appbar .sn-crumbs { margin-left: var(--sn-s-2); }
.sn-appbar .spacer { flex: 1; }
.sn-appbar .sn-search { height: 2rem; min-width: 11rem; }

/* Cuerpo: nav · lienzo · panel */
.sn-appbody { display: grid; min-height: 0; }
.sn-app[data-view="atlas"]  .sn-appbody { grid-template-columns: 3.4rem 1fr 17rem; }
.sn-app[data-view="codice"] .sn-appbody { grid-template-columns: 13rem 1fr 14rem; }
.sn-app[data-view="taller"] .sn-appbody { grid-template-columns: 12rem 1fr 19rem; }
@media (max-width: 48rem) { .sn-appbody { grid-template-columns: 1fr !important; } .sn-appbody > .sn-appleft, .sn-appbody > .sn-appright { display: none; } }

.sn-appleft { border-right: var(--sn-hair); background: var(--sn-paper); overflow-y: auto; }
.sn-appright { border-left: var(--sn-hair); background: var(--sn-paper); overflow-y: auto; }

/* Nav comprimida del Atlas: sólo iconos */
.sn-railmini { display: flex; flex-direction: column; align-items: center; gap: var(--sn-s-1); padding: var(--sn-s-3) 0; }
.sn-railmini button { width: 2.2rem; height: 2.2rem; display: grid; place-items: center; border: 0; background: none; border-radius: var(--sn-radius); color: var(--sn-icon); cursor: pointer; }
.sn-railmini button:hover { background: var(--sn-sunk); color: var(--sn-icon-active); }
.sn-railmini button.is-active { background: var(--sn-nova-wash); color: var(--sn-nova); }
.sn-railmini .sn-i { width: 1.2rem; height: 1.2rem; }


/* ════════════════════════════════════════════════════════════════════════
   LIENZO DE GRAFO
   ════════════════════════════════════════════════════════════════════════ */
.sn-canvas { position: relative; overflow: hidden; background:
	radial-gradient(circle at 1px 1px, color-mix(in oklab, var(--sn-ink) 9%, transparent) 1px, transparent 0) 0 0 / 22px 22px,
	var(--sn-field);
}
.sn-canvas svg { display: block; width: 100%; height: 100%; }

/* Aristas (relaciones) */
.sn-edge { stroke: var(--sn-hairline); stroke-width: 1.5; fill: none; transition: stroke var(--sn-dur-1); }
.sn-edge.is-active { stroke: var(--sn-nova); stroke-width: 2; }
.sn-edge-label { font-family: var(--sn-font-mono); font-size: 9px; fill: var(--sn-ink-faint); letter-spacing: .04em; text-transform: uppercase; }

/* Nodos */
.sn-node { cursor: pointer; }
.sn-node .halo { fill: var(--sn-paper); stroke: var(--sn-hairline); stroke-width: 1.5; transition: stroke var(--sn-dur-1), fill var(--sn-dur-1); }
.sn-node .glyph { fill: var(--sn-ink-soft); }
.sn-node .ring { fill: none; stroke: transparent; stroke-width: 2; }
.sn-node text.label { font-family: var(--sn-font-text); font-size: 11px; font-weight: 600; fill: var(--sn-ink); }
.sn-node text.kind { font-family: var(--sn-font-mono); font-size: 8.5px; fill: var(--sn-ink-faint); text-transform: uppercase; letter-spacing: .08em; }
.sn-node:hover .halo { stroke: var(--sn-ink-faint); }
.sn-node.is-primary .halo { fill: var(--sn-nova); stroke: var(--sn-nova); }
.sn-node.is-primary .glyph { fill: var(--sn-nova-ink); }
.sn-node.is-selected .ring { stroke: var(--sn-nova); }
.sn-node.is-selected .halo { stroke: var(--sn-nova); }

/* Controles flotantes sobre el lienzo */
.sn-canvas-tools { position: absolute; top: var(--sn-s-3); right: var(--sn-s-3); display: flex; flex-direction: column; gap: var(--sn-s-1); }
.sn-canvas-tools button { width: 2rem; height: 2rem; display: grid; place-items: center; border: var(--sn-hair); background: var(--sn-paper); border-radius: var(--sn-radius); color: var(--sn-icon); cursor: pointer; box-shadow: var(--sn-lift-soft); }
.sn-canvas-tools button:hover { color: var(--sn-icon-active); border-color: var(--sn-ink-faint); }
.sn-canvas-tools .sn-i { width: 1.05rem; height: 1.05rem; }
.sn-canvas-legend { position: absolute; left: var(--sn-s-3); bottom: var(--sn-s-3); display: flex; gap: var(--sn-s-3); padding: var(--sn-s-2) var(--sn-s-3); background: color-mix(in oklab, var(--sn-paper) 88%, transparent); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); border: var(--sn-hair); border-radius: var(--sn-radius); font-size: var(--sn-fs-xs); color: var(--sn-ink-soft); box-shadow: var(--sn-lift-soft); }
.sn-canvas-legend span { display: inline-flex; align-items: center; gap: .35rem; }
.sn-canvas-legend i { width: .7rem; height: .7rem; border-radius: 50%; border: 1px solid var(--sn-hairline); }


/* ════════════════════════════════════════════════════════════════════════
   PANEL DE INFORMACIÓN (relaciones semánticas)
   ════════════════════════════════════════════════════════════════════════ */
.sn-infopanel { padding: var(--sn-s-4); }
.sn-infopanel .eyebrow { font-family: var(--sn-font-mono); font-size: var(--sn-fs-xs); text-transform: uppercase; letter-spacing: .14em; color: var(--sn-nova); font-weight: 600; }
.sn-infopanel h3 { font-family: var(--sn-font-serif); font-size: var(--sn-fs-lg); margin: var(--sn-s-1) 0 var(--sn-s-2); line-height: 1.2; }
.sn-infopanel .summary { font-size: var(--sn-fs-sm); color: var(--sn-ink-soft); line-height: 1.5; margin: 0 0 var(--sn-s-4); }
.sn-infopanel .tagrow { display: flex; flex-wrap: wrap; gap: var(--sn-s-1); margin-bottom: var(--sn-s-4); }

/* Relaciones tipo "triple" sujeto–predicado–objeto */
.sn-relations { display: flex; flex-direction: column; gap: 1px; }
.sn-rel { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: var(--sn-s-2); padding: var(--sn-s-2) 0; border-bottom: var(--sn-hair); }
.sn-rel:last-child { border-bottom: 0; }
.sn-rel .pred { font-family: var(--sn-font-mono); font-size: var(--sn-fs-xs); text-transform: uppercase; letter-spacing: .06em; color: var(--sn-ink-faint); }
.sn-rel .obj { font-size: var(--sn-fs-sm); color: var(--sn-link); }
.sn-rel .obj a { color: inherit; text-decoration: none; border-bottom: 1px solid color-mix(in oklab, var(--sn-link) 30%, transparent); }
.sn-rel .obj a:hover { color: var(--sn-link-hover); }


/* ════════════════════════════════════════════════════════════════════════
   VARIACIÓN · CÓDICE (lectura primero)
   El concepto es una hoja de papel; el grafo es una constelación-minimapa.
   ════════════════════════════════════════════════════════════════════════ */
.sn-reader { padding: var(--sn-s-5) var(--sn-s-6); overflow-y: auto; background: var(--sn-field); }
.sn-reader .sheet { background: var(--sn-paper); border: 1px solid var(--sn-paper-edge); border-radius: var(--sn-radius-paper); box-shadow: var(--sn-lift-paper); padding: var(--sn-s-5) var(--sn-s-6); max-width: 40rem; margin-inline: auto; }
.sn-reader h2 { font-family: var(--sn-font-display); font-weight: 500; font-size: var(--sn-fs-xl); margin: 0 0 var(--sn-s-1); letter-spacing: -.01em; }
.sn-reader .kind { font-family: var(--sn-font-mono); font-size: var(--sn-fs-xs); text-transform: uppercase; letter-spacing: .12em; color: var(--sn-ink-faint); }
.sn-reader p { font-size: var(--sn-fs-base); line-height: var(--sn-baseline); margin: var(--sn-s-3) 0; }
.sn-reader p a { color: var(--sn-link); text-decoration: none; border-bottom: 1px solid color-mix(in oklab, var(--sn-link) 35%, transparent); }
.sn-reader .pill-link { color: var(--sn-link); border-bottom-style: dotted; }

/* Minimapa constelación (Códice) */
.sn-minimap { padding: var(--sn-s-3); }
.sn-minimap h4 { font-family: var(--sn-font-mono); font-size: var(--sn-fs-xs); text-transform: uppercase; letter-spacing: .12em; color: var(--sn-ink-faint); margin: 0 0 var(--sn-s-2); }
.sn-minimap .frame { background: var(--sn-field); border: var(--sn-hair); border-radius: var(--sn-radius); aspect-ratio: 1; overflow: hidden; }


/* ════════════════════════════════════════════════════════════════════════
   VARIACIÓN · TALLER (gestión de relaciones)
   Editor estructurado: el grafo apoya, la tabla de tripletas manda.
   ════════════════════════════════════════════════════════════════════════ */
.sn-workshop { display: grid; grid-template-rows: 1fr auto; min-height: 0; }
.sn-tripletable { width: 100%; border-collapse: collapse; font-size: var(--sn-fs-sm); }
.sn-tripletable th { text-align: left; font-family: var(--sn-font-mono); font-size: var(--sn-fs-xs); text-transform: uppercase; letter-spacing: .08em; color: var(--sn-ink-faint); font-weight: 600; padding: var(--sn-s-2) var(--sn-s-3); border-bottom: var(--sn-hair); position: sticky; top: 0; background: var(--sn-paper); }
.sn-tripletable td { padding: var(--sn-s-2) var(--sn-s-3); border-bottom: var(--sn-hair); }
.sn-tripletable .subj { font-weight: 600; }
.sn-tripletable .pred { font-family: var(--sn-font-mono); font-size: var(--sn-fs-xs); color: var(--sn-ink-soft); }
.sn-tripletable .obj a { color: var(--sn-link); text-decoration: none; }
.sn-tripletable tr:hover td { background: var(--sn-nova-wash); }
.sn-tripletable .conf { font-family: var(--sn-font-mono); font-variant-numeric: tabular-nums; color: var(--sn-ink-soft); text-align: right; }
.sn-workshop-foot { display: flex; align-items: center; gap: var(--sn-s-2); padding: var(--sn-s-3); border-top: var(--sn-hair); background: var(--sn-paper); }


/* ════════════════════════════════════════════════════════════════════════
   DO / DON'T y guías
   ════════════════════════════════════════════════════════════════════════ */
.sn-dodont { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sn-s-4); margin: var(--sn-s-3) 0 var(--sn-baseline); }
@media (max-width: 40rem) { .sn-dodont { grid-template-columns: 1fr; } }
.sn-do, .sn-dont { border: var(--sn-hair); border-radius: var(--sn-radius); padding: var(--sn-s-4); background: var(--sn-paper); }
.sn-do { border-top: 3px solid var(--sn-ok); }
.sn-dont { border-top: 3px solid var(--sn-danger); }
.sn-do .tag, .sn-dont .tag { font-family: var(--sn-font-mono); font-size: var(--sn-fs-xs); font-weight: 700; text-transform: uppercase; letter-spacing: .1em; display: inline-flex; align-items: center; gap: var(--sn-s-1); margin-bottom: var(--sn-s-2); }
.sn-do .tag { color: var(--sn-ok); }
.sn-dont .tag { color: var(--sn-danger); }
.sn-do p, .sn-dont p { margin: 0; font-size: var(--sn-fs-sm); color: var(--sn-ink-soft); line-height: 1.5; }

/* Tres-capas explicador */
.sn-layers { display: grid; gap: var(--sn-s-2); margin: var(--sn-s-3) 0 var(--sn-baseline); }
.sn-layer { display: grid; grid-template-columns: auto 1fr; gap: var(--sn-s-4); align-items: start; padding: var(--sn-s-4); border: var(--sn-hair); border-radius: var(--sn-radius); background: var(--sn-paper); }
.sn-layer .lv { font-family: var(--sn-font-mono); font-size: var(--sn-fs-xl); font-weight: 700; color: var(--sn-nova); line-height: 1; min-width: 1.5rem; }
.sn-layer h4 { margin: 0 0 var(--sn-s-1); font-size: var(--sn-fs-md); }
.sn-layer p { margin: 0; font-size: var(--sn-fs-sm); color: var(--sn-ink-soft); line-height: 1.5; }
.sn-layer code { font-family: var(--sn-font-mono); font-size: .92em; color: var(--sn-ink); background: var(--sn-sunk); padding: .05em .35em; border-radius: var(--sn-radius-s); }
