/* Tipografías alojadas en la propia web (sin Google Fonts en tiempo de ejecución) */
@font-face { font-family: 'Bricolage Grotesque'; font-style: normal; font-weight: 600 800; font-display: swap; src: url(assets/fonts/bricolage-grotesque-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Bricolage Grotesque'; font-style: normal; font-weight: 600 800; font-display: swap; src: url(assets/fonts/bricolage-grotesque-latin.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Manrope'; font-style: normal; font-weight: 400 800; font-display: swap; src: url(assets/fonts/manrope-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Manrope'; font-style: normal; font-weight: 400 800; font-display: swap; src: url(assets/fonts/manrope-latin.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }

/* =============================================================
   1. Tokens
   ============================================================= */
:root {
  --bg: #f6f4ef;
  --surface: #ffffff;
  --surface-2: #f1eee7;
  --ink: #14161f;
  --ink-2: #4a4d57;
  --ink-3: #7b7e88;
  --line: #e3dfd5;
  --accent: #ef5a2f;
  --accent-ink: #ffffff;
  --accent-soft: #fde6dd;
  --ok: #1f7a4d;
  --ok-soft: #e1f3e8;
  --bad: #b3261e;
  --bad-soft: #fbe3e1;
  --warn: #8a5a00;
  --warn-soft: #fdf1d6;
  --radius: 18px;
  --radius-sm: 11px;
  --shadow: 0 1px 2px rgba(20,22,31,.04), 0 12px 40px -18px rgba(20,22,31,.22);
  --sans: "Manrope", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --display: "Bricolage Grotesque", "Manrope", system-ui, sans-serif;
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --gutter: 16px;
}

/* =============================================================
   2. Reset & base
   ============================================================= */
*, *::before, *::after { box-sizing: border-box; margin: 0; }
html { -webkit-text-size-adjust: 100%; overflow-x: clip; scroll-behavior: smooth; }
body {
  font-family: var(--sans); font-size: 16px; line-height: 1.6; color: var(--ink);
  background: var(--bg); -webkit-font-smoothing: antialiased; overflow-x: clip;
}
img, svg, video, canvas { display: block; max-width: 100%; }
button { font: inherit; color: inherit; cursor: pointer; border: 0; background: none; }
input, select, textarea { font: inherit; color: inherit; }
a { color: inherit; }
p { text-wrap: pretty; }
h1, h2, h3 { text-wrap: balance; line-height: 1.1; letter-spacing: -0.02em; }
::selection { background: var(--accent); color: var(--accent-ink); }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 6px; }
[hidden] { display: none !important; }

/* =============================================================
   3. Utilities
   ============================================================= */
.container { width: 100%; max-width: 1180px; margin-inline: auto; padding-inline: var(--gutter); }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.skip-link { position: fixed; top: -100px; left: 1rem; padding: .6rem 1rem; background: var(--ink); color: #fff; z-index: 9999; border-radius: 8px; }
.skip-link:focus { top: 1rem; }

/* =============================================================
   4. Typography
   ============================================================= */
h1 { font-family: var(--display); font-weight: 800; font-size: clamp(1.55rem, 5.6vw, 2.9rem); }
h2 { font-family: var(--display); font-weight: 800; font-size: clamp(1.4rem, 3.6vw, 2rem); margin-bottom: .9rem; }
h3 { font-size: 1.06rem; font-weight: 800; margin: 1.1rem 0 .35rem; }

/* =============================================================
   5. Components
   ============================================================= */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .45rem;
  min-height: 46px; padding: .6rem 1.1rem; border-radius: 999px; font-weight: 800; font-size: .95rem;
  transition: transform .2s var(--ease-out), background-color .2s, box-shadow .2s;
  white-space: nowrap;
}
.btn svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
.btn:active { transform: scale(.97); }
.btn-primary { background: var(--accent); color: var(--accent-ink); box-shadow: 0 8px 22px -10px rgba(239,90,47,.8); }
.btn-primary:hover { background: #dd4a20; }
.btn-ghost { background: var(--surface); border: 1.5px solid var(--ink); }
.btn-ghost:hover { background: var(--ink); color: #fff; }
.btn-soft { background: var(--surface-2); border: 1px solid var(--line); }
.btn-soft:hover { background: #e8e4da; }
.btn[disabled] { opacity: .5; pointer-events: none; }
.btn.is-done { background: var(--ok); color: #fff; }
.link-btn { color: var(--accent); font-weight: 700; text-decoration: underline; text-underline-offset: 3px; padding: 0; }

.field { display: flex; flex-direction: column; gap: .3rem; flex: 1 1 0; min-width: 0; }
.field-label { font-size: .8rem; font-weight: 700; color: var(--ink-2); }
.field input[type=text], .field input[type=url], .field input[type=tel], .field select, .field textarea {
  width: 100%; min-height: 46px; padding: .6rem .8rem; border: 1.5px solid var(--line); border-radius: var(--radius-sm);
  background: var(--surface); outline: none; transition: border-color .2s, box-shadow .2s;
}
.field textarea { resize: vertical; min-height: 80px; }
.field input:focus, .field select:focus, .field textarea:focus { border-color: var(--ink); box-shadow: 0 0 0 3px rgba(20,22,31,.08); }
.field input[type=range] { width: 100%; accent-color: var(--accent); min-height: 30px; }
.row { display: flex; gap: .7rem; flex-wrap: wrap; }
.row > .field { min-width: 140px; }
.row-tight { align-items: flex-end; }
.field-cc { flex: 0 0 132px; min-width: 120px !important; }
.check { display: inline-flex; align-items: center; gap: .4rem; font-size: .9rem; font-weight: 600; min-height: 46px; }
.check input { width: 18px; height: 18px; accent-color: var(--accent); }
.hint { font-size: .8rem; color: var(--ink-3); line-height: 1.45; }
.hint:empty { display: none; }

.chips { display: flex; gap: .4rem; flex-wrap: wrap; margin-top: .55rem; }
.chip { font-size: .8rem; font-weight: 700; padding: .35rem .7rem; border-radius: 999px; background: var(--surface-2); border: 1px solid var(--line); }
.chip:hover { border-color: var(--ink); }

.badge { display: inline-block; vertical-align: middle; font-family: var(--sans); font-size: .7rem; font-weight: 800; letter-spacing: .02em; padding: .2rem .55rem; border-radius: 999px; background: var(--accent-soft); color: #a8371a; margin-left: .3rem; }

/* =============================================================
   6. Sections
   ============================================================= */
.site-header { position: sticky; top: 0; z-index: 50; background: rgba(246,244,239,.92); border-bottom: 1px solid var(--line); }
@supports (backdrop-filter: blur(10px)) { .site-header { background: rgba(246,244,239,.75); backdrop-filter: blur(10px) saturate(160%); -webkit-backdrop-filter: blur(10px) saturate(160%); } }
.header-inner { display: flex; align-items: center; justify-content: space-between; height: 54px; }
.brand { display: flex; align-items: center; gap: .55rem; text-decoration: none; font-family: var(--display); font-weight: 800; font-size: 1.08rem; }
.brand small { font-family: var(--sans); font-weight: 600; font-size: .72rem; color: var(--ink-3); margin-left: .15rem; }
.brand-mark { width: 26px; height: 26px; fill: var(--ink); }
.brand-mark rect:last-child { fill: var(--accent); }
.header-nav { display: none; gap: 1.3rem; font-size: .9rem; font-weight: 700; }
.header-nav a { text-decoration: none; color: var(--ink-2); }
.header-nav a:hover { color: var(--ink); }

.hero { padding-top: .9rem; padding-bottom: .7rem; }
.hero h1 { max-width: 22ch; }
.hero-sub { margin-top: .4rem; color: var(--ink-2); font-size: .92rem; max-width: 62ch; line-height: 1.45; }

/* --- Tool card --- */
.tool-wrap { padding-bottom: 1rem; }
.tool-card {
  display: grid; gap: 0; background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius);
  box-shadow: var(--shadow); overflow: clip;
  grid-template-areas: "content" "preview" "design" "three";
}
.panel { padding: 14px; min-width: 0; }
.panel + .panel { border-top: 1px solid var(--line); }
.panel-content { grid-area: content; }
.panel-preview { grid-area: preview; background: var(--surface-2); border-top: 1px solid var(--line); }
.panel-design { grid-area: design; }
.panel-3d { grid-area: three; }
.panel-title { font-family: var(--sans); font-size: 1rem; font-weight: 800; letter-spacing: -0.01em; margin-bottom: .7rem; }
.noscript-note { padding: 1rem; background: var(--warn-soft); color: var(--warn); font-weight: 700; }

.tabs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px; padding: 4px; background: var(--surface-2); border-radius: 13px; margin-bottom: .7rem; }
.tab { white-space: nowrap; padding: 0 .35rem; display: flex; align-items: center; justify-content: center; gap: .3rem; min-height: 40px; border-radius: 10px; font-size: .82rem; font-weight: 800; color: var(--ink-2); }
.tab svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; flex: none; }
.tab.is-active { background: var(--surface); color: var(--ink); box-shadow: 0 1px 3px rgba(20,22,31,.12); }
.mode-pane { display: flex; flex-direction: column; gap: .6rem; }

.qr-stage { display: grid; place-items: center; }
.qr-holder {
  width: min(232px, 60vw); aspect-ratio: 1; border-radius: 14px; overflow: hidden; background: #fff;
  box-shadow: 0 1px 2px rgba(0,0,0,.05), 0 10px 30px -14px rgba(20,22,31,.35);
}
.qr-holder canvas, .qr-holder svg { width: 100% !important; height: 100% !important; }
.qr-empty { font-size: .9rem; color: var(--ink-3); padding: 2rem 0; }
.dl-row { display: flex; gap: .5rem; align-items: center; justify-content: center; flex-wrap: wrap; margin-top: .75rem; }
.size-pick select { min-height: 46px; border-radius: 999px; border: 1.5px solid var(--line); background: var(--surface); padding: 0 .7rem; font-weight: 700; font-size: .85rem; }
.privacy-badge { margin-top: .6rem; text-align: center; font-size: .8rem; font-weight: 700; color: var(--ok); }

.style-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: .45rem; }
.style-opt { display: flex; flex-direction: column; align-items: center; gap: .3rem; padding: .5rem .2rem; border-radius: 12px; border: 1.5px solid var(--line); font-size: .76rem; font-weight: 800; }
.style-opt.is-active { border-color: var(--ink); background: var(--surface-2); }
.sw { width: 30px; height: 30px; display: block;
  background-size: 10px 10px; }
.sw-clasico { background-image: linear-gradient(var(--ink), var(--ink)); background-size: 8px 8px; background-repeat: repeat; -webkit-mask: repeating-conic-gradient(#000 0 25%, transparent 0 50%) 0 0/20px 20px; mask: repeating-conic-gradient(#000 0 25%, transparent 0 50%) 0 0/20px 20px; }
.sw-redondeado { background: radial-gradient(circle at 50% 50%, var(--ink) 62%, transparent 64%) 0 0/10px 10px; border-radius: 6px; }
.sw-puntos { background: radial-gradient(circle, var(--ink) 38%, transparent 41%) 0 0/10px 10px; }
.sw-elegante { background: radial-gradient(circle at 0 0, var(--ink) 70%, transparent 72%) 0 0/10px 10px; }
.row-colors { margin-top: .75rem; }
.color-field { display: flex; align-items: center; gap: .45rem; font-size: .82rem; font-weight: 700; padding: .3rem .6rem .3rem .3rem; border: 1px solid var(--line); border-radius: 999px; }
.color-field input, .fil-field input[type=color] { width: 34px; height: 34px; border: 0; padding: 0; background: none; border-radius: 50%; cursor: pointer; }
.color-field input::-webkit-color-swatch-wrapper, .fil-field input::-webkit-color-swatch-wrapper { padding: 0; }
.color-field input::-webkit-color-swatch, .fil-field input::-webkit-color-swatch { border-radius: 50%; border: 1px solid rgba(0,0,0,.15); }

.warn, .checks li { font-size: .82rem; font-weight: 700; line-height: 1.4; border-radius: 10px; padding: .45rem .65rem; }
.warn { margin-top: .6rem; background: var(--bad-soft); color: var(--bad); }

.center-pick { margin-top: .9rem; display: flex; flex-direction: column; gap: .45rem; }
.emoji-row { display: flex; gap: .3rem; flex-wrap: wrap; }
.emoji { width: 40px; height: 40px; border-radius: 10px; border: 1.5px solid var(--line); font-size: 1.25rem; line-height: 1; }
.emoji.is-active { border-color: var(--accent); background: var(--accent-soft); }
.emoji-custom { width: 64px; height: 40px; border: 1.5px dashed var(--line); border-radius: 10px; text-align: center; background: var(--surface); }
.logo-row { display: flex; align-items: center; gap: .6rem; flex-wrap: wrap; }
.btn-file { min-height: 40px; font-size: .85rem; }

/* --- 3D panel --- */
.p3d-grid { display: grid; gap: 1rem; }
.p3d-controls { display: flex; flex-direction: column; gap: .8rem; min-width: 0; }
.format-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: .45rem; }
.fmt { display: flex; flex-direction: column; align-items: center; text-align: center; gap: .15rem; padding: .55rem .3rem; border-radius: 13px; border: 1.5px solid var(--line); }
.fmt svg { width: 42px; height: 28px; fill: var(--surface-2); stroke: var(--ink); stroke-width: 2; stroke-linejoin: round; }
.fmt b { font-size: .8rem; line-height: 1.2; }
.fmt small { font-size: .7rem; color: var(--ink-3); font-weight: 600; }
.fmt.is-active { border-color: var(--accent); background: var(--accent-soft); }
.fmt.is-active svg { fill: #fff; }
.fil-field { display: flex; flex-direction: column; gap: .35rem; flex: 1 1 220px; }
.fil-row { display: flex; gap: .3rem; flex-wrap: wrap; }
.fil { width: 28px; height: 28px; border-radius: 50%; border: 1px solid rgba(0,0,0,.18); position: relative; }
.fil.is-active::after { content: ""; position: absolute; inset: -4px; border-radius: 50%; border: 2px solid var(--accent); }
.fil-field input[type=color] { width: 28px; height: 28px; }
.fil-field { flex-direction: column; }
.fil-field .fil-row { align-items: center; }
.checks { list-style: none; padding: 0; display: flex; flex-direction: column; gap: .35rem; }
.checks li.ok { background: var(--ok-soft); color: var(--ok); }
.checks li.warn-i { background: var(--warn-soft); color: var(--warn); }
.checks li.bad { background: var(--bad-soft); color: var(--bad); }

.viewer { position: relative; aspect-ratio: 4 / 3; border-radius: 16px; overflow: hidden;
  background: radial-gradient(120% 90% at 50% 10%, #ffffff 0%, #ebe7de 70%, #e1dccf 100%); border: 1px solid var(--line); }
.viewer > div { position: absolute; inset: 0; display: none; }
.viewer-idle, .viewer-loading, .viewer-error { flex-direction: column; align-items: center; justify-content: center; gap: .6rem; padding: 1rem; text-align: center; }
.viewer-idle svg { width: 54px; height: 54px; fill: none; stroke: var(--ink); stroke-width: 2.2; stroke-linejoin: round; }
.viewer-idle p, .viewer-loading p { font-weight: 700; font-size: .92rem; max-width: 30ch; }
.viewer-idle small, .viewer-loading small { color: var(--ink-3); font-size: .76rem; }
.viewer[data-v="idle"] .viewer-idle,
.viewer[data-v="loading"] .viewer-loading,
.viewer[data-v="error"] .viewer-error { display: flex; }
.viewer[data-v="ready"] .viewer-canvas { display: block; }
.viewer[data-v="ready"] .viewer-tools { display: flex; }
.viewer-canvas canvas { width: 100% !important; height: 100% !important; touch-action: none; }
.viewer-tools { inset: auto 8px 8px auto !important; gap: .35rem; }
.vt { font-size: .72rem; font-weight: 800; padding: .35rem .6rem; border-radius: 999px; background: rgba(255,255,255,.9); border: 1px solid var(--line); }
.progress { width: min(260px, 80%); height: 8px; border-radius: 99px; background: rgba(20,22,31,.1); overflow: hidden; }
.progress span { display: block; height: 100%; width: 0; background: var(--accent); transition: width .2s; }
.viewer-error p { color: var(--bad); font-weight: 700; }
.p3d-viewer .hint { margin-top: .6rem; }

.limits { margin-top: .7rem; font-size: .78rem; color: var(--ink-3); line-height: 1.5; }

/* --- Ad slots (placeholders vacíos) --- */
.ad-slot { display: grid; place-items: center; border: 1.5px dashed #c9c3b5; border-radius: 12px; background: repeating-linear-gradient(-45deg, transparent 0 10px, rgba(20,22,31,.025) 10px 20px); color: #a39d8f; }
.ad-slot > span { font-size: .72rem; font-weight: 800; letter-spacing: .18em; }
.ad-leaderboard { min-height: 100px; margin: 1rem 0; }
.ad-incontent { min-height: 250px; margin: 1.5rem 0; }
.ad-popup { min-height: 250px; width: 100%; margin: .8rem 0; }
.ad-corner { min-height: 90px; }

.ad-dialog { border: 0; border-radius: 20px; padding: 1.1rem; width: min(380px, calc(100vw - 32px)); box-shadow: 0 30px 80px -20px rgba(0,0,0,.45); text-align: center; position: fixed; inset: 0; margin: auto; height: fit-content; }
.ad-dialog::backdrop { background: rgba(20,22,31,.5); }
.ad-dialog-title { font-weight: 800; padding-right: 1.5rem; }
.ad-dialog .btn { width: 100%; }
.ad-close { position: absolute; top: 8px; right: 8px; width: 36px; height: 36px; border-radius: 50%; font-size: 1.4rem; line-height: 1; background: var(--surface-2); z-index: 2; }
.ad-close:hover { background: var(--line); }
.ad-toast { position: fixed; right: 12px; bottom: 12px; z-index: 60; width: min(300px, calc(100vw - 24px)); background: var(--surface); border: 1px solid var(--line); border-radius: 16px; padding: .6rem; box-shadow: var(--shadow); animation: toastIn .4s var(--ease-out); }
.ad-toast .ad-close { top: -10px; right: -8px; width: 30px; height: 30px; font-size: 1.1rem; box-shadow: 0 2px 6px rgba(0,0,0,.15); background: var(--surface); }
@keyframes toastIn { from { opacity: 0; transform: translateY(16px); } }

/* --- Content sections --- */
.section { padding-block: 1.6rem; }
.steps { list-style: none; padding: 0; display: grid; gap: .8rem; }
.steps li { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 1.1rem; }
.steps svg { width: 34px; height: 34px; padding: 6px; border-radius: 10px; background: var(--accent-soft); fill: none; stroke: #a8371a; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.steps h3 { margin-top: .7rem; }
.steps p { color: var(--ink-2); font-size: .94rem; }
.ideas { display: grid; gap: .8rem; }
.idea { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 1.1rem; }
.idea-ico { font-size: 1.6rem; }
.idea h3 { margin-top: .4rem; }
.idea p { color: var(--ink-2); font-size: .94rem; }
.seo-text { max-width: 820px; }
.seo-text p { color: var(--ink-2); margin-bottom: .6rem; }
.faq { display: flex; flex-direction: column; gap: .5rem; max-width: 820px; }
.faq details { background: var(--surface); border: 1px solid var(--line); border-radius: 14px; padding: .2rem 1rem; }
.faq summary { cursor: pointer; font-weight: 800; padding: .75rem 0; list-style: none; display: flex; justify-content: space-between; gap: 1rem; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: "+"; font-size: 1.3rem; line-height: 1; color: var(--accent); }
.faq details[open] summary::after { content: "–"; }
.faq details p { padding-bottom: .9rem; color: var(--ink-2); }
.tool-links { display: grid; gap: .6rem; }
.tool-link { display: flex; justify-content: space-between; align-items: center; padding: .9rem 1rem; background: var(--surface); border: 1px solid var(--line); border-radius: 14px; font-weight: 800; text-decoration: none; }
.tool-link small { font-weight: 700; color: var(--ink-3); }
.tool-link.is-soon { pointer-events: none; opacity: .75; }

.site-footer { margin-top: 2rem; border-top: 1px solid var(--line); padding-block: 1.4rem 4.5rem; font-size: .85rem; color: var(--ink-3); }
.footer-inner { display: flex; flex-direction: column; gap: .6rem; }
.footer-inner nav { display: flex; gap: 1rem; }

/* legal pages */
.legal { max-width: 760px; padding-block: 2rem; }
.legal h1 { margin-bottom: 1rem; }
.legal h2 { font-size: 1.2rem; margin-top: 1.4rem; }
.legal p, .legal li { color: var(--ink-2); margin-bottom: .5rem; }
.todo { background: var(--warn-soft); color: var(--warn); padding: .1rem .35rem; border-radius: 6px; font-weight: 700; }

/* =============================================================
   8. Responsive (mobile-first)
   ============================================================= */
@media (min-width: 540px) {
  :root { --gutter: 22px; }
  .panel { padding: 18px; }
  .qr-holder { width: 250px; }
  .steps, .ideas { grid-template-columns: 1fr 1fr; }
  .tool-links { grid-template-columns: repeat(3, 1fr); }
}
@media (min-width: 720px) {
  .header-nav { display: flex; }
  .hero { padding-top: 1.4rem; }
  .hero-sub { font-size: 1.02rem; }
  .footer-inner { flex-direction: row; justify-content: space-between; }
}
@media (min-width: 960px) {
  .tool-card {
    grid-template-columns: minmax(0, 1fr) 380px;
    grid-template-areas: "content preview" "design preview" "three three";
  }
  .panel-preview { border-top: 0; border-left: 1px solid var(--line); display: flex; flex-direction: column; justify-content: center; }
  .panel-design { border-top: 1px solid var(--line); }
  .panel-3d { border-top: 1px solid var(--line); }
  .panel { padding: 22px; }
  .qr-holder { width: 290px; }
  .p3d-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: 1.4rem; align-items: start; }
  .steps { grid-template-columns: repeat(3, 1fr); }
  .ideas { grid-template-columns: repeat(3, 1fr); }
}
@media (min-width: 1280px) {
  .qr-holder { width: 300px; }
}

/* =============================================================
   9. Reduced motion (solo lo intrusivo)
   ============================================================= */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}

/* Selector de color libre junto a las muestras de filamento: anillo arcoíris = "otro color" */
.fil-row input[type="color"] { width: 30px; height: 30px; padding: 3px; border: 0; border-radius: 50%; cursor: pointer; background: conic-gradient(#e74c3c, #f1c40f, #2ecc71, #3498db, #9b59b6, #e74c3c); -webkit-appearance: none; appearance: none; }
.fil-row input[type="color"]::-webkit-color-swatch-wrapper { padding: 0; }
.fil-row input[type="color"]::-webkit-color-swatch { border: 2px solid #fff; border-radius: 50%; }
.fil-row input[type="color"]::-moz-color-swatch { border: 2px solid #fff; border-radius: 50%; }
@media (max-width: 400px) { .tab { font-size: .76rem; gap: .2rem; } .tab svg { width: 14px; height: 14px; } }
