// ============================================================
// MOBILE — Propuesta 1 (Confianza · light · DM Sans / Be Vietnam Pro)
// 7 screens accessible via hamburger menu
// ============================================================
const { useState: useState1 } = React;

const m1Theme = `
  .m1 {
    --green: #8DC149;
    --green-dark: #6FA32E;
    --green-deep: #4A7A1A;
    --green-soft: #B5D77B;
    --forest: #0E3326;
    --forest-deep: #081E16;
    --cream: #F4F1EA;
    --paper: #FBFCFB;
    --paper-2: #F4F6F1;
    --ink: #0B1410;
    --ink-2: #3A4A40;
    --ink-3: #6D7A72;
    --ink-4: #9AA39C;
    --line: #E5E7E2;
    --line-soft: #EFF1ED;
    --hot: #C6452B;
    background: var(--paper); color: var(--ink);
    font-family: 'Be Vietnam Pro', sans-serif;
    -webkit-font-smoothing: antialiased;
    min-height: 100%;
    position: relative;
  }
  .m1 a { color: inherit; text-decoration: none; }
  .m1 button { font-family: inherit; cursor: pointer; border: 0; background: transparent; }
  .m1 * { box-sizing: border-box; }

  /* Top bar */
  .m1-top {
    display: flex; align-items: center; justify-content: space-between;
    padding: 56px 18px 12px;
    background: white; border-bottom: 1px solid var(--line);
    position: sticky; top: 0; z-index: 20;
  }
  .m1-top .ham { width: 38px; height: 38px; display: flex; align-items: center; justify-content: center; border-radius: 8px; color: var(--ink); }
  .m1-top .ham:hover, .m1-top .ham:active { background: var(--paper-2); }
  .m1-top .logo img { height: 22px; display: block; }
  .m1-top .actions { display: flex; gap: 4px; align-items: center; }
  .m1-top .icon-btn { width: 38px; height: 38px; display: flex; align-items: center; justify-content: center; color: var(--ink-2); position: relative; }
  .m1-top .icon-btn .badge { position: absolute; top: 4px; right: 4px; width: 14px; height: 14px; background: var(--green-dark); color: white; border-radius: 50%; font-size: 9px; display: flex; align-items: center; justify-content: center; font-weight: 600; }

  /* Search bar */
  .m1-search { padding: 12px 16px; background: white; border-bottom: 1px solid var(--line); }
  .m1-search .input-wrap {
    display: flex; align-items: center; gap: 10px;
    padding: 10px 14px; background: #F0F2EC; border: 1px solid var(--line);
    border-radius: 999px;
  }
  .m1-search .input-wrap svg { width: 16px; height: 16px; color: var(--ink-3); }
  .m1-search input { flex: 1; border: 0; background: transparent; outline: 0; font-size: 14px; font-family: inherit; }

  /* Sections */
  .m1-section { padding: 28px 16px; }
  .m1-section-head { display: flex; align-items: end; justify-content: space-between; margin-bottom: 18px; }
  .m1-section-head h2 { font-size: 22px; font-weight: 600; line-height: 1.1; letter-spacing: -0.02em; color: var(--forest-deep); }
  .m1-section-head .more { font-size: 12px; color: var(--green-dark); font-weight: 500; display: inline-flex; align-items: center; gap: 4px; }
  .m1-kicker { font-family: 'JetBrains Mono', monospace; font-size: 10px; text-transform: uppercase; letter-spacing: 0.15em; color: var(--green-dark); margin-bottom: 8px; display: inline-flex; align-items: center; gap: 8px; }
  .m1-kicker::before { content: ""; width: 18px; height: 1px; background: var(--green-dark); }

  /* Hero */
  .m1-hero {
    margin: 16px; border-radius: 16px;
    background: linear-gradient(135deg, #102921 0%, #0A1B16 100%);
    aspect-ratio: 4/5; position: relative; overflow: hidden;
    display: flex; align-items: center; justify-content: center;
  }
  .m1-hero::before { content: ""; position: absolute; right: -80px; bottom: -80px; width: 220px; height: 220px; background: radial-gradient(circle, rgba(141,193,73,0.22), transparent 70%); }
  .m1-hero img { width: 70%; max-height: 80%; object-fit: contain; filter: drop-shadow(0 24px 48px rgba(0,0,0,0.45)); }

  /* Categories */
  .m1-cats { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .m1-cat { background: white; border: 1px solid var(--line); border-radius: 12px; padding: 16px 12px; display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center; }
  .m1-cat .circle { width: 48px; height: 48px; border-radius: 50%; background: var(--paper-2); display: flex; align-items: center; justify-content: center; }
  .m1-cat .circle img { width: 70%; height: 70%; object-fit: contain; }
  .m1-cat h4 { font-size: 12px; font-weight: 600; color: var(--ink); }
  .m1-cat p { font-size: 10px; color: var(--ink-3); font-family: 'JetBrains Mono', monospace; }

  /* Product card mini */
  .m1-pgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .m1-pcard { background: white; border: 1px solid var(--line); border-radius: 12px; overflow: hidden; }
  .m1-pcard .img-wrap { aspect-ratio: 1; background: var(--paper-2); position: relative; display: flex; align-items: center; justify-content: center; padding: 18px; }
  .m1-pcard .img-wrap img { width: 100%; height: 100%; object-fit: contain; }
  .m1-pcard .badge { position: absolute; top: 8px; left: 8px; padding: 3px 7px; background: white; border: 1px solid var(--line); border-radius: 999px; font-size: 9px; font-weight: 600; font-family: 'JetBrains Mono', monospace; letter-spacing: 0.05em; }
  .m1-pcard .badge.sale { background: var(--hot); color: white; border-color: var(--hot); }
  .m1-pcard .badge.new { background: var(--green-dark); color: white; border-color: var(--green-dark); }
  .m1-pcard .info { padding: 12px; }
  .m1-pcard .sku { font-family: 'JetBrains Mono', monospace; font-size: 9px; color: var(--ink-3); }
  .m1-pcard h4 { font-size: 12px; font-weight: 500; line-height: 1.3; margin: 4px 0 6px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
  .m1-pcard .price { font-size: 15px; font-weight: 600; color: var(--forest-deep); }
  .m1-pcard .old { font-size: 11px; color: var(--ink-3); text-decoration: line-through; margin-left: 4px; }

  /* Trust strip */
  .m1-trust { display: grid; grid-template-columns: 1fr 1fr; gap: 0; background: var(--paper-2); margin: 0; padding: 16px; }
  .m1-trust .item { display: flex; gap: 10px; align-items: center; padding: 10px; }
  .m1-trust .ic { width: 36px; height: 36px; background: white; border-radius: 8px; display: flex; align-items: center; justify-content: center; color: var(--green-dark); flex-shrink: 0; }
  .m1-trust .ic svg { width: 18px; height: 18px; }
  .m1-trust h4 { font-size: 12px; font-weight: 600; color: var(--ink); }
  .m1-trust p { font-size: 10px; color: var(--ink-3); }

  /* CTA dark block */
  .m1-cta-block { margin: 16px; padding: 28px 22px; background: var(--forest-deep); color: white; border-radius: 16px; }
  .m1-cta-block h2 { font-size: 24px; font-weight: 600; line-height: 1.05; margin-bottom: 8px; letter-spacing: -0.02em; }
  .m1-cta-block h2 em { font-style: normal; color: var(--green); font-weight: 500; }
  .m1-cta-block p { font-size: 13px; line-height: 1.5; color: rgba(255,255,255,0.75); margin-bottom: 18px; }
  .m1-cta-block .btn-green { display: inline-flex; align-items: center; gap: 8px; padding: 11px 18px; background: var(--green-dark); color: white; border-radius: 999px; font-size: 13px; font-weight: 500; }
  .m1-cta-block .btn-green svg { width: 14px; height: 14px; }

  /* Bottom tabs */
  .m1-tabs { position: sticky; bottom: 0; background: white; border-top: 1px solid var(--line); display: grid; grid-template-columns: repeat(5, 1fr); padding: 8px 4px 18px; z-index: 30; }
  .m1-tabs button { display: flex; flex-direction: column; align-items: center; gap: 3px; padding: 6px 4px; color: var(--ink-3); font-size: 10px; font-weight: 500; }
  .m1-tabs button.active { color: var(--forest); }
  .m1-tabs button svg { width: 20px; height: 20px; }

  /* Drawer menu */
  .m1-drawer { position: absolute; inset: 0; z-index: 100; pointer-events: none; }
  .m1-drawer .backdrop { position: absolute; inset: 0; background: rgba(8,30,22,0.55); opacity: 0; transition: opacity 0.25s; }
  .m1-drawer.open { pointer-events: all; }
  .m1-drawer.open .backdrop { opacity: 1; }
  .m1-drawer .panel { position: absolute; top: 0; left: 0; bottom: 0; width: 82%; background: white; padding: 56px 0 24px; transform: translateX(-100%); transition: transform 0.3s cubic-bezier(.4,0,.2,1); display: flex; flex-direction: column; }
  .m1-drawer.open .panel { transform: translateX(0); }
  .m1-drawer .panel-head { padding: 12px 22px 18px; border-bottom: 1px solid var(--line); display: flex; justify-content: space-between; align-items: center; }
  .m1-drawer .panel-head img { height: 22px; }
  .m1-drawer .panel-head .close { width: 34px; height: 34px; display: flex; align-items: center; justify-content: center; color: var(--ink-2); font-size: 22px; }
  .m1-drawer .panel-body { flex: 1; overflow: auto; padding: 16px 0; }
  .m1-drawer .group { padding: 8px 0; }
  .m1-drawer .group-label { padding: 8px 22px; font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.15em; color: var(--ink-3); text-transform: uppercase; }
  .m1-drawer .row { display: flex; align-items: center; justify-content: space-between; padding: 13px 22px; font-size: 15px; color: var(--ink); cursor: pointer; }
  .m1-drawer .row:hover { background: var(--paper-2); }
  .m1-drawer .row.active { color: var(--forest); background: var(--paper-2); font-weight: 600; }
  .m1-drawer .row .num { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--ink-3); margin-right: 10px; }
  .m1-drawer .row .arr { color: var(--ink-3); }
  .m1-drawer .panel-foot { border-top: 1px solid var(--line); padding: 16px 22px; font-size: 12px; color: var(--ink-3); display: flex; gap: 14px; align-items: center; }
  .m1-drawer .panel-foot .wa { width: 36px; height: 36px; background: #25D366; border-radius: 50%; color: white; display: flex; align-items: center; justify-content: center; }

  /* SHOP */
  .m1-shop-head { padding: 16px; }
  .m1-shop-head h1 { font-size: 24px; font-weight: 600; letter-spacing: -0.02em; color: var(--forest-deep); line-height: 1.1; margin-bottom: 6px; }
  .m1-shop-head .meta { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--ink-3); letter-spacing: 0.05em; }
  .m1-filter-bar { display: flex; gap: 8px; padding: 4px 16px 16px; overflow-x: auto; white-space: nowrap; }
  .m1-filter-bar button { padding: 8px 14px; background: white; border: 1px solid var(--line); border-radius: 999px; font-size: 12px; font-weight: 500; color: var(--ink-2); display: inline-flex; align-items: center; gap: 6px; flex-shrink: 0; }
  .m1-filter-bar button svg { width: 12px; height: 12px; }
  .m1-filter-bar .filters { background: var(--forest); color: white; border-color: var(--forest); }

  /* Product detail */
  .m1-pdp-gallery { aspect-ratio: 1; background: var(--paper-2); padding: 56px; position: relative; }
  .m1-pdp-gallery img { width: 100%; height: 100%; object-fit: contain; }
  .m1-pdp-gallery .badge-sale { position: absolute; top: 16px; left: 16px; padding: 5px 14px; background: var(--hot); color: white; border-radius: 999px; font-size: 12px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; }
  .m1-pdp-thumbs { display: flex; gap: 8px; padding: 12px 16px; overflow-x: auto; }
  .m1-pdp-thumbs button { width: 60px; height: 60px; flex-shrink: 0; background: var(--paper-2); border: 2px solid transparent; border-radius: 10px; padding: 10px; }
  .m1-pdp-thumbs button.active { border-color: var(--green-dark); }
  .m1-pdp-info { padding: 16px; }
  .m1-pdp-info .brand-line { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--green-dark); letter-spacing: 0.12em; margin-bottom: 6px; }
  .m1-pdp-info h1 { font-size: 22px; font-weight: 600; line-height: 1.15; letter-spacing: -0.02em; color: var(--forest-deep); margin-bottom: 14px; }
  .m1-pdp-info .price-box { background: var(--paper-2); border-radius: 12px; padding: 16px 18px; margin-bottom: 14px; }
  .m1-pdp-info .price { font-size: 30px; font-weight: 700; color: var(--forest-deep); letter-spacing: -0.02em; }
  .m1-pdp-info .old { font-size: 14px; color: var(--ink-3); text-decoration: line-through; margin-left: 10px; }
  .m1-pdp-info .ofer { padding: 4px 12px; background: var(--hot); color: white; border-radius: 999px; font-size: 11px; font-weight: 700; letter-spacing: 0.05em; margin-left: 10px; text-transform: uppercase; }
  .m1-pdp-info .note { font-size: 11px; color: var(--ink-3); margin-top: 6px; }
  .m1-pdp-info .stock-line { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--green-dark); font-weight: 500; margin-bottom: 16px; }
  .m1-pdp-info .stock-line .dot { width: 7px; height: 7px; background: var(--green-dark); border-radius: 50%; }
  .m1-pdp-info .qty-row { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
  .m1-pdp-info .qty { display: inline-flex; align-items: center; border: 1px solid var(--line); border-radius: 999px; }
  .m1-pdp-info .qty button { width: 34px; height: 38px; font-size: 16px; color: var(--ink-2); }
  .m1-pdp-info .qty input { width: 36px; text-align: center; border: 0; font-size: 13px; font-weight: 600; outline: 0; }

  /* Buttons reused */
  .m1-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 13px 22px; border-radius: 999px; font-size: 14px; font-weight: 500; transition: all 0.15s; cursor: pointer; border: 0; }
  .m1-btn-primary { background: var(--forest-deep); color: white; }
  .m1-btn-green { background: var(--green-dark); color: white; }
  .m1-btn-outline { background: white; color: var(--ink); border: 1px solid var(--line); }
  .m1-btn-block { width: 100%; }
  .m1-btn svg { width: 14px; height: 14px; }

  .m1-sticky-cta { position: sticky; bottom: 0; padding: 12px 16px; background: white; border-top: 1px solid var(--line); display: flex; gap: 10px; z-index: 20; }
  .m1-sticky-cta .m1-btn { flex: 1; }

  /* Cart */
  .m1-cart-item { display: flex; gap: 12px; padding: 14px 16px; border-bottom: 1px solid var(--line); align-items: center; background: white; }
  .m1-cart-item .ph { width: 70px; height: 70px; background: var(--paper-2); border-radius: 10px; padding: 12px; flex-shrink: 0; }
  .m1-cart-item .ph img { width: 100%; height: 100%; object-fit: contain; }
  .m1-cart-item .sku { font-family: 'JetBrains Mono', monospace; font-size: 9px; color: var(--ink-3); }
  .m1-cart-item h4 { font-size: 13px; font-weight: 500; line-height: 1.25; margin: 3px 0 6px; }
  .m1-cart-item .row { display: flex; align-items: center; justify-content: space-between; }
  .m1-cart-item .row .qty { display: inline-flex; border: 1px solid var(--line); border-radius: 999px; }
  .m1-cart-item .row .qty button { width: 26px; height: 28px; color: var(--ink-2); font-size: 12px; }
  .m1-cart-item .row .qty input { width: 22px; text-align: center; border: 0; font-size: 12px; font-weight: 600; outline: 0; background: transparent; }
  .m1-cart-item .row .total { font-size: 14px; font-weight: 600; color: var(--forest-deep); }

  .m1-summary { padding: 18px 16px; background: var(--paper-2); }
  .m1-summary h3 { font-size: 14px; font-weight: 600; margin-bottom: 12px; color: var(--forest-deep); }
  .m1-summary .line { display: flex; justify-content: space-between; font-size: 13px; padding: 6px 0; }
  .m1-summary .line.muted { color: var(--ink-3); }
  .m1-summary .total { font-size: 16px; font-weight: 700; color: var(--forest-deep); padding-top: 10px; border-top: 1px solid var(--line); margin-top: 4px; }
  .m1-summary .trust { margin: 14px 0 0; padding: 12px; background: white; border-radius: 10px; font-size: 11px; color: var(--ink-2); line-height: 1.45; display: flex; gap: 8px; }
  .m1-summary .trust svg { color: var(--green-dark); width: 14px; height: 14px; flex-shrink: 0; }

  /* Checkout */
  .m1-co-steps { display: flex; gap: 4px; padding: 14px 16px; background: white; }
  .m1-co-steps .step { flex: 1; padding: 7px 8px; border-radius: 999px; font-size: 11px; font-weight: 500; color: var(--ink-3); text-align: center; background: var(--paper-2); }
  .m1-co-steps .step.active { background: var(--forest); color: white; }
  .m1-co-steps .step.done { background: rgba(141,193,73,0.18); color: var(--green-deep); }
  .m1-form-card { background: white; border: 1px solid var(--line); border-radius: 14px; padding: 18px; margin: 12px 16px; }
  .m1-form-card h3 { font-size: 15px; font-weight: 600; margin-bottom: 12px; color: var(--forest-deep); display: flex; align-items: center; gap: 10px; }
  .m1-form-card h3 .num { width: 22px; height: 22px; background: var(--green-dark); color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 11px; font-family: 'JetBrains Mono', monospace; }
  .m1-field { margin-bottom: 12px; }
  .m1-field label { font-size: 12px; font-weight: 500; color: var(--ink-2); display: block; margin-bottom: 6px; }
  .m1-field input, .m1-field select, .m1-field textarea { width: 100%; padding: 11px 13px; background: white; border: 1px solid var(--line); border-radius: 8px; font-size: 13px; outline: 0; font-family: inherit; }
  .m1-pay-options { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 14px; }
  .m1-pay-opt { padding: 12px; background: var(--paper-2); border: 2px solid var(--line); border-radius: 10px; cursor: pointer; text-align: center; }
  .m1-pay-opt.active { border-color: var(--green-dark); background: white; }
  .m1-pay-opt h4 { font-size: 12px; font-weight: 600; }
  .m1-pay-opt p { font-size: 10px; color: var(--ink-3); margin-top: 2px; }
  .m1-bank { background: var(--cream); border-radius: 10px; padding: 14px; margin-bottom: 14px; }
  .m1-bank h4 { font-size: 12px; font-weight: 600; margin-bottom: 8px; color: var(--forest-deep); }
  .m1-bank li { display: flex; justify-content: space-between; padding: 4px 0; font-size: 11px; border-bottom: 1px dotted rgba(14,51,38,0.15); }
  .m1-bank li:last-child { border-bottom: 0; }
  .m1-bank li span:first-child { color: var(--ink-3); }
  .m1-bank li span:last-child { font-family: 'JetBrains Mono', monospace; color: var(--ink); font-weight: 500; }
  .m1-upload { border: 2px dashed var(--line); border-radius: 10px; padding: 18px; text-align: center; background: var(--paper-2); }
  .m1-upload .ic { width: 40px; height: 40px; background: var(--green-dark); color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 0 auto 8px; }
  .m1-upload h4 { font-size: 13px; font-weight: 600; margin-bottom: 2px; }
  .m1-upload p { font-size: 11px; color: var(--ink-3); }

  /* Auth */
  .m1-auth-side { background: linear-gradient(140deg, #102921 0%, #0A1B16 100%); color: white; padding: 32px 20px; position: relative; }
  .m1-auth-side h2 { font-size: 24px; font-weight: 600; line-height: 1.1; letter-spacing: -0.02em; margin-bottom: 8px; max-width: 280px; }
  .m1-auth-side h2 em { font-style: normal; color: var(--green); }
  .m1-auth-side p { font-size: 12px; line-height: 1.55; color: rgba(255,255,255,0.75); max-width: 280px; }
  .m1-auth-form { padding: 24px 16px 80px; }
  .m1-auth-form .toggle { display: flex; background: var(--paper-2); padding: 4px; border-radius: 999px; width: fit-content; margin: 0 auto 18px; }
  .m1-auth-form .toggle button { padding: 8px 18px; border-radius: 999px; font-size: 12px; font-weight: 500; color: var(--ink-2); }
  .m1-auth-form .toggle button.active { background: white; color: var(--forest); }
  .m1-auth-form h1 { font-size: 22px; font-weight: 600; letter-spacing: -0.02em; color: var(--forest-deep); margin-bottom: 4px; }
  .m1-auth-form .lede { font-size: 13px; color: var(--ink-3); margin-bottom: 18px; }
  .m1-auth-form .google-btn { display: flex; align-items: center; justify-content: center; gap: 10px; padding: 11px 14px; width: 100%; background: white; border: 1px solid var(--line); border-radius: 999px; font-size: 13px; font-weight: 500; margin-bottom: 14px; }
  .m1-auth-form .google-btn svg { width: 16px; height: 16px; }
  .m1-auth-form .divider { display: flex; align-items: center; gap: 12px; margin: 12px 0 16px; font-size: 10px; color: var(--ink-3); font-family: 'JetBrains Mono', monospace; letter-spacing: 0.1em; }
  .m1-auth-form .divider::before, .m1-auth-form .divider::after { content: ""; flex: 1; height: 1px; background: var(--line); }
  .m1-auth-form .opts-row { display: flex; justify-content: space-between; font-size: 12px; margin-bottom: 16px; align-items: center; }
  .m1-auth-form .opts-row a { color: var(--green-dark); font-weight: 500; }

  /* Tech */
  .m1-tech-hero { padding: 28px 16px; background: linear-gradient(180deg, #102921 0%, var(--forest-deep) 100%); color: white; }
  .m1-tech-hero h1 { font-size: 26px; line-height: 1.05; letter-spacing: -0.025em; font-weight: 600; margin-bottom: 10px; }
  .m1-tech-hero h1 em { font-style: normal; color: var(--green); }
  .m1-tech-hero p { font-size: 12px; color: rgba(255,255,255,0.78); line-height: 1.5; margin-bottom: 16px; }
  .m1-tech-hero .access { display: flex; flex-direction: column; gap: 8px; }
  .m1-tech-filters { padding: 14px 16px; background: white; border-bottom: 1px solid var(--line); display: flex; gap: 8px; overflow-x: auto; }
  .m1-tech-filters select { padding: 8px 10px; border: 1px solid var(--line); border-radius: 8px; font-size: 12px; background: white; font-family: inherit; flex-shrink: 0; }
  .m1-tech-card { display: flex; flex-direction: column; gap: 10px; padding: 14px 16px; background: white; border-bottom: 1px solid var(--line); }
  .m1-tech-card .top { display: flex; gap: 12px; align-items: center; }
  .m1-tech-card .av { width: 46px; height: 46px; border-radius: 50%; background: var(--paper-2); border: 2px solid var(--green-dark); display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 14px; color: var(--forest-deep); flex-shrink: 0; }
  .m1-tech-card h4 { font-size: 14px; font-weight: 600; color: var(--ink); }
  .m1-tech-card .city { font-size: 11px; color: var(--ink-3); display: flex; align-items: center; gap: 4px; margin-top: 2px; }
  .m1-tech-card .city svg { width: 10px; height: 10px; }
  .m1-tech-card .badge-avail { padding: 3px 8px; border-radius: 999px; background: rgba(141, 193, 73, 0.18); color: var(--green-deep); font-size: 10px; font-weight: 600; display: inline-flex; align-items: center; gap: 4px; margin-top: 4px; }
  .m1-tech-card .badge-avail::before { content:""; width: 5px; height: 5px; background: var(--green-dark); border-radius: 50%; }
  .m1-tech-card .specs { display: flex; gap: 4px; flex-wrap: wrap; }
  .m1-tech-card .specs span { font-size: 10px; padding: 3px 8px; background: var(--paper-2); border-radius: 999px; color: var(--ink-2); }
`;

// Icons
const I1 = {
  search: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8"><circle cx="11" cy="11" r="7" /><path d="M20 20l-3-3" /></svg>,
  cart: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8"><path d="M5 7h14l-1.5 10.5a2 2 0 01-2 1.5h-7a2 2 0 01-2-1.5L5 7z" /><path d="M9 10V6a3 3 0 016 0v4" /></svg>,
  heart: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8"><path d="M12 21s-7-4.5-7-10a4 4 0 017-2.6A4 4 0 0119 11c0 5.5-7 10-7 10z" /></svg>,
  user: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8"><circle cx="12" cy="8" r="4" /><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8" /></svg>,
  home: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8"><path d="M3 11l9-8 9 8M5 10v10a1 1 0 001 1h4v-6h4v6h4a1 1 0 001-1V10" /></svg>,
  bag: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8"><path d="M6 8h12l-1 13H7L6 8z" /><path d="M9 8V6a3 3 0 016 0v2" /></svg>,
  ham: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><path d="M4 7h16M4 12h16M4 17h16" /></svg>,
  chev: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><path d="M9 6l6 6-6 6" /></svg>,
  arr: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><path d="M5 12h14M13 6l6 6-6 6" /></svg>,
  filt: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6"><path d="M3 5h18M6 12h12M10 19h4" /></svg>,
  check: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.4" style={{ height: "54px" }}><path d="M5 12l5 5L20 7" /></svg>,
  pin: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6"><path d="M12 22s-7-7-7-13a7 7 0 1114 0c0 6-7 13-7 13z" /><circle cx="12" cy="9" r="2.5" /></svg>,
  truck: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6"><rect x="2" y="6" width="12" height="11" rx="1" /><path d="M14 9h5l3 4v4h-8" /><circle cx="7" cy="19" r="2" /><circle cx="17" cy="19" r="2" /></svg>,
  shield: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6"><path d="M12 3l8 3v6c0 5-3.5 8.5-8 9-4.5-.5-8-4-8-9V6l8-3z" /></svg>,
  upload: <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8"><path d="M12 16V4M7 9l5-5 5 5" /><path d="M5 16v3a2 2 0 002 2h10a2 2 0 002-2v-3" /></svg>,
  wa: <svg viewBox="0 0 24 24" fill="currentColor"><path d="M17.5 14c-.3-.1-1.7-.8-2-.9-.3-.1-.5-.1-.7.1l-1 1.2c-.2.2-.4.2-.6.1-1.4-.7-2.4-1.6-3.4-3.3-.2-.3 0-.4.1-.6l.7-.8c.1-.2.2-.4.1-.6L9.6 7c-.2-.5-.4-.4-.6-.4h-.6c-.2 0-.5.1-.8.4-1 1-1.4 2-1.4 3.5 0 .9.4 2 .7 2.5 1.2 1.9 2.7 3.6 4.7 4.7.6.3 1.7.7 2.6.7 1.5 0 2.5-.4 3.5-1.4.3-.3.4-.6.4-.8v-.6c0-.2.1-.5-.4-.6zm-5.5 7C7 21 3 17 3 12S7 3 12 3s9 4 9 9-4 9-9 9zm0-20C5.9 1 1 5.9 1 12c0 2 .5 3.9 1.5 5.6L1 23l5.5-1.5C8.1 22.5 10 23 12 23c6.1 0 11-4.9 11-11S18.1 1 12 1z" /></svg>,
  google: <svg viewBox="0 0 24 24"><path fill="#4285F4" d="M21.6 12.2c0-.7-.1-1.4-.2-2H12v3.9h5.4c-.2 1.2-.9 2.3-2 3v2.5h3.2c1.9-1.7 3-4.3 3-7.4z" /><path fill="#34A853" d="M12 22c2.7 0 5-.9 6.6-2.4l-3.2-2.5c-.9.6-2 1-3.4 1-2.6 0-4.8-1.8-5.6-4.2H3.1v2.6C4.7 19.8 8.1 22 12 22z" /><path fill="#FBBC05" d="M6.4 13.9c-.2-.6-.3-1.2-.3-1.9s.1-1.3.3-1.9V7.5H3.1C2.4 8.9 2 10.4 2 12s.4 3.1 1.1 4.5l3.3-2.6z" /><path fill="#EA4335" d="M12 5.9c1.5 0 2.8.5 3.8 1.5l2.9-2.9C16.9 2.9 14.7 2 12 2 8.1 2 4.7 4.2 3.1 7.5l3.3 2.6c.8-2.4 3-4.2 5.6-4.2z" /></svg>
};

const M1_PRODUCTS = [
{ sku: 'DJ-CAM-IP4K-01', name: 'Cámara IP Domo 4K con visión nocturna 60m', price: 287.50, oldPrice: 359.00, brand: 'Hikvision', tag: 'destacado', stock: 12 },
{ sku: 'DJ-MOT-CORR-1T', name: 'Motor corredizo 1000kg con cremallera', price: 412.00, oldPrice: null, brand: 'Casemil', tag: 'nuevo', stock: 8 },
{ sku: 'DJ-CAM-BUL-PRO', name: 'Cámara bullet exterior 5MP IR 40m', price: 156.00, oldPrice: 198.00, brand: 'Dahua', tag: 'oferta', stock: 24 },
{ sku: 'DJ-ALA-KIT-WF', name: 'Kit alarma inalámbrica WiFi 8 sensores', price: 189.50, oldPrice: 245.00, brand: 'Garnet', tag: 'oferta', stock: 18 },
{ sku: 'DJ-CER-BIO-FP', name: 'Cerradura biométrica con huella y app', price: 134.00, oldPrice: null, brand: 'Yale', tag: 'destacado', stock: 9 },
{ sku: 'DJ-DVR-08CH', name: 'DVR híbrido 8 canales 4K UHD', price: 215.00, oldPrice: 269.00, brand: 'Hikvision', tag: 'oferta', stock: 14 }];


const M1_CATS = [
{ name: 'Cámaras CCTV', sub: '4K · IP · PTZ' },
{ name: 'Motores y Portones', sub: 'Corredizos · Levadizos' },
{ name: 'Alarmas e Intrusión', sub: 'Sensores · Sirenas' },
{ name: 'Detección Incendio', sub: 'Humo · Calor · CO' },
{ name: 'Control de Accesos', sub: 'Cerraduras · Biométricos' },
{ name: 'Domótica IoT', sub: 'Smart Home · Sensores' }];


const M1_TECHS = [
{ name: 'Carlos Méndez', city: 'Ciudad Bolívar', specs: ['CCTV', 'Motores'], avail: true, initials: 'CM' },
{ name: 'María Rodríguez', city: 'Caracas · Chacao', specs: ['CCTV', 'Domótica'], avail: true, initials: 'MR' },
{ name: 'José Hernández', city: 'Maracay', specs: ['Motores', 'Alarmas'], avail: false, initials: 'JH' },
{ name: 'Andrés Pérez', city: 'Valencia', specs: ['CCTV', 'Accesos'], avail: true, initials: 'AP' }];


const M1_NAV = [
{ id: 'home', num: '01', label: 'Inicio' },
{ id: 'shop', num: '02', label: 'Tienda' },
{ id: 'product', num: '03', label: 'Producto' },
{ id: 'cart', num: '04', label: 'Carrito (2)' },
{ id: 'checkout', num: '05', label: 'Checkout' },
{ id: 'auth', num: '06', label: 'Acceso' },
{ id: 'tech', num: '07', label: 'Portal Técnicos' }];


function M1Pcard({ p }) {
  const badge = p.tag === 'nuevo' ? <span className="badge new">NUEVO</span> :
  p.tag === 'oferta' ? <span className="badge sale">OFERTA</span> :
  <span className="badge">★ DESTACADO</span>;
  return (
    <div className="m1-pcard">
      <div className="img-wrap">
        {badge}
        <img src="assets/product-camera.svg" alt="" />
      </div>
      <div className="info">
        <span className="sku">{p.sku}</span>
        <h4>{p.name}</h4>
        <div>
          <span className="price">${p.price.toFixed(2)}</span>
          {p.oldPrice && <span className="old">${p.oldPrice.toFixed(2)}</span>}
        </div>
      </div>
    </div>);

}

function M1TopBar({ onMenu, screen, onScreen }) {
  return (
    <div className="m1-top">
      <button className="ham" onClick={onMenu}>{I1.ham}</button>
      <a className="logo" onClick={() => onScreen('home')}><img src="assets/logos/horizontal-darkgreen.png" alt="Don Juan Security" /></a>
      <div className="actions">
        <button className="icon-btn">{I1.heart}</button>
        <button className="icon-btn" onClick={() => onScreen('cart')}>{I1.cart}<span className="badge">2</span></button>
      </div>
    </div>);

}

function M1Drawer({ open, onClose, screen, onScreen }) {
  return (
    <div className={`m1-drawer ${open ? 'open' : ''}`}>
      <div className="backdrop" onClick={onClose}></div>
      <div className="panel">
        <div className="panel-head">
          <img src="assets/logos/horizontal-darkgreen.png" alt="" />
          <button className="close" onClick={onClose}>×</button>
        </div>
        <div className="panel-body">
          <div className="group">
            <div className="group-label">Pantallas</div>
            {M1_NAV.map((s) =>
            <div key={s.id} className={`row ${screen === s.id ? 'active' : ''}`} onClick={() => {onScreen(s.id);onClose();}}>
                <span><span className="num">{s.num}</span>{s.label}</span>
                <span className="arr">{I1.chev}</span>
              </div>
            )}
          </div>
          <div className="group">
            <div className="group-label">Categorías</div>
            {M1_CATS.slice(0, 4).map((c) =>
            <div key={c.name} className="row" onClick={() => {onScreen('shop');onClose();}}>
                <span>{c.name}</span>
                <span className="arr">{I1.chev}</span>
              </div>
            )}
          </div>
        </div>
        <div className="panel-foot">
          <a className="wa">{I1.wa}</a>
          <span>+58 414 555 0119<br />WhatsApp 24/7</span>
        </div>
      </div>
    </div>);

}

function M1Tabs({ screen, onScreen }) {
  const items = [
  { id: 'home', ic: I1.home, l: 'Inicio' },
  { id: 'shop', ic: I1.bag, l: 'Tienda' },
  { id: 'cart', ic: I1.cart, l: 'Carrito' },
  { id: 'auth', ic: I1.user, l: 'Cuenta' },
  { id: 'tech', ic: I1.pin, l: 'Técnicos' }];

  return (
    <div className="m1-tabs">
      {items.map((t) =>
      <button key={t.id} className={screen === t.id || screen === 'product' && t.id === 'shop' || screen === 'checkout' && t.id === 'cart' ? 'active' : ''} onClick={() => onScreen(t.id)}>
          {t.ic}<span>{t.l}</span>
        </button>
      )}
    </div>);

}

// Screen: Home
function M1Home({ onScreen }) {
  return (
    <React.Fragment>
      <div className="m1-search">
        <div className="input-wrap">
          {I1.search}
          <input placeholder="Buscar cámaras, motores, alarmas…" />
        </div>
      </div>
      <div className="m1-hero">
        <img src="assets/product-camera.svg" alt="" />
      </div>
      <section className="m1-section" style={{ paddingTop: 0 }}>
        <div className="m1-section-head">
          <div>
            <div className="m1-kicker">EXPLORA</div>
            <h2>Por categoría</h2>
          </div>
        </div>
        <div className="m1-cats">
          {M1_CATS.map((c) =>
          <div key={c.name} className="m1-cat" onClick={() => onScreen('shop')}>
              <div className="circle"><img src="assets/product-camera.svg" alt="" /></div>
              <div>
                <h4>{c.name}</h4>
                <p>{c.sub}</p>
              </div>
            </div>
          )}
        </div>
      </section>

      <div className="m1-trust">
        <div className="item"><div className="ic">{I1.truck}</div><div><h4>Envío 24-72h</h4><p>Todo el país</p></div></div>
        <div className="item"><div className="ic">{I1.shield}</div><div><h4>Pago manual</h4><p>Comprobante seguro</p></div></div>
      </div>

      <section className="m1-section">
        <div className="m1-section-head">
          <div>
            <div className="m1-kicker">DESTACADOS</div>
            <h2>Más vendido</h2>
          </div>
          <a className="more">Ver todo {I1.arr}</a>
        </div>
        <div className="m1-pgrid">
          {M1_PRODUCTS.slice(0, 4).map((p) =>
          <a key={p.sku} onClick={() => onScreen('product')}><M1Pcard p={p} /></a>
          )}
        </div>
      </section>

      <div className="m1-cta-block">
        <div className="m1-kicker" style={{ color: 'var(--green)' }}>PORTAL DE TÉCNICOS</div>
        <h2>¿Eres técnico?<br /><em>Súmate al directorio.</em></h2>
        <p>Registro gratis. Clientes te contactan directo por WhatsApp.</p>
        <button className="btn-green" onClick={() => onScreen('tech')}>Registrarme {I1.arr}</button>
      </div>
    </React.Fragment>);

}

// Screen: Shop
function M1Shop({ onScreen }) {
  return (
    <React.Fragment>
      <div className="m1-shop-head">
        <h1>Cámaras CCTV</h1>
        <p className="meta">121 ARTÍCULOS</p>
      </div>
      <div className="m1-filter-bar">
        <button className="filters">{I1.filt} Filtros</button>
        <button>Marca {I1.chev}</button>
        <button>Precio {I1.chev}</button>
        <button>Potencia {I1.chev}</button>
        <button>Stock {I1.chev}</button>
      </div>
      <div className="m1-pgrid" style={{ padding: '0 16px 24px' }}>
        {M1_PRODUCTS.map((p) =>
        <a key={p.sku} onClick={() => onScreen('product')}><M1Pcard p={p} /></a>
        )}
      </div>
    </React.Fragment>);

}

// Screen: Product
function M1Product({ onScreen }) {
  const p = M1_PRODUCTS[0];
  const [qty, setQty] = useState1(1);
  return (
    <React.Fragment>
      <div className="m1-pdp-gallery">
        <span className="badge-sale">Oferta</span>
        <img src="assets/product-camera.svg" alt="" />
      </div>
      <div className="m1-pdp-thumbs">
        {[0, 1, 2, 3].map((i) =>
        <button key={i} className={i === 0 ? 'active' : ''}><img src="assets/product-camera.svg" alt="" style={{ width: '100%', height: '100%', objectFit: 'contain' }} /></button>
        )}
      </div>
      <div className="m1-pdp-info">
        <div className="brand-line">MARCA · {p.brand.toUpperCase()}</div>
        <h1>{p.name}</h1>
        <div className="price-box">
          <span className="price">${p.price.toFixed(2)}</span>
          <span className="old">${p.oldPrice.toFixed(2)}</span>
          <span className="ofer">Oferta</span>
          <div className="note">Precio sin IVA · El IVA se calcula en el checkout</div>
        </div>
        <div className="stock-line"><span className="dot"></span>En stock · {p.stock} unidades disponibles</div>
        <div className="qty-row">
          <span style={{ fontSize: 13, color: 'var(--ink-3)' }}>Cantidad:</span>
          <div className="qty"><button onClick={() => setQty(Math.max(1, qty - 1))}>−</button><input value={qty} onChange={(e) => setQty(parseInt(e.target.value) || 1)} /><button onClick={() => setQty(qty + 1)}>+</button></div>
        </div>
        <div style={{ marginTop: 16 }}>
          <h3 style={{ fontSize: 14, fontWeight: 600, marginBottom: 8, color: 'var(--forest-deep)' }}>Descripción</h3>
          <p style={{ fontSize: 13, lineHeight: 1.55, color: 'var(--ink-2)' }}>Cámara diseñada para vigilancia profesional en exteriores. Sensor SONY 1/1.8", visión nocturna IR 60m, zoom óptico 22x y resistencia IP67.</p>
        </div>
      </div>
      <div className="m1-sticky-cta">
        <button className="m1-btn m1-btn-outline">{I1.heart}</button>
        <button className="m1-btn m1-btn-primary" style={{ flex: 1.5 }}>{I1.cart} Agregar al carrito</button>
        <button className="m1-btn m1-btn-green" onClick={() => onScreen('checkout')}>Comprar</button>
      </div>
    </React.Fragment>);

}

// Screen: Cart
function M1Cart({ onScreen }) {
  const items = [
  { ...M1_PRODUCTS[0], qty: 1 },
  { ...M1_PRODUCTS[2], qty: 2 },
  { ...M1_PRODUCTS[3], qty: 1 }];

  const subtotal = items.reduce((s, i) => s + i.price * i.qty, 0);
  const iva = subtotal * 0.16;
  return (
    <React.Fragment>
      <div style={{ padding: '16px', background: 'white' }}>
        <h1 style={{ fontSize: 26, fontWeight: 600, letterSpacing: '-0.02em', color: 'var(--forest-deep)', marginBottom: 4 }}>Tu carrito</h1>
        <p style={{ fontSize: 12, color: 'var(--ink-3)' }}>{items.length} productos · Revisa antes de pagar</p>
      </div>
      <div>
        {items.map((i, idx) =>
        <div key={idx} className="m1-cart-item">
            <div className="ph"><img src="assets/product-camera.svg" alt="" /></div>
            <div style={{ flex: 1, minWidth: 0 }}>
              <span className="sku">{i.sku}</span>
              <h4>{i.name}</h4>
              <div className="row">
                <div className="qty"><button>−</button><input defaultValue={i.qty} /><button>+</button></div>
                <span className="total">${(i.price * i.qty).toFixed(2)}</span>
              </div>
            </div>
          </div>
        )}
      </div>
      <div className="m1-summary">
        <h3>Resumen</h3>
        <div className="line"><span>Subtotal ({items.length} items)</span><span>${subtotal.toFixed(2)}</span></div>
        <div className="line muted"><span>Envío</span><span>En checkout</span></div>
        <div className="line muted"><span>IVA (16%)</span><span>${iva.toFixed(2)}</span></div>
        <div className="line total"><span>Total estimado</span><span>${(subtotal + iva).toFixed(2)}</span></div>
        <div className="trust">{I1.shield}<span>Una vez confirmado tu comprobante de pago, te enviamos los productos al instante.</span></div>
      </div>
      <div className="m1-sticky-cta">
        <button className="m1-btn m1-btn-outline" onClick={() => onScreen('shop')}>← Seguir</button>
        <button className="m1-btn m1-btn-green" style={{ flex: 1.6 }} onClick={() => onScreen('checkout')}>Continuar al checkout {I1.arr}</button>
      </div>
    </React.Fragment>);

}

// Screen: Checkout
function M1Checkout({ onScreen }) {
  const [pay, setPay] = useState1('transfer');
  return (
    <React.Fragment>
      <div style={{ padding: '16px', background: 'white' }}>
        <h1 style={{ fontSize: 24, fontWeight: 600, letterSpacing: '-0.02em', color: 'var(--forest-deep)', marginBottom: 4 }}>Confirma tu pedido</h1>
        <p style={{ fontSize: 12, color: 'var(--ink-3)' }}>Pago manual · Verificamos en 30 min.</p>
      </div>
      <div className="m1-co-steps">
        <span className="step done" style={{ height: "55px" }}>01 Carrito</span>
        <span className="step active">02 Datos y pago</span>
        <span className="step">03 Confirmación</span>
      </div>

      <div className="m1-form-card">
        <h3><span className="num">1</span>Dirección de envío</h3>
        <div className="m1-field"><label>Dirección *</label><input placeholder="Av. principal, edificio, casa" /></div>
        <div className="m1-field"><label>Estado *</label><select><option>Bolívar</option><option>Anzoátegui</option></select></div>
        <div className="m1-field"><label>Ciudad *</label><input placeholder="Ciudad Bolívar" /></div>
      </div>

      <div className="m1-form-card">
        <h3><span className="num">2</span>Método de pago</h3>
        <div className="m1-pay-options">
          <div className={`m1-pay-opt ${pay === 'transfer' ? 'active' : ''}`} onClick={() => setPay('transfer')}>
            <h4>Transferencia</h4>
            <p>Bs · USD</p>
          </div>
          <div className={`m1-pay-opt ${pay === 'mobile' ? 'active' : ''}`} onClick={() => setPay('mobile')}>
            <h4>Pago Móvil</h4>
            <p>Mercantil · BNC</p>
          </div>
        </div>
        <div className="m1-bank">
          <h4>Datos para la {pay === 'transfer' ? 'transferencia' : 'pago móvil'}</h4>
          <ul style={{ listStyle: 'none' }}>
            <li><span>Banco</span><span>MERCANTIL · 0105</span></li>
            <li><span>{pay === 'transfer' ? 'Cuenta' : 'Cédula'}</span><span>{pay === 'transfer' ? '0105-1234-56-...' : 'J-50012345-6'}</span></li>
            <li><span>{pay === 'transfer' ? 'RIF' : 'Teléfono'}</span><span>{pay === 'transfer' ? 'J-50012345-6' : '0414-5550119'}</span></li>
          </ul>
        </div>
        <div className="m1-field"><label>Referencia *</label><input placeholder="00123456789" /></div>
        <div className="m1-upload">
          <div className="ic">{I1.upload}</div>
          <h4>Sube tu comprobante</h4>
          <p>JPG, PNG o PDF · hasta 5MB</p>
        </div>
      </div>

      <div style={{ padding: '0 16px 16px' }}>
        <div style={{ padding: '12px', background: 'var(--paper-2)', borderRadius: 10, fontSize: 11, color: 'var(--ink-2)', lineHeight: 1.45, display: 'flex', gap: 8 }}>
          {I1.shield}
          <span>Una vez confirmado tu comprobante de pago, te enviamos los productos al instante.</span>
        </div>
      </div>

      <div className="m1-sticky-cta">
        <button className="m1-btn m1-btn-outline" onClick={() => onScreen('cart')}>← Volver</button>
        <button className="m1-btn m1-btn-green" style={{ flex: 1.5 }}>Confirmar pedido {I1.arr}</button>
      </div>
    </React.Fragment>);

}

// Screen: Auth
function M1Auth({ onScreen }) {
  const [mode, setMode] = useState1('login');
  return (
    <React.Fragment>
      <div className="m1-auth-side">
        <img src="assets/logos/horizontal-white.png" alt="" style={{ height: 24, marginBottom: 16 }} />
        <h2>Tu cuenta, la <em>llave maestra</em> de tu seguridad.</h2>
        <p>Acceso a precios mayoristas, pedidos guardados y soporte prioritario.</p>
      </div>
      <div className="m1-auth-form">
        <div className="toggle">
          <button className={mode === 'login' ? 'active' : ''} onClick={() => setMode('login')}>Iniciar sesión</button>
          <button className={mode === 'register' ? 'active' : ''} onClick={() => setMode('register')}>Crear cuenta</button>
        </div>
        <h1>{mode === 'login' ? 'Bienvenido de nuevo.' : 'Crea tu cuenta.'}</h1>
        <p className="lede">{mode === 'login' ? 'Ingresa tus credenciales.' : 'En menos de 1 minuto.'}</p>
        <button className="google-btn">{I1.google}<span>Continuar con Google</span></button>
        <div className="divider">O CON TU EMAIL</div>
        {mode === 'login' ?
        <React.Fragment>
            <div className="m1-field"><label>Email</label><input placeholder="stephanie@ejemplo.com" /></div>
            <div className="m1-field"><label>Contraseña</label><input type="password" placeholder="••••••••" /></div>
            <div className="opts-row">
              <label style={{ display: 'flex', alignItems: 'center', gap: 6 }}><input type="checkbox" defaultChecked /> Recordarme</label>
              <a>¿Olvidaste tu clave?</a>
            </div>
            <button className="m1-btn m1-btn-primary m1-btn-block" onClick={() => onScreen('home')}>Iniciar sesión {I1.arr}</button>
          </React.Fragment> :

        <React.Fragment>
            <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0 10px' }}>
              <div className="m1-field"><label>Nombre</label><input placeholder="Stephanie" /></div>
              <div className="m1-field"><label>Apellido</label><input placeholder="Castillo" /></div>
            </div>
            <div className="m1-field"><label>Email</label><input placeholder="stephanie@ejemplo.com" /></div>
            <div className="m1-field"><label>Teléfono</label><input placeholder="+58 414 ..." /></div>
            <div className="m1-field"><label>Contraseña</label><input type="password" placeholder="Mín 8 caracteres" /></div>
            <button className="m1-btn m1-btn-green m1-btn-block">Crear cuenta {I1.arr}</button>
          </React.Fragment>
        }
      </div>
    </React.Fragment>);

}

// Screen: Tech
function M1Tech({ onScreen }) {
  return (
    <React.Fragment>
      <div className="m1-tech-hero">
        <div className="m1-kicker" style={{ color: 'var(--green)' }}>DIRECTORIO PÚBLICO</div>
        <h1>Encuentra al <em>técnico</em> de tu ciudad.</h1>
        <p>Listado público de técnicos certificados Don Juan Security. Contáctalos por WhatsApp.</p>
        <div className="access">
          <button className="m1-btn m1-btn-green m1-btn-block">¿Eres técnico? Regístrate {I1.arr}</button>
          <button className="m1-btn m1-btn-block" style={{ background: 'transparent', color: 'white', border: '1px solid rgba(255,255,255,0.18)' }}>Iniciar sesión</button>
        </div>
      </div>
      <div className="m1-tech-filters">
        <select><option>Todas las ciudades</option></select>
        <select><option>Todas las especialidades</option></select>
        <select><option>Cualquiera</option></select>
      </div>
      <div style={{ background: 'var(--paper-2)' }}>
        {M1_TECHS.map((t, i) =>
        <div key={i} className="m1-tech-card">
            <div className="top">
              <div className="av">{t.initials}</div>
              <div style={{ flex: 1 }}>
                <h4>{t.name}</h4>
                <div className="city">{I1.pin}{t.city}</div>
                {t.avail ? <span className="badge-avail">Disponible</span> : <span className="badge-avail" style={{ background: 'var(--paper-2)', color: 'var(--ink-3)' }}>Ocupado</span>}
              </div>
            </div>
            <div className="specs">
              {t.specs.map((s, j) => <span key={j}>{s}</span>)}
            </div>
          </div>
        )}
      </div>
    </React.Fragment>);

}

// Main app for propuesta 1 mobile
function M1App() {
  const [screen, setScreen] = useState1('home');
  const [menu, setMenu] = useState1(false);

  const screens = {
    home: <M1Home onScreen={setScreen} />,
    shop: <M1Shop onScreen={setScreen} />,
    product: <M1Product onScreen={setScreen} />,
    cart: <M1Cart onScreen={setScreen} />,
    checkout: <M1Checkout onScreen={setScreen} />,
    auth: <M1Auth onScreen={setScreen} />,
    tech: <M1Tech onScreen={setScreen} />
  };

  return (
    <div className="m1">
      <style>{m1Theme}</style>
      <M1TopBar onMenu={() => setMenu(true)} screen={screen} onScreen={setScreen} />
      <div style={{ paddingBottom: 60 }}>
        {screens[screen]}
      </div>
      <M1Tabs screen={screen} onScreen={setScreen} />
      <M1Drawer open={menu} onClose={() => setMenu(false)} screen={screen} onScreen={setScreen} />
    </div>);

}

window.M1App = M1App;