/* ==========================================================================
   Keyring Manager — tokens
   Paleta: grafito oscuro (banco de trabajo) + ámbar filamento como acento,
   con una variante clara equivalente. El tema activo se elige con
   [data-theme="dark"|"light"] en <html> (ver el botón .theme-toggle y
   app.js) y se recuerda entre visitas.
   Tipografía: Rammetto One (títulos, auto-hospedada) + Space Grotesk de
   respaldo, Inter (texto), IBM Plex Mono (medidas).
   ========================================================================== */
/* Rammetto One se auto-hospeda (archivo local, no Google Fonts): es la
   fuente de títulos/botones, así que no puede depender de tener
   internet en el momento de abrir la app -algo que, en la versión de
   escritorio, no está garantizado-. Las demás (Space Grotesk, Inter,
   IBM Plex Mono) son de menor peso visual y se dejan en Google Fonts
   como estaban; si alguna vez da problemas, mismo tratamiento. */
@font-face {
  font-family: 'Rammetto One';
  src: url('assets/fonts/rammetto-one.ttf') format('truetype');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

:root, [data-theme="dark"]{
  color-scheme: dark;
  --bg: #15171b;
  --bg-panel: #1c1f24;
  --bg-panel-raised: #22262c;
  --bg-input: #14161a;
  --bg-topbar: rgba(21,23,27,0.9);
  --bg-wash: rgba(232,52,40,0.06);
  --line: #2b2f36;
  --line-soft: #23262c;
  --text: #e9e7e2;
  --text-dim: #9297a1;
  --text-faint: #5c616b;
  --accent: #e6392c;
  --accent-dim: #b82a20;
  --accent-soft: rgba(230,57,44,0.12);
  --accent-text-on: #1a1408;
  --swatch-border: rgba(255,255,255,0.15);
  --teal: #4fb8a5;
  --ok: #5cba7d;
  --err: #e2574c;
  --radius: 10px;
  --radius-sm: 6px;
  --font-display: 'Rammetto One', 'Space Grotesk', Georgia, serif;
  --font-body: 'Inter', system-ui, sans-serif;
  --font-mono: 'IBM Plex Mono', ui-monospace, monospace;
}

[data-theme="light"]{
  color-scheme: light;
  --bg: #f3f1ec;
  --bg-panel: #ffffff;
  --bg-panel-raised: #faf9f6;
  --bg-input: #ffffff;
  --bg-topbar: rgba(255,255,255,0.88);
  --bg-wash: rgba(201,41,29,0.07);
  --line: #ddd8cf;
  --line-soft: #e8e4dc;
  --text: #211f1a;
  --text-dim: #6b665c;
  --text-faint: #9b958a;
  --accent: #c9291d;
  --accent-dim: #9e2117;
  --accent-soft: rgba(201,41,29,0.10);
  --accent-text-on: #1a1408;
  --swatch-border: rgba(0,0,0,0.15);
  --teal: #2f8f7e;
  --ok: #2f8f52;
  --err: #c93f34;
}

*{ box-sizing: border-box; }
body{
  margin:0;
  background:
    radial-gradient(1200px 600px at 15% -10%, var(--bg-wash), transparent 60%),
    var(--bg);
  color:var(--text);
  font-family:var(--font-body);
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  transition:background-color .2s ease, color .2s ease;
}

a{ color:var(--accent); }

/* ============================== TOPBAR ============================== */
.topbar{
  border-bottom:1px solid var(--line);
  background:var(--bg-topbar);
  backdrop-filter:blur(6px);
  position:sticky; top:0; z-index:20;
}
.topbar-inner{
  max-width:1180px; margin:0 auto;
  padding:16px 24px;
  display:flex; align-items:baseline; gap:16px; flex-wrap:wrap;
}
.brand{ display:flex; align-items:center; gap:10px; align-self:center; }
.brand-logo{ display:block; height:44px; width:auto; }
.topbar-tag{
  margin:0; color:var(--text-dim); font-size:0.86rem;
  font-family:var(--font-mono);
}

.theme-toggle{
  appearance:none; border:1px solid var(--line); background:var(--bg-panel);
  color:var(--text-dim); width:30px; height:30px; border-radius:50%;
  display:flex; align-items:center; justify-content:center; flex:none;
  cursor:pointer; padding:0; margin-left:auto; align-self:center;
  transition:color .15s ease, border-color .15s ease, background-color .15s ease;
}
.theme-toggle:hover{ color:var(--accent); border-color:var(--accent-dim); }
.theme-toggle svg{ width:16px; height:16px; fill:none; stroke:currentColor; stroke-width:1.6; }
.theme-toggle .icon-sun circle{ fill:currentColor; stroke:none; }
.theme-toggle .icon-moon{ fill:currentColor; stroke:none; }
/* En oscuro se ofrece pasar a claro (ícono de sol); en claro, lo
   inverso (ícono de luna). Se togglea con [data-theme] en <html>. */
[data-theme="dark"] .theme-toggle .icon-moon{ display:none; }
[data-theme="light"] .theme-toggle .icon-sun{ display:none; }

/* ============================== LAYOUT ============================== */
.layout{
  max-width:1520px; margin:0 auto;
  padding:28px 24px 60px;
  display:grid;
  grid-template-columns: 380px 1fr 340px;
  gap:24px;
  align-items:start;
}
@media (max-width: 1180px){
  /* Sin espacio para 3 columnas cómodas: colores pasa abajo de la
     vista previa (2 columnas), en vez de apretar todo en una fila. */
  .layout{ grid-template-columns: 380px 1fr; max-width:900px; }
  .colors-panel{ grid-column: 2; }
}
@media (max-width: 880px){
  .layout{ grid-template-columns: 1fr; max-width:600px; }
  .colors-panel{ grid-column: 1; }
}

/* ============================== INDICADOR DE PASOS ============================== */
.steps-bar{
  grid-column: 1 / -1;
  display:flex; align-items:center; gap:10px;
  flex-wrap:wrap;
  margin-bottom:4px;
}
.step{
  display:flex; align-items:center; gap:8px;
  padding:6px 12px 6px 6px;
  border-radius:999px;
  border:1px solid var(--line);
  background:var(--bg-panel);
  transition:border-color .15s ease, background .15s ease;
}
.step-num{
  width:22px; height:22px; flex:none;
  border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  font-family:var(--font-mono); font-size:0.76rem; font-weight:600;
  background:var(--bg-panel-raised); color:var(--text-faint);
  border:1px solid var(--line);
}
.step-label{ font-size:0.82rem; color:var(--text-faint); white-space:nowrap; }
.step-arrow{ color:var(--text-faint); font-size:0.9rem; flex:none; }

.step.completado{ border-color:rgba(92,186,125,0.35); background:rgba(92,186,125,0.08); }
.step.completado .step-num{ background:var(--ok); border-color:var(--ok); color:#0d1a12; }
.step.completado .step-label{ color:var(--text-dim); }

.step.actual{ border-color:var(--accent); background:var(--accent-soft); }
.step.actual .step-num{ background:var(--accent); border-color:var(--accent); color:#1a1408; }
.step.actual .step-label{ color:var(--text); font-weight:600; }

@media (max-width: 880px){
  .steps-bar{ gap:6px; }
  .step-label{ display:none; } /* en mobile, solo los números — el texto sobra de ancho */
  .step.actual .step-label{ display:inline; } /* excepto el paso actual, para dar contexto */
}

.panel{
  background:var(--bg-panel);
  border:1px solid var(--line);
  border-radius:var(--radius);
  padding:22px;
}

/* ============================== CONTROLES ============================== */
.field-group{
  margin-bottom:20px;
  padding-bottom:18px;
  border-bottom:1px solid var(--line-soft);
}
.field-group:last-of-type{ border-bottom:none; }

.field-label{
  display:block; font-weight:600; font-size:0.82rem;
  text-transform:uppercase; letter-spacing:0.06em;
  color:var(--text-dim); margin-bottom:10px;
}

.row{ display:flex; gap:10px; align-items:center; margin-bottom:10px; }
.row[hidden]{ display:none; }
.row.pills-wrap{ flex-wrap:wrap; }
.row.pills-wrap .radio-pill{ flex:none; }
.row:last-child{ margin-bottom:0; }
.row.two-col{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }

.mini-field{ display:block; margin-bottom:12px; }
.mini-field[hidden]{ display:none; }
.mini-field:last-child{ margin-bottom:0; }
.mini-field > span{
  display:block; font-size:0.82rem; color:var(--text-dim); margin-bottom:6px;
}

.input-num, .input-select{
  background:var(--bg-input);
  border:1px solid var(--line);
  color:var(--text);
  font-family:var(--font-mono);
  font-size:0.92rem;
  border-radius:var(--radius-sm);
  padding:8px 10px;
  width:100%;
  transition:border-color .12s ease;
}
.input-num:focus, .input-select:focus{
  outline:none; border-color:var(--accent);
}
.unit{ color:var(--text-faint); font-family:var(--font-mono); font-size:0.82rem; flex:none; }

.radio-pill{
  flex:1; display:flex; align-items:center; justify-content:center;
  gap:6px; padding:8px 10px;
  border:1px solid var(--line); border-radius:999px;
  cursor:pointer; font-size:0.84rem; color:var(--text-dim);
  transition:border-color .12s ease, color .12s ease, background .12s ease;
}
.radio-pill input{ position:absolute; opacity:0; pointer-events:none; }
.radio-pill:has(input:checked){
  border-color:var(--accent); color:var(--text); background:var(--accent-soft);
}
.preset-slot-vacio{ border-style:dashed; opacity:0.7; background:transparent; }
.preset-slot-vacio:hover{ opacity:1; border-color:var(--accent); }

.checkbox-field{
  display:flex; align-items:flex-start; gap:10px;
  font-size:0.9rem; color:var(--text); cursor:pointer;
  margin-bottom:10px;
}
.checkbox-field:last-child{ margin-bottom:0; }
.checkbox-field input{
  margin-top:3px; width:16px; height:16px; flex:none; accent-color:var(--accent);
}
.checkbox-field.standalone{
  padding-bottom:18px; margin-bottom:20px; border-bottom:1px solid var(--line-soft);
}

.sub-options{
  margin-top:12px; padding:14px;
  background:var(--bg-panel-raised);
  border:1px solid var(--line-soft);
  border-radius:var(--radius-sm);
}
.hint-text{
  margin:0 0 12px; font-size:0.82rem; color:var(--text-dim);
}
.hint-text.warn{ color:var(--accent); }

.upload-group{ margin-bottom:22px; }
.dropzone{
  border:1.5px dashed var(--line);
  border-radius:var(--radius);
  padding:26px 16px;
  text-align:center;
  cursor:pointer;
  transition:border-color .15s ease, background .15s ease;
}
.dropzone:hover, .dropzone.dragover{
  border-color:var(--accent);
  background:var(--accent-soft);
}
.dropzone-icon{ width:28px; height:28px; color:var(--text-faint); margin-bottom:10px; }
.dropzone-icon.ok{ color:var(--ok); }
.dropzone p{ margin:0; color:var(--text-dim); font-size:0.88rem; }
.dropzone strong{ color:var(--text); }
.filename{
  font-family:var(--font-mono); color:var(--text) !important;
  word-break:break-all; margin-bottom:8px !important;
}
.link-button{
  background:none; border:none; color:var(--accent);
  font-size:0.82rem; cursor:pointer; padding:0; text-decoration:underline;
}

.actions{ display:flex; gap:10px; }
.actions[hidden]{ display:none; }
.actions-sticky{
  position:sticky; top:76px; z-index:10;
  margin:-4px -4px 18px; padding:10px;
  background:var(--bg-panel);
  border-bottom:1px solid var(--line-soft);
}
@media (max-width: 880px){
  .actions-sticky{ position:static; margin:0 0 18px; padding:0; border-bottom:none; }
}
.btn{
  flex:1; padding:12px 16px;
  border-radius:var(--radius-sm); border:1px solid transparent;
  font-family:var(--font-display); font-weight:600; font-size:0.92rem;
  cursor:pointer; transition:filter .12s ease, opacity .12s ease;
  display:flex; align-items:center; justify-content:center; gap:8px;
}
.btn[hidden]{ display:none; }
.btn:disabled{ opacity:0.45; cursor:not-allowed; }
.btn-secondary{
  background:transparent; border-color:var(--line); color:var(--text);
}
.btn-secondary:hover:not(:disabled){ border-color:var(--text-dim); }
.btn-primary{
  background:var(--accent); color:#1a1408;
}
.btn-primary:hover:not(:disabled){ filter:brightness(1.08); }
.btn-spinner{
  width:14px; height:14px; border-radius:50%;
  border:2px solid rgba(0,0,0,0.25); border-top-color:#1a1408;
  animation:spin .7s linear infinite;
}
@keyframes spin{ to{ transform:rotate(360deg); } }

/* ============================== VISTA PREVIA ============================== */
.preview{
  min-height:520px; display:flex; flex-direction:column; gap:18px;
  position:sticky; top:88px;
  max-height:calc(100vh - 108px);
  overflow-y:auto;
  /* que la barra de scroll propia (si aparece) no se coma el padding del panel */
  scrollbar-gutter:stable;
}
@media (max-width: 880px){
  /* en una sola columna no tiene sentido "pegar" la vista previa: el
     usuario ya scrollea todo en orden, arriba->abajo, una vez */
  .preview{ position:static; max-height:none; overflow-y:visible; }
}

/* Panel de colores: columna propia, NO pegajosa a propósito -es una
   lista que puede ser larga (muchos colores), y así no compite por
   el mismo espacio de pantalla que la vista previa pegajosa; fluye
   con el resto de la página. */
.colors-panel{ min-height:200px; }
.colors-panel .field-group{ margin-bottom:0; padding-bottom:0; border-bottom:none; }
#grupo-grosor-niveles{
  margin-bottom:20px; padding-bottom:18px; border-bottom:1px solid var(--line-soft);
}
#colores-placeholder{ text-align:center; color:var(--text-faint); margin:40px 0; }
.lote-nav{
  display:flex; align-items:center; justify-content:space-between;
  gap:10px; padding:8px 6px;
}
.lote-nav[hidden]{ display:none; }
.lote-nav-btn{
  flex:none; width:32px; height:32px; border-radius:50%;
  background:var(--bg-panel-raised); border:1px solid var(--line);
  color:var(--text); font-size:1.1rem; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
}
.lote-nav-btn:hover:not(:disabled){ border-color:var(--accent); }
.lote-nav-btn:disabled{ opacity:0.35; cursor:not-allowed; }
.lote-nav-info{ text-align:center; min-width:0; }
.lote-nav-info span{ display:block; }
#lote-nav-contador{ font-family:var(--font-mono); font-size:0.78rem; color:var(--text-faint); }
.lote-nav-nombre{
  font-size:0.9rem; color:var(--text); font-weight:600;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:280px;
}

.preview-stage{
  background:
    linear-gradient(var(--line-soft) 1px, transparent 1px) 0 0/24px 24px,
    linear-gradient(90deg, var(--line-soft) 1px, transparent 1px) 0 0/24px 24px,
    var(--bg-input);
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  aspect-ratio:1/1;
  display:flex; align-items:center; justify-content:center;
  padding:20px;
  position:relative;
}
.preview-stage.argolla-draggable #preview-svg{ cursor:grab; }
.preview-stage.argolla-arrastrando #preview-svg{ cursor:grabbing; }
#argolla-handle{ touch-action:none; }
.preview-placeholder{
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
  text-align:center; color:var(--text-faint);
  max-width:340px; width:calc(100% - 40px);
}
.preview-placeholder svg{
  width:56px; height:56px; margin-bottom:14px;
  fill:none; stroke:var(--text-faint); stroke-width:1.4;
}
.preview-placeholder p{ font-size:0.88rem; margin:0; text-wrap:balance; }
.preview-placeholder strong{ color:var(--text-dim); }
.preview-placeholder .error-item strong{ color:var(--err); }
#preview-svg{ width:100%; height:100%; touch-action:none; }

.preview-view-toggle{
  position:absolute; top:10px; right:10px; z-index:5;
  display:flex; gap:2px;
  background:var(--bg-panel); border:1px solid var(--line); border-radius:var(--radius-sm);
  padding:2px;
}
.btn-actualizar-previa{
  position:absolute; top:10px; left:10px; z-index:5;
  appearance:none; cursor:pointer; font-family:var(--font-mono); font-size:0.76rem; font-weight:500;
  background:var(--bg-panel); border:1px solid var(--line); border-radius:var(--radius-sm);
  color:var(--text-dim); padding:5px 10px;
  transition:background-color .15s ease, color .15s ease;
}
.btn-actualizar-previa:hover{ color:var(--text); background:var(--accent); }
.view-toggle-btn{
  appearance:none; border:none; background:transparent; color:var(--text-dim);
  font-family:var(--font-mono); font-size:0.76rem; font-weight:500;
  padding:4px 10px; border-radius:4px; cursor:pointer;
  transition:background-color .15s ease, color .15s ease;
}
.view-toggle-btn:hover{ color:var(--text); }
.view-toggle-btn.active{ background:var(--accent); color:var(--accent-text-on); }

.preview-3d{ width:100%; height:100%; touch-action:none; cursor:grab; position:relative; }
.preview-3d.arrastrando{ cursor:grabbing; }
.preview-3d canvas{ display:block; width:100%; height:100%; }
.preview-3d-hint{
  position:absolute; bottom:8px; left:50%; transform:translateX(-50%);
  font-size:0.74rem; margin:0; color:var(--text-faint);
  pointer-events:none; white-space:nowrap;
}

#preview-svg.preview-svg-mini{
  position:absolute; top:10px; left:10px; z-index:4;
  width:92px; height:92px;
  background:var(--bg-input); border:1px solid var(--line); border-radius:var(--radius-sm);
  padding:6px;
  box-shadow:0 2px 10px rgba(0,0,0,0.28);
}

.stats{
  display:grid; grid-template-columns:repeat(4,1fr); gap:1px;
  background:var(--line); border:1px solid var(--line); border-radius:var(--radius-sm);
  overflow:hidden; margin:0;
}
.stats[hidden]{ display:none; }
.stats > div{ background:var(--bg-panel-raised); padding:12px 14px; }
.stats dt{
  font-size:0.72rem; text-transform:uppercase; letter-spacing:0.05em;
  color:var(--text-faint); margin-bottom:4px;
}
.stats dd{ margin:0; font-family:var(--font-mono); font-size:0.98rem; color:var(--text); }

.warnings{
  border:1px solid rgba(230,57,44,0.35);
  background:rgba(230,57,44,0.08);
  border-radius:var(--radius-sm);
  padding:14px 16px;
}
.warnings-title{
  margin:0 0 8px; font-weight:600; font-size:0.82rem;
  color:var(--accent); text-transform:uppercase; letter-spacing:0.05em;
}
.warnings ul{ margin:0; padding-left:18px; }
.warnings li{ font-size:0.86rem; color:var(--text-dim); margin-bottom:4px; }

.status{
  border-radius:var(--radius-sm); padding:12px 14px; font-size:0.88rem;
}
.status.ok{ background:rgba(92,186,125,0.1); border:1px solid rgba(92,186,125,0.35); color:var(--ok); }
.status.err{ background:rgba(226,87,76,0.1); border:1px solid rgba(226,87,76,0.35); color:var(--err); }
.status.busy{ background:var(--bg-panel-raised); border:1px solid var(--line); color:var(--text-dim); }

.btn-analizar-abajo{ width:100%; }

/* ============================== FOOTER ============================== */
.site-footer{
  text-align:center; padding:30px 24px 40px;
  color:var(--text-faint); font-size:0.8rem;
}

/* ============================== CUENTA ============================== */
.account-area{
  margin-left:auto;
  display:flex; align-items:center; gap:12px;
  font-size:0.86rem;
}
.account-guest{ display:flex; gap:10px; }
.link-plain{
  background:none; border:none; color:var(--text-dim);
  font-family:var(--font-body); font-size:0.86rem; cursor:pointer; padding:4px 2px;
}
.link-plain:hover{ color:var(--text); }
.link-plain.destacado{ color:var(--accent); font-weight:600; }

.account-logged{ display:flex; align-items:center; gap:12px; }
.account-email{ color:var(--text-dim); font-family:var(--font-mono); font-size:0.82rem; }
.account-creditos{
  font-family:var(--font-mono); font-weight:600;
  background:var(--accent-soft); color:var(--accent);
  border:1px solid rgba(230,57,44,0.35);
  border-radius:999px; padding:4px 12px; font-size:0.82rem;
  cursor:pointer;
}

/* ============================== MODALES ============================== */
.modal-overlay{
  position:fixed; inset:0; z-index:50;
  background:rgba(10,11,13,0.7); backdrop-filter:blur(2px);
  display:flex; align-items:center; justify-content:center;
  padding:20px;
}
/* El atributo [hidden] y la clase .modal-overlay tienen la misma
   especificidad en CSS, y esta regla queda después en el archivo:
   sin esto, [hidden] pierde y el modal se ve SIEMPRE, aunque el
   atributo hidden esté puesto (justo lo que pasaba). */
.modal-overlay[hidden]{ display:none; }
.modal{
  position:relative;
  background:var(--bg-panel); border:1px solid var(--line);
  border-radius:var(--radius); padding:28px;
  width:100%; max-width:380px;
}
.modal-close{
  position:absolute; top:14px; right:16px;
  background:none; border:none; color:var(--text-faint);
  font-size:1.4rem; line-height:1; cursor:pointer;
}
.modal-close:hover{ color:var(--text); }
.modal-title{
  font-family:var(--font-display); font-size:1.1rem; margin:0 0 6px;
}
.modal-tabs{ display:flex; gap:4px; margin-bottom:20px; border-bottom:1px solid var(--line-soft); }
.modal-tab{
  flex:1; background:none; border:none; color:var(--text-faint);
  font-family:var(--font-display); font-weight:600; font-size:0.88rem;
  padding:10px 4px; cursor:pointer; border-bottom:2px solid transparent;
}
.modal-tab.active{ color:var(--text); border-bottom-color:var(--accent); }
.modal-form .mini-field{ margin-bottom:14px; }
.modal-form .btn{ width:100%; margin-top:6px; }
.modal-error{
  color:var(--err); font-size:0.84rem; margin:-4px 0 12px;
}

.paquetes-lista{ display:flex; flex-direction:column; gap:10px; margin-top:16px; }
.paquete-opcion{
  display:flex; align-items:center; justify-content:space-between;
  border:1px solid var(--line); border-radius:var(--radius-sm);
  padding:12px 14px; cursor:pointer; background:var(--bg-panel-raised);
  transition:border-color .12s ease;
}
.paquete-opcion:hover{ border-color:var(--accent); }
.paquete-creditos{ font-family:var(--font-display); font-weight:600; }
.paquete-precio{ font-family:var(--font-mono); color:var(--text-dim); font-size:0.88rem; }

.modal-ancho{ max-width:520px; }

/* ============================== COLORES DETECTADOS ============================== */
.colores-lista{ display:flex; flex-direction:column; gap:10px; }

.badge-editable{
  display:inline-block;
  font-family:var(--font-mono); font-size:0.68rem; font-weight:500;
  text-transform:none; letter-spacing:0;
  color:var(--accent); background:var(--accent-soft);
  border:1px solid rgba(230,57,44,0.35);
  border-radius:999px; padding:1px 8px;
  vertical-align:middle; margin-left:4px;
}

/* Resalte breve para que no pase desapercibido que apareció contenido
   nuevo (la sección de colores, recién habilitada tras analizar). */
@keyframes aparecer-resaltado {
  0%   { box-shadow:0 0 0 2px var(--accent); background:var(--accent-soft); }
  100% { box-shadow:0 0 0 0px transparent; background:transparent; }
}
.recien-aparecido{
  border-radius:var(--radius-sm);
  animation:aparecer-resaltado 1.8s ease-out;
}
.color-item{
  display:flex; flex-direction:column; gap:8px;
  padding:10px 12px; border:1px solid var(--line-soft); border-radius:var(--radius-sm);
  background:var(--bg-panel-raised);
}
.color-item-top{ display:flex; align-items:center; gap:10px; }
.color-swatch{
  width:20px; height:20px; border-radius:5px; flex:none;
  border:1px solid var(--swatch-border);
}
.color-item input[type="text"]{
  flex:1; min-width:0;
  background:var(--bg-input); border:1px solid var(--line); color:var(--text);
  font-family:var(--font-body); font-size:0.86rem;
  border-radius:var(--radius-sm); padding:6px 8px;
}
.color-item input[type="number"]{
  width:56px; flex:none;
  background:var(--bg-input); border:1px solid var(--line); color:var(--text);
  font-family:var(--font-mono); font-size:0.86rem;
  border-radius:var(--radius-sm); padding:6px 8px; text-align:center;
}
.color-item input::placeholder{ color:var(--text-faint); }

.nivel-badge{
  flex:none; font-family:var(--font-mono); font-size:0.74rem; font-weight:600;
  color:var(--teal); background:rgba(79,184,165,0.12);
  border:1px solid rgba(79,184,165,0.35);
  border-radius:999px; padding:3px 10px; white-space:nowrap;
}
.nivel-badge.excedido{
  color:var(--err); background:rgba(226,87,76,0.12);
  border-color:rgba(226,87,76,0.4);
}
.color-item-meta{
  display:flex; gap:14px; flex-wrap:wrap;
  font-family:var(--font-mono); font-size:0.74rem; color:var(--text-faint);
  padding-left:30px; /* alineado con el nombre, después del swatch */
}
.color-item-editar-nivel{
  display:flex; align-items:center; gap:8px;
  padding-left:30px;
  font-size:0.78rem; color:var(--text-dim);
}

/* ============================== HISTORIAL ============================== */
.historial-lista{ display:flex; flex-direction:column; gap:8px; max-height:60vh; overflow-y:auto; }
.historial-item{
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:10px 12px; border:1px solid var(--line-soft); border-radius:var(--radius-sm);
  background:var(--bg-panel-raised);
}
.historial-info{ min-width:0; }
.historial-nombre{
  font-family:var(--font-mono); font-size:0.86rem; color:var(--text);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; display:block;
}
.historial-fecha{ font-size:0.76rem; color:var(--text-faint); }
.historial-descargar{
  flex:none; background:var(--accent-soft); color:var(--accent);
  border:1px solid rgba(230,57,44,0.35); border-radius:var(--radius-sm);
  padding:6px 12px; font-size:0.82rem; font-weight:600; cursor:pointer;
  text-decoration:none;
}
.historial-vacio{ color:var(--text-faint); font-size:0.88rem; text-align:center; padding:20px 0; }

/* ============================== MODO LOTE ============================== */
#lote-resumen strong{ color:var(--text); }

/* ============================== MOBILE ============================== */
@media (max-width: 880px){
  .layout{ grid-template-columns: 1fr; padding:20px 16px 48px; gap:16px; }
  .topbar-inner{ padding:12px 16px; gap:10px; }
  .topbar-tag{ display:none; } /* sobra en pantallas chicas, compite con la cuenta */
  .account-area{ margin-left:0; width:100%; justify-content:space-between; }
  .account-logged{ width:100%; justify-content:space-between; }
  .panel{ padding:16px; }
  .preview{ min-height:auto; }
  .stats{ grid-template-columns:repeat(2,1fr); }
  .modal{ padding:20px; max-width:100%; }
  .actions{ flex-direction:column; }
  .row.two-col{ grid-template-columns:1fr; }
}
@media (max-width: 420px){
  .brand-logo{ height:34px; }
  .color-item{ flex-wrap:wrap; }
  .color-item input[type="text"]{ min-width:120px; }
}
