:root{
      --bg0:#070A12;
      --bg1:#0B1220;
      --stroke: rgba(255,255,255,.10);
      --shadow: 0 16px 46px rgba(0,0,0,.48);
      --radius: 18px;

      --text: rgba(255,255,255,.92);
      --muted: rgba(255,255,255,.62);

      --blue:#4C7DFF;
      --green:#35D07F;
      --red:#FF4D5A;
      --amber:#FFCC66;

      --focus: 0 0 0 4px rgba(76,125,255,.28);
    }

    *{ box-sizing:border-box; }
    html,body{ height:100%; }

    body{
      margin:0;
      font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
      color:var(--text);
      background:
        radial-gradient(900px 520px at 10% 10%, rgba(76,125,255,.26), transparent 55%),
        radial-gradient(700px 480px at 95% 20%, rgba(53,208,127,.16), transparent 55%),
        radial-gradient(720px 520px at 70% 95%, rgba(255,77,90,.14), transparent 55%),
        linear-gradient(180deg, var(--bg0), var(--bg1));
      padding: 8px;
      overflow:hidden;
    }

    @media (max-width: 960px) {
      body{
        overflow:auto;
      }
    }

    body, .app, .card, .panel, .row, .chip, .metaRow, #hello, #thanks, #debug, #geoText, #overlayState{
      overflow-wrap:anywhere;
      word-break:break-word;
      white-space:normal;
      min-width:0;
    }

    .app{
      height: calc(100vh - 16px);
      height: calc(100dvh - 16px);
      width: min(980px, 100%);
      margin: 0 auto;
      display:grid;
      grid-template-columns: 1fr 340px;
      gap:10px;
      align-items:stretch;
    }

    .card{
      border:1px solid var(--stroke);
      border-radius: var(--radius);
      background: linear-gradient(180deg, rgba(255,255,255,.08), rgba(255,255,255,.04));
      box-shadow: var(--shadow);
      backdrop-filter: blur(16px);
      overflow:hidden;
      min-height:0;
    }

    /* CAMERA */
    .cameraCard{
      display:flex;
      flex-direction:column;
      min-height:0;
      position:relative;
    }
    .cameraHeader{
      flex:0 0 auto;
      display:flex;
      align-items:center;
      justify-content:space-between;
      gap:10px;
      padding: 8px 10px;
      border-bottom: 1px solid rgba(255,255,255,.08);
      background: rgba(0,0,0,.10);
    }
    .cameraHeader strong{
      font-size: 12px;
      font-weight: 800;
      color: rgba(255,255,255,.86);
    }
    .cameraTitle{
      display:inline-flex;
      align-items:center;
      gap:8px;
    }
    .chip{
      display:inline-flex;
      align-items:center;
      gap:8px;
      padding: 6px 9px;
      border-radius: 999px;
      background: rgba(0,0,0,.14);
      border:1px solid rgba(255,255,255,.10);
      color: rgba(255,255,255,.78);
      font-size: 11px;
      line-height: 1.2;
      backdrop-filter: blur(10px);
    }
    .videoWrap{
      flex:1 1 auto;
      position:relative;
      background:#000;
      min-height:0;
    }
    .flashBtn{
      width:30px;
      height:30px;
      border-radius:9px;
      border:1px solid rgba(255,255,255,.14);
      background: rgba(0,0,0,.28);
      color: rgba(255,255,255,.92);
      font-size:16px;
      line-height:1;
      display:grid;
      place-items:center;
      cursor:pointer;
      user-select:none;
      -webkit-tap-highlight-color: transparent;
    }
    .flashBtn[disabled]{
      opacity:.45;
      cursor:not-allowed;
    }
    .flashBtn.active{
      background: rgba(255,204,102,.22);
      border-color: rgba(255,204,102,.60);
      color: rgba(255,235,180,.98);
    }
    .screenFlash{
      position:absolute;
      inset:0;
      background:#fff;
      opacity:0;
      pointer-events:none;
      z-index:4;
      transition: opacity .08s linear;
    }
    video, #previewImg{
      width:100%;
      height:100%;
      object-fit: cover;
      display:block;
      background:#000;
    }
    #previewImg{ display:none; }
    canvas{ display:none; }

    .overlay{
      position:absolute;
      left:10px; top:10px;
      display:flex;
      gap:8px;
      pointer-events:none;
    }
    .overlay .chip{
      opacity:.85;
      background: rgba(0,0,0,.12);
      border:1px solid rgba(255,255,255,.08);
      font-size: 10.5px;
    }

    /* PANEL */
    .panelCard{
      display:flex;
      flex-direction:column;
      min-height:0;
      overflow-y:auto;
      overscroll-behavior:contain;
      -webkit-overflow-scrolling:touch;
      scroll-padding-bottom: max(28px, env(safe-area-inset-bottom));
    }
    .panel{
      padding: 10px;
      display:flex;
      flex-direction:column;
      gap:10px;
      min-height:0;
      min-width:0;
      padding-bottom: max(28px, calc(env(safe-area-inset-bottom) + 20px));
    }

    .metaRow{
      display:flex;
      align-items:center;
      justify-content:space-between;
      gap:10px;
      padding: 8px 10px;
      border:1px solid rgba(255,255,255,.10);
      background: rgba(0,0,0,.12);
      border-radius: 14px;
    }
    .metaTitle{
      font-size: 12px;
      font-weight: 800;
      letter-spacing:.2px;
      color: rgba(255,255,255,.88);
      line-height:1.2;
    }
    .gpsCard{
      padding: 10px 12px;
      border-radius: 16px;
      border: 1px solid rgba(255,255,255,.10);
      background:
        linear-gradient(180deg, rgba(0,0,0,.16), rgba(255,255,255,.03));
      display: flex;
      flex-direction: column;
      gap: 8px;
    }
    .gpsCardHeader{
      display:flex;
      align-items:center;
      justify-content:space-between;
      gap:10px;
    }
    .gpsCardHeader strong{
      font-size: 11px;
      font-weight: 900;
      letter-spacing: .08em;
      text-transform: uppercase;
      color: rgba(255,255,255,.82);
    }
    .gpsMetricRow{
      display:flex;
      align-items:center;
      justify-content:space-between;
      gap:10px;
      font-size: 11.5px;
      color: rgba(255,255,255,.62);
    }
    .gpsMetricRow b{
      font-size: 11.5px;
      color: rgba(255,255,255,.94);
      text-align: right;
      line-height: 1.2;
      max-width: 170px;
    }
    .storeChoiceWrap{
      margin-top: 4px;
      padding-top: 8px;
      border-top: 1px dashed rgba(255,255,255,.10);
    }
    .storeChoiceWrap[hidden]{
      display:none !important;
    }
    .storeChoiceWrap label{
      margin-bottom: 4px;
    }
    .storeChoiceWrap select{
      width:100%;
      padding: 10px 12px;
      border-radius: 12px;
      border:1px solid rgba(255,255,255,.12);
      background: rgba(0,0,0,.18);
      color: var(--text);
      outline:none;
      font-size: 13px;
      line-height: 1.25;
    }
    .storeChoiceWrap select:focus{
      box-shadow: var(--focus);
      border-color: rgba(76,125,255,.55);
    }
    .storeChoiceList{
      display:none;
      grid-template-columns:1fr;
      gap:8px;
      margin-top: 4px;
    }
    .storeChoiceList[hidden]{
      display:none !important;
    }
    .storeChoiceOption{
      width:100%;
      border-radius: 14px;
      border:1px solid rgba(255,255,255,.12);
      background: rgba(255,255,255,.04);
      color: var(--text);
      padding: 11px 12px;
      text-align:left;
      cursor:pointer;
      display:flex;
      align-items:center;
      justify-content:space-between;
      gap:10px;
      font-size: 12.5px;
      line-height: 1.3;
      font-weight: 700;
    }
    .storeChoiceOption:active{
      transform: translateY(1px);
    }
    .storeChoiceOption.is-selected{
      border-color: rgba(76,125,255,.55);
      background: linear-gradient(135deg, rgba(76,125,255,.18), rgba(53,208,127,.12));
      box-shadow: 0 0 0 3px rgba(76,125,255,.16);
    }
    .storeChoiceOptionName{
      min-width:0;
      color: rgba(255,255,255,.94);
    }
    .storeChoiceOptionMeta{
      flex:0 0 auto;
      color: rgba(255,255,255,.56);
      font-size: 11px;
      font-weight: 800;
      letter-spacing: .04em;
    }
    .storeChoiceHint{
      display:block;
      margin-top: 6px;
      font-size: 10.5px;
      line-height: 1.35;
      color: rgba(255,255,255,.48);
    }
    .gpsBadge{
      display:inline-flex;
      align-items:center;
      justify-content:center;
      min-width: 84px;
      padding: 5px 10px;
      border-radius: 999px;
      border: 1px solid rgba(255,255,255,.12);
      font-size: 10px;
      font-weight: 900;
      letter-spacing: .08em;
      text-transform: uppercase;
      background: rgba(255,255,255,.06);
      color: rgba(255,255,255,.78);
    }
    .gpsBadgeOk{
      background: rgba(53,208,127,.16);
      border-color: rgba(53,208,127,.30);
      color: rgba(173,255,214,.96);
    }
    .gpsBadgeWarn{
      background: rgba(255,204,102,.16);
      border-color: rgba(255,204,102,.30);
      color: rgba(255,232,182,.96);
    }
    .gpsBadgeBad{
      background: rgba(255,77,90,.16);
      border-color: rgba(255,77,90,.28);
      color: rgba(255,201,206,.96);
    }
    .statusPill{
      display:inline-flex;
      align-items:center;
      gap:8px;
      padding: 6px 10px;
      border-radius: 999px;
      border:1px solid rgba(255,255,255,.10);
      background: rgba(0,0,0,.12);
      color: rgba(255,255,255,.76);
      font-size: 11px;
      line-height:1.2;
      flex: 0 0 auto;
    }
    .sDot{
      width:8px;height:8px;border-radius:999px;
      background: rgba(255,255,255,.28);
      box-shadow: 0 0 0 4px rgba(255,255,255,.05);
    }
    .sDot.ok{ background: var(--green); box-shadow: 0 0 0 4px rgba(53,208,127,.14); }
    .sDot.bad{ background: var(--red); box-shadow: 0 0 0 4px rgba(255,77,90,.14); }
    .sDot.warn{ background: var(--amber); box-shadow: 0 0 0 4px rgba(255,204,102,.14); }

    .field{
      display:flex;
      flex-direction:column;
      gap:6px;
    }
    label{
      font-size:11px;
      color: var(--muted);
      line-height:1.2;
    }
    .inputWrap{ position:relative; }
    .icon{
      position:absolute;
      left:12px; top:50%;
      transform: translateY(-50%);
      width:20px;height:20px;
      display:grid;place-items:center;
      color: rgba(255,255,255,.70);
      opacity:.85;
      user-select:none;
      font-size: 15px;
    }
    input{
      width:100%;
      padding: 12px 12px 12px 40px;
      border-radius: 14px;
      border:1px solid rgba(255,255,255,.10);
      background: rgba(0,0,0,.18);
      color: var(--text);
      outline:none;
      font-size: 14px;
      line-height: 1.25;
    }
    input::placeholder{ color: rgba(255,255,255,.32); }
    input:focus{ box-shadow: var(--focus); border-color: rgba(76,125,255,.55); }

    .helperRow{
      display:flex;
      flex-direction:column;
      gap:6px;
    }
    #hello{
      margin:0;
      font-size:12px;
      font-weight:800;
      color: rgba(53,208,127,.95);
      display:none;
      line-height:1.2;
    }
    #thanks{
      margin:0;
      font-size:12px;
      font-weight:800;
      color: rgba(53,208,127,.95);
      display:none;
      line-height:1.25;
    }
    #debug{
      margin:0;
      font-size:10.5px;
      color: rgba(255,255,255,.36);
      line-height:1.2;
      display:none;
    }

    .row{
      display:flex;
      gap:10px;
      align-items:stretch;
    }
    .row-stack{
      flex-direction:column;
      gap:8px;
    }
    .row-split .btn{ flex: 1 1 0; }

    .btn{
      border:none;
      border-radius: 14px;
      padding: 14px 12px;
      font-weight: 900;
      letter-spacing: .2px;
      cursor:pointer;
      transition: transform .05s ease, opacity .15s ease;
      user-select:none;
      -webkit-tap-highlight-color: transparent;
      display:flex;
      justify-content:center;
      align-items:center;
      gap:10px;
      font-size: 14px;
      line-height:1.15;
      min-height: 50px;
      width:100%;
    }
    .btn-mini{
      min-height: 34px;
      padding: 6px 10px;
      font-size: 11.5px;
      font-weight: 800;
    }
    .btn:active{ transform: translateY(1px); }
    .btn:disabled{ opacity:.55; cursor:not-allowed; }

    .btn-primary{
      color:white;
      background: linear-gradient(135deg, rgba(76,125,255,.98), rgba(76,125,255,.72));
    }
    .btn-ghost{
      color: rgba(255,255,255,.86);
      background: rgba(255,255,255,.06);
      border:1px solid rgba(255,255,255,.10);
    }
    .btn-success{
      color:#06110B;
      background: linear-gradient(135deg, rgba(53,208,127,.98), rgba(53,208,127,.70));
    }
    .btn-danger{
      color:#150507;
      background: linear-gradient(135deg, rgba(255,77,90,.98), rgba(255,77,90,.70));
    }

    #actionBar{
      display:none;
      flex-direction:row;
      gap:10px;
    }
    #confirmBar{
      display:none;
      flex-direction:row;
      gap:10px;
    }
    #bottomBar{
      display:none;
      margin-top:auto;
    }

    @media (max-width: 960px) {
      .app{
        grid-template-columns: minmax(0, 1fr) minmax(280px, 34vw);
        min-height: calc(100vh - 16px);
        min-height: calc(100dvh - 16px);
        height: auto;
        align-items: start;
      }
      .panelCard{
        padding-bottom: max(10px, env(safe-area-inset-bottom));
      }
      .panel{
        min-height: max-content;
        padding-bottom: max(48px, calc(env(safe-area-inset-bottom) + 32px));
      }
      .gpsCard{
        margin-top: 6px;
      }
      .storeChoiceWrap select{
        min-height: 46px;
      }
    }

    @media (max-width: 960px) and (pointer: coarse) {
      .storeChoiceWrap select{
        display:none;
      }
      .storeChoiceList{
        display:grid;
      }
    }

    /* FORCE LANDSCAPE OVERLAY */
    .rotateOverlay{
      position:fixed;
      inset:0;
      z-index:999;
      display:none;
      align-items:center;
      justify-content:center;
      padding: 18px;
      background: rgba(0,0,0,.72);
      backdrop-filter: blur(8px);
    }
    .rotateBox{
      width: min(420px, 100%);
      border:1px solid rgba(255,255,255,.14);
      background: rgba(10,12,18,.72);
      border-radius: 18px;
      box-shadow: 0 24px 90px rgba(0,0,0,.70);
      padding: 16px;
      text-align:center;
    }
    .rotateBox b{
      display:block;
      font-size: 14px;
      font-weight: 900;
      margin-bottom:6px;
      color: rgba(255,255,255,.92);
    }
    .rotateBox span{
      display:block;
      font-size: 12px;
      color: rgba(255,255,255,.72);
      line-height:1.35;
    }
    .rotateIcon{
      margin: 12px auto 4px;
      width:52px;height:52px;
      border-radius: 16px;
      display:grid;place-items:center;
      background: rgba(255,255,255,.06);
      border:1px solid rgba(255,255,255,.10);
      font-size: 26px;
    }

    .submitOverlay{
      position: fixed;
      inset: 0;
      z-index: 1100;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 20px;
      background: rgba(8, 11, 18, .58);
      backdrop-filter: blur(12px) saturate(1.05);
      opacity: 0;
      visibility: hidden;
      pointer-events: none;
      transition: opacity .24s ease, visibility .24s ease;
    }
    .submitOverlay.show{
      opacity: 1;
      visibility: visible;
      pointer-events: auto;
    }
    .submitOverlayCard{
      width: min(420px, calc(100vw - 32px));
      padding: 26px 22px 20px;
      border-radius: 24px;
      border: 1px solid rgba(255,255,255,.14);
      background:
        radial-gradient(120% 140% at 15% 15%, rgba(76,125,255,.18), transparent 42%),
        radial-gradient(120% 140% at 85% 0%, rgba(53,208,127,.14), transparent 38%),
        linear-gradient(180deg, rgba(14,19,31,.94), rgba(9,13,22,.90));
      box-shadow: 0 28px 90px rgba(0,0,0,.50);
      text-align: center;
    }
    .submitSpinner{
      position: relative;
      width: 88px;
      height: 88px;
      margin: 0 auto 18px;
      display: grid;
      place-items: center;
    }
    .submitRing,
    .submitPulse{
      position: absolute;
      inset: 0;
      border-radius: 999px;
    }
    .submitRing{
      border: 3px solid transparent;
    }
    .submitRingA{
      border-top-color: rgba(76,125,255,.98);
      border-right-color: rgba(76,125,255,.55);
      animation: submitSpin 1.05s linear infinite;
    }
    .submitRingB{
      inset: 10px;
      border-bottom-color: rgba(53,208,127,.95);
      border-left-color: rgba(53,208,127,.52);
      animation: submitSpinReverse 1.3s linear infinite;
    }
    .submitPulse{
      inset: 26px;
      background: radial-gradient(circle, rgba(255,255,255,.28), rgba(255,255,255,.06) 58%, transparent 72%);
      box-shadow: 0 0 28px rgba(76,125,255,.28);
      animation: submitPulse 1.6s ease-in-out infinite;
    }
    .submitOverlayEyebrow{
      font-size: 11px;
      font-weight: 800;
      letter-spacing: .16em;
      text-transform: uppercase;
      color: rgba(255,255,255,.50);
      margin-bottom: 8px;
    }
    .submitOverlayTitle{
      font-size: 20px;
      font-weight: 900;
      color: rgba(255,255,255,.96);
      line-height: 1.1;
      margin-bottom: 8px;
    }
    .submitOverlayText{
      font-size: 12.5px;
      color: rgba(255,255,255,.72);
      line-height: 1.45;
      max-width: 310px;
      margin: 0 auto;
    }

    .resultToast{
      position: fixed;
      top: 18px;
      left: 50%;
      transform: translate(-50%, -18px);
      width: min(460px, calc(100vw - 20px));
      z-index: 1110;
      display: flex;
      align-items: center;
      gap: 12px;
      padding: 14px 16px;
      border-radius: 18px;
      border: 1px solid rgba(255,255,255,.14);
      background:
        linear-gradient(180deg, rgba(13,18,30,.96), rgba(8,12,21,.94));
      box-shadow: 0 20px 70px rgba(0,0,0,.45);
      opacity: 0;
      visibility: hidden;
      pointer-events: none;
      transition: opacity .22s ease, transform .22s ease, visibility .22s ease;
    }
    .resultToast.show{
      opacity: 1;
      visibility: visible;
      transform: translate(-50%, 0);
    }
    .resultToast.success{
      border-color: rgba(53,208,127,.26);
    }
    .resultToast.error{
      border-color: rgba(255,77,90,.24);
    }
    .resultToastIcon{
      width: 42px;
      height: 42px;
      flex: 0 0 auto;
      border-radius: 14px;
      display: grid;
      place-items: center;
      font-size: 18px;
      font-weight: 900;
      color: #06110B;
      background: linear-gradient(135deg, rgba(53,208,127,.98), rgba(53,208,127,.68));
      box-shadow: inset 0 1px 0 rgba(255,255,255,.18);
    }
    .resultToast.error .resultToastIcon{
      color: #fff;
      background: linear-gradient(135deg, rgba(255,77,90,.98), rgba(255,77,90,.68));
    }
    .resultToastBody{
      display: flex;
      flex-direction: column;
      gap: 3px;
      min-width: 0;
    }
    .resultToastBody strong{
      font-size: 13px;
      color: rgba(255,255,255,.95);
      line-height: 1.2;
    }
    .resultToastBody span{
      font-size: 11.5px;
      color: rgba(255,255,255,.70);
      line-height: 1.35;
    }

    body.is-submitting .app{
      filter: grayscale(.22) brightness(.84);
      transform: scale(.992);
      transition: filter .24s ease, transform .24s ease;
    }

    @keyframes submitSpin{
      from{ transform: rotate(0deg); }
      to{ transform: rotate(360deg); }
    }
    @keyframes submitSpinReverse{
      from{ transform: rotate(360deg); }
      to{ transform: rotate(0deg); }
    }
    @keyframes submitPulse{
      0%, 100%{ transform: scale(.88); opacity: .62; }
      50%{ transform: scale(1); opacity: 1; }
    }
