/* ============================================================
   norm.css — Módulo de normalización (1FN · 2FN · 3FN · FNBC)
   QueryLab · Dr. César Ortiz Méndez
   ============================================================ */
main.main{ min-width:0; }
.nf-cards3{ display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:12px; margin:6px 0 10px; }
.nf-c3{ border:1px solid var(--line); border-left:3px solid var(--magenta); border-radius:6px; background:var(--bg-elev); padding:12px 14px; }
.nf-c3 b{ color:var(--magenta); font-size:12px; letter-spacing:.12em; text-transform:uppercase; }
.nf-c3 p{ margin:6px 0 0; font-family:var(--sans); font-size:13.5px; line-height:1.55; color:#bac8d6; }
.nf-pre{ background:#070d16; border:1px solid var(--line); border-radius:6px; padding:12px 14px; color:var(--cyan); font-size:12.5px; overflow:auto; white-space:pre; }

/* escalera de formas normales */
.nf-ladder{ display:flex; flex-wrap:wrap; gap:18px; align-items:center; margin:8px 0 12px; }
.nf-ladder p{ flex:1 1 240px; font-family:var(--sans); color:#bac8d6; font-size:14px; margin:0; }
.nf-l{ border:1px solid; border-radius:8px; padding:22px 10px 10px; position:relative; }
.nf-l > span{ position:absolute; left:9px; top:4px; font-size:11px; font-weight:700; }
.nf-l.l1{ border-color:#5d7186; width:340px; max-width:100%; } .nf-l.l1 > span{ color:#8ea3b8; }
.nf-l.l2{ border-color:var(--amber); } .nf-l.l2 > span{ color:var(--amber); }
.nf-l.l3{ border-color:var(--phosphor); } .nf-l.l3 > span{ color:var(--phosphor); }
.nf-l.l4{ border-color:var(--cyan); background:rgba(43,217,255,.04); } .nf-l.l4 > span{ color:var(--cyan); }
.nf-l.l5{ border-color:var(--violet); } .nf-l.l5 > span{ color:var(--violet); }
.nf-l.l6{ border-color:var(--magenta); min-height:22px; background:rgba(255,46,151,.06); } .nf-l.l6 > span{ color:var(--magenta); }
.nf-forms{ display:grid; grid-template-columns:repeat(auto-fit,minmax(250px,1fr)); gap:12px; margin-bottom:12px; }
.nf-form{ border:1px solid var(--line); border-radius:6px; background:var(--bg-elev); padding:12px 14px; font-family:var(--sans); font-size:13.5px; color:#bac8d6; line-height:1.55; }
.nf-form p{ margin:6px 0; } .nf-form code{ font-family:var(--mono); color:var(--phosphor); }
.nf-form .fix{ border-left:2px solid var(--violet); padding-left:9px; color:#a9b8c8; }
.nf-fh{ font-family:var(--mono); color:var(--muted); font-size:12px; }
.nf-fh b{ color:var(--phosphor); font-size:15px; margin-right:4px; }
.nf-classnote{ margin:12px 0 4px; font-size:12.5px; }

/* laboratorio */
.nf-lab{ display:grid; grid-template-columns:minmax(280px,380px) minmax(0,1fr); gap:16px; align-items:start; }
.nf-form-in{ border:1px solid var(--line); border-radius:8px; background:var(--bg-elev); padding:12px; position:sticky; top:52px; }
.nf-form-in code{ color:var(--phosphor); }
.nf-info{ color:var(--muted); font-family:var(--sans); font-size:12px; line-height:1.45; margin:-4px 0 10px; }
.nf-datain{ white-space:pre; overflow:auto; font-size:11px !important; }
.nf-btns{ display:flex; flex-wrap:wrap; gap:6px; margin:4px 0 8px; }
.nf-err{ border:1px solid #5a1f3a; background:#1d0e16; color:#ff9cc8; border-radius:5px; padding:6px 10px; font-size:12px; margin-bottom:8px; }
.nf-err ul{ margin:0; padding-left:16px; }
.nf-clo{ display:flex; gap:6px; } .nf-clo .ch-in{ flex:1; }
.nf-clo-res{ margin:8px 0 2px; color:var(--cyan); font-size:12.5px; } .nf-clo-res sup{ color:var(--phosphor); }
.nf-trace{ margin:4px 0 0; padding-left:20px; font-family:var(--sans); font-size:12.5px; color:#a9b8c8; }
.nf-trace code{ font-family:var(--mono); color:var(--phosphor); }
.nf-result{ min-width:0; }
.ok{ color:var(--phosphor); } .bad{ color:var(--magenta); }

.nf-diag{ border:1px solid var(--line); border-radius:6px; background:var(--bg-elev); padding:10px 12px; display:flex; flex-direction:column; gap:7px; font-size:12.5px; }
.nf-row{ display:flex; flex-wrap:wrap; gap:10px; align-items:center; } .nf-row.top{ align-items:flex-start; }
.nf-k{ color:var(--muted); font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; min-width:150px; }
.nf-key{ display:inline-block; margin-right:6px; color:var(--phosphor); background:#0d2018; border:1px solid #15402c; border-radius:4px; padding:1px 7px; }
.nf-fdl{ display:flex; flex-wrap:wrap; gap:5px; }
.nf-fdl code{ background:#0a1320; border:1px solid var(--line); border-radius:4px; padding:2px 7px; color:var(--cyan); font-size:12px; }
.nf-fdl code.hl{ border-color:var(--amber); color:var(--amber); background:#1e1708; }
.nf-badge{ display:inline-block; padding:3px 11px; border-radius:99px; font-weight:700; font-size:12px; border:1px solid; }
.nf-badge.r{ color:var(--magenta); border-color:var(--magenta); background:#1d0e16; }
.nf-badge.a{ color:var(--amber); border-color:var(--amber); background:#1e1708; }
.nf-badge.g{ color:var(--phosphor); border-color:var(--phosphor); background:#0d2018; }
.nf-badge.b{ color:var(--cyan); border-color:var(--cyan); background:#08202a; }
.nf-viol{ margin-top:8px; font-family:var(--sans); font-size:13px; color:#bac8d6; }
.nf-viol ul{ margin:4px 0 8px; padding-left:20px; } .nf-viol li{ margin:3px 0; }
.nf-viol code{ font-family:var(--mono); color:var(--cyan); }
.nf-vh{ font-family:var(--mono); font-size:11px; letter-spacing:.1em; text-transform:uppercase; font-weight:700; margin-top:6px; }
.nf-vh.a{ color:var(--amber); } .nf-vh.v{ color:var(--violet); } .nf-vh.g{ color:var(--phosphor); } .nf-vh.m{ color:var(--magenta); }
.nf-warn{ border-left:2px solid var(--amber); padding:4px 10px; margin:8px 0; color:#e9cf9a; font-family:var(--sans); font-size:12.5px; }
.nf-warn ul{ margin:2px 0; padding-left:18px; }
.nf-anom{ font-family:var(--sans); font-size:13px; color:#bac8d6; }
.nf-anom ul{ margin:4px 0; padding-left:20px; } .nf-anom li{ margin:4px 0; } .nf-anom b{ color:var(--magenta); }

/* pasos */
.nf-steps{ display:flex; flex-wrap:wrap; gap:0; border:1px solid var(--line); border-radius:6px; overflow:hidden; width:max-content; max-width:100%; }
.nf-step{ background:#0a1320; border:none; border-right:1px solid var(--line); color:var(--muted); font-family:var(--mono); padding:6px 14px; cursor:pointer; display:flex; flex-direction:column; align-items:center; line-height:1.2; }
.nf-step:last-child{ border-right:none; }
.nf-step b{ font-size:13px; } .nf-step small{ font-size:9.5px; opacity:.8; }
.nf-step:hover{ color:var(--cyan); }
.nf-step.on{ background:#0d2018; color:var(--phosphor); }
.nf-stepbody{ margin-top:10px; }
.nf-stitle{ color:#dce6f0; font-weight:700; font-size:13.5px; }
.nf-notes{ margin:6px 0; padding-left:20px; font-family:var(--sans); font-size:13px; color:#bac8d6; } .nf-notes li{ margin:3px 0; }
.nf-cells{ font-family:var(--sans); font-size:12.5px; color:var(--muted); margin:4px 0 6px; } .nf-cells b{ color:#dce6f0; }
.nf-tables{ display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:12px; margin-top:8px; }
.nf-tcard{ border:1px solid #2a4a78; border-radius:6px; background:#0b1524; overflow:hidden; min-width:0; }
.nf-tcard.new{ border-color:var(--phosphor); box-shadow:0 0 0 1px rgba(0,255,156,.25); }
.nf-thead{ display:flex; align-items:center; gap:8px; background:#4472c4; color:#fff; padding:6px 10px; }
.nf-tname{ font-weight:700; font-size:13px; flex:1; }
.nf-orig{ font-size:10px; background:rgba(0,0,0,.25); border-radius:99px; padding:1px 7px; }
.nf-tcount{ font-size:10.5px; opacity:.85; }
.nf-schema{ padding:7px 10px; color:#cdd9e6; font-size:12.5px; border-bottom:1px solid var(--line); word-break:break-word; }
.nf-schema b{ color:#fff; } .nf-schema u{ text-decoration-color:var(--phosphor); text-underline-offset:3px; text-decoration-thickness:2px; }
.nf-fk{ color:var(--amber); }
.nf-dwrap{ overflow:auto; max-height:240px; }
.nf-data{ width:100%; border-collapse:collapse; font-size:11.5px; }
.nf-data th,.nf-data td{ border-bottom:1px solid var(--line); border-right:1px solid var(--line); padding:4px 8px; text-align:left; white-space:nowrap; }
.nf-data th{ background:#0b1421; color:var(--cyan); position:sticky; top:0; }
.nf-data th.pk{ color:var(--phosphor); text-decoration:underline; text-underline-offset:3px; }
.nf-data th.fk{ color:var(--amber); }
.nf-data td.null{ color:var(--dim); font-style:italic; }
.nf-more{ color:var(--dim); font-size:11px; padding:4px 10px; }
.nf-tnote{ padding:6px 10px; font-family:var(--sans); font-size:12px; color:#a9b8c8; border-top:1px solid var(--line); }
.nf-fks{ display:flex; flex-wrap:wrap; gap:6px; padding:6px 10px; border-top:1px solid var(--line); font-size:11px; color:var(--amber); }
.nf-fig{ border:1px solid var(--line); border-radius:8px; background:var(--bg-elev); padding:12px; }

/* SQL */
.nf-sqlbar{ display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.nf-sql{ background:#070d16; border:1px solid var(--line); border-radius:6px; padding:12px 14px; color:var(--cyan); font-size:12px; overflow:auto; max-height:420px; margin-top:8px; }

/* ejercicios */
.nf-exs{ display:grid; grid-template-columns:repeat(auto-fill,minmax(360px,1fr)); gap:14px; margin-top:10px; }
.nf-ex{ border:1px solid var(--line); border-radius:8px; background:var(--bg-elev); padding:12px 14px; display:flex; flex-direction:column; gap:8px; min-width:0; }
.nf-ex.solved{ border-color:#15402c; }
.nf-exh{ display:flex; align-items:center; gap:8px; }
.nf-exn{ color:var(--magenta); font-weight:700; } .nf-ext{ color:#dce6f0; font-weight:700; flex:1; font-size:13px; }
.nf-extag{ font-size:10px; color:var(--violet); border:1px solid #3a2a6a; border-radius:99px; padding:1px 8px; }
.nf-exok{ display:none; font-size:11px; color:var(--phosphor); }
.nf-ex.solved .nf-exok{ display:inline; }
.nf-exrel{ background:#070d16; border:1px solid var(--line); border-radius:6px; }
.nf-exrel .nf-schema{ border-bottom:none; }
.nf-exrel .nf-fdl{ padding:0 10px 8px; }
.nf-exq{ font-family:var(--sans); font-size:13.5px; color:#cdd9e6; }
.nf-chips{ display:flex; flex-wrap:wrap; gap:6px; }
.nf-chip{ background:#0a1320; border:1px solid var(--line); color:var(--text); border-radius:99px; padding:4px 11px; font-family:var(--mono); font-size:12px; cursor:pointer; }
.nf-chip:hover{ border-color:var(--cyan); }
.nf-chip.on{ background:#0d2018; border-color:var(--phosphor); color:var(--phosphor); }
.nf-opts{ display:flex; flex-direction:column; gap:5px; }
.nf-opt{ display:flex; gap:8px; align-items:flex-start; cursor:pointer; font-family:var(--sans); font-size:13px; color:#bac8d6; background:#0a1320; border:1px solid var(--line); border-radius:5px; padding:6px 10px; }
.nf-opt:hover{ border-color:var(--cyan); }
.nf-opt input{ margin-top:3px; accent-color:var(--phosphor); }
.nf-num{ width:80px !important; display:inline-block; }
.nf-exbtns{ margin-top:8px; }
.nf-fb{ font-family:var(--sans); font-size:13px; border-left:3px solid; padding:6px 10px; border-radius:0 5px 5px 0; }
.nf-fb.ok{ border-color:var(--phosphor); background:#0b1a13; color:#bfeedd; } .nf-fb.ok > b{ color:var(--phosphor); }
.nf-fb.bad{ border-color:var(--magenta); background:#170c12; color:#f0c3d8; } .nf-fb.bad > b{ color:var(--magenta); }
.nf-why{ margin-top:5px; color:#bac8d6; } .nf-why.dim{ color:var(--muted); font-size:12px; }
.nf-why code{ font-family:var(--mono); color:var(--cyan); }
.nf-why u{ text-decoration-color:var(--phosphor); }

#nf-toast{ position:fixed; left:50%; bottom:28px; transform:translateX(-50%) translateY(20px); opacity:0; transition:.25s;
  background:#0c1622; color:#cfe; border:1px solid #1f3a55; border-radius:6px; padding:8px 14px; font-size:12px; z-index:50; pointer-events:none; }
#nf-toast.show{ opacity:1; transform:translateX(-50%) translateY(0); }

@media (max-width: 980px){
  .nf-lab{ grid-template-columns:1fr; }
  .nf-form-in{ position:static; }
  .nf-exs{ grid-template-columns:1fr; }
  .nf-k{ min-width:0; }
}
