:root{
 color-scheme:light;--bg:#F7F8FA;--surface:#FFFFFF;--ink:#111215;
 --muted:#525861;--line:#D7DADF;--soft:#F0F1F3;--dark:#101113;
 --shadow:0 13px 43px rgba(17,18,21,.14);--focus:#6A8DCE;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;width:100%;height:100%;height:100dvh;overflow:hidden;overscroll-behavior:none;background:var(--bg);color:var(--ink)}
body{font:15px/1.45 var(--v-ui),system-ui,sans-serif;-webkit-font-smoothing:antialiased}
button,input,select{font:inherit}
button{cursor:pointer;touch-action:manipulation}
button:disabled{cursor:not-allowed;opacity:.55}
:focus-visible{outline:3px solid var(--focus);outline-offset:3px}
[hidden]{display:none!important}
.visually-hidden{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.skip{position:absolute;left:-9999px;top:3px;background:var(--surface);z-index:100}
.skip:focus{left:10px}
svg{width:23px;height:23px;flex-shrink:0}
#application{position:fixed;inset:0;width:100%;height:100dvh;isolation:isolate}
.list-scroller{position:absolute;inset:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--line) transparent;padding:0 16px calc(128px + env(safe-area-inset-bottom))}
.list-content{max-width:740px;width:100%;margin:0 auto;padding-top:clamp(25px,5vh,55px)}
.items{display:grid;gap:9px}
.list-item{border:1px solid var(--line);border-radius:10px;background:var(--surface);display:flex;gap:12px;align-items:center;min-height:74px;padding:13px 14px;animation:itemIn .17s ease-out both}
.item-done{opacity:.58}
.item-done .item-name{text-decoration:line-through}
.item-check{width:43px;height:43px;border:1px solid var(--line);border-radius:10px;display:grid;place-items:center;background:var(--soft);color:var(--ink);flex-shrink:0}
.item-check svg{width:19px;height:19px}
.item-done .item-check{background:var(--ink);color:var(--surface)}
.item-open{display:flex;align-items:center;justify-content:space-between;gap:11px;width:100%;min-width:0;text-align:left;border:0;background:transparent;color:var(--ink);padding:0}
.item-descr{flex:1;min-width:0}
.item-name{display:block;font-size:15px;font-weight:700;line-height:1.3;overflow-wrap:anywhere}
.item-sub{display:block;font-size:12px;color:var(--muted);margin-top:5px;overflow-wrap:anywhere}
.item-value{font-weight:700;font-size:17px;flex-shrink:0;white-space:nowrap;font-variant-numeric:tabular-nums}
.totals{margin:16px 0 12px;border-top:1px solid var(--line);padding:20px 5px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.totals span{color:var(--muted);font-size:13px}
.totals strong{font-size:21px;font-variant-numeric:tabular-nums}
.dock-wrap{position:fixed;bottom:calc(18px + env(safe-area-inset-bottom));left:0;right:0;pointer-events:none;display:flex;justify-content:center;align-items:flex-end;z-index:30;padding:0 14px}
.dock{pointer-events:auto;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);color:var(--ink);border-radius:10px;width:132px;height:67px;max-width:100%;display:flex;flex-direction:column;overflow:hidden;transition:width .28s cubic-bezier(.2,.75,.18,1),height .35s cubic-bezier(.2,.75,.18,1),border-radius .3s}
.dock[data-mode='manual'],.dock[data-mode='camera'],.dock[data-mode='quantity'],.dock[data-mode='tier'],.dock[data-mode='edit'],.dock[data-mode='loading']{width:min(398px,calc(100vw - 28px));height:min(570px,calc(100dvh - 37px - env(safe-area-inset-bottom)));border-radius:10px}
.dock-content{flex:1;min-height:0;display:flex;flex-direction:column;overflow:auto;overscroll-behavior:contain;padding:17px 18px 5px}
.dock[data-mode='closed'] .dock-content{display:none}
.dock-buttons{display:flex;justify-content:center;align-items:center;gap:2px;flex-shrink:0;width:100%;height:65px;padding:7px 10px 8px;background:var(--surface)}
.dock-button{border:0;background:transparent;color:var(--ink);width:55px;height:50px;display:grid;place-items:center;border-radius:10px}
.dock-button svg{width:25px;height:25px}
.dock-button.active{background:var(--soft)}
.dock-button:active{background:var(--soft)}
.dock-heading{margin:0 0 10px;display:flex;align-items:center;justify-content:space-between;min-height:32px}
.dock-heading strong{font-size:16px;letter-spacing:-.025em}
.mini-close{border:0;border-radius:10px;background:var(--soft);color:var(--ink);width:36px;height:36px;display:grid;place-items:center}
.mini-close svg{width:18px;height:18px}
.dock-form{flex:1;display:flex;flex-direction:column;gap:9px}
.field-label{display:block;color:var(--muted);font-size:12px;font-weight:600;margin:4px 0 2px}
.field-input{border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:10px;padding:13px 14px;min-height:50px;width:100%;font-size:16px}
.field-input:focus{border-color:#85898f}
.row-fields{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.qty-block{display:flex;flex-direction:column;justify-content:center;align-items:center;flex:1;min-height:110px;gap:12px}
.qty-label{font-size:13px;color:var(--muted);text-align:center}
.qty-stepper{display:flex;align-items:center;justify-content:center;gap:11px}
.qty-stepper button{width:57px;height:57px;border-radius:10px;border:1px solid var(--line);display:grid;place-items:center;background:var(--soft);color:var(--ink)}
.qty-stepper button svg{width:24px;height:24px}
.qty-number{font-size:34px;line-height:1.1;font-weight:700;font-variant-numeric:tabular-nums;min-width:78px;text-align:center}
.primary-btn{width:100%;min-height:53px;display:flex;align-items:center;justify-content:center;gap:9px;border:0;border-radius:10px;background:var(--ink);color:var(--surface);font-size:15px;font-weight:700;padding:11px 14px}
.primary-btn svg{width:20px;height:20px}
.outline-btn{width:100%;min-height:49px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font-weight:700}
.minimal-note{font-size:12px;color:var(--muted);line-height:1.45;text-align:center;margin:0}
.item-draft-name{font-size:17px;font-weight:700;letter-spacing:-.02em;text-align:center;margin-top:8px}
.item-draft-detail{font-size:13px;text-align:center;color:var(--muted);margin:0}
.item-draft-price{text-align:center;margin:0;font-size:14px;color:var(--muted)}
.inline-alert{padding:11px 13px;background:var(--soft);border:1px solid var(--line);border-radius:10px;color:var(--muted);font-size:13px}
.camera-square{position:relative;width:100%;aspect-ratio:1/1;max-height:335px;background:#111214;border-radius:10px;overflow:hidden;display:grid;place-items:center;flex-shrink:0}
.camera-square video,.camera-square img{width:100%;height:100%;position:absolute;inset:0;object-fit:cover}
.camera-square video{transform:scaleX(1)}
.camera-guides{position:absolute;inset:13%;pointer-events:none}
.corner{position:absolute;width:26px;height:26px;border:3px solid #FFF;filter:drop-shadow(0 1px 3px #0009)}
.corner.tl{top:0;left:0;border-right:0;border-bottom:0;border-radius:6px 0 0}
.corner.tr{top:0;right:0;border-left:0;border-bottom:0;border-radius:0 6px 0 0}
.corner.bl{bottom:0;left:0;border-right:0;border-top:0;border-radius:0 0 0 6px}
.corner.br{bottom:0;right:0;border-left:0;border-top:0;border-radius:0 0 6px}
.camera-hint{font-size:12px;color:var(--muted);text-align:center;min-height:28px;margin:10px 0 6px}
.camera-controls{display:flex;align-items:center;justify-content:center;gap:20px;padding:4px 0 2px}
.capture-button{width:70px;height:70px;border:4px solid var(--ink);background:var(--surface);border-radius:50%;display:grid;place-items:center;padding:6px}
.capture-button span{width:100%;height:100%;border-radius:50%;background:var(--ink)}
.capture-button:disabled{opacity:.4}
.upload-button{width:53px;height:53px;border:1px solid var(--line);border-radius:10px;background:var(--soft);color:var(--ink);display:grid;place-items:center}
.upload-button svg{width:24px;height:24px}
.camera-spacer{width:53px}
.photo-flash{position:absolute;inset:0;background:#FFF;opacity:0;pointer-events:none;z-index:4}
.photo-flash.fire{animation:cameraFlash .35s ease-out both}
.loading-canvas{aspect-ratio:1/1;width:100%;background:#171819;color:white;position:relative;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;overflow:hidden}
.loading-image{position:absolute;inset:0;background-position:center;background-size:cover;filter:blur(12px) brightness(.22);transform:scale(1.08)}
.loading-orbit{position:relative;z-index:1;width:74px;height:74px;border:5px solid rgba(255,255,255,.24);border-top-color:#FFF;border-radius:50%;animation:spin .8s linear infinite}
.loading-canvas span{z-index:1;font-weight:600}
.tier-layout{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:6px}
.tier-symbol{display:grid;place-items:center;width:54px;height:54px;border-radius:10px;background:var(--soft)}
.tier-symbol svg{width:27px;height:27px}
.tier-title{font-weight:700;text-align:center;font-size:18px;line-height:1.3;max-width:26ch}
.tier-copy{font-size:13px;line-height:1.55;text-align:center;color:var(--muted);margin:0}
.tier-choices{width:100%;display:grid;gap:10px;margin-top:10px}
.tier-choices button{min-height:53px}
.tier-secondary{font-size:12px;color:var(--muted);text-align:center;margin:0}
.edit-secondary{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:8px}
.delete-button{border:0;background:transparent;color:#8A3939;padding:12px;font-weight:700}
.flash{position:fixed;inset:0;background:white;z-index:100;pointer-events:none;opacity:0;animation:screenFlash .39s ease-out both}
.toast{pointer-events:none;position:fixed;bottom:calc(100px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);z-index:45;max-width:calc(100vw - 30px);padding:12px 16px;border-radius:10px;background:#242528;color:#FFF;font-size:13px;font-weight:600;text-align:center;box-shadow:0 14px 35px #0004}
.auth-screen{position:fixed;inset:0;z-index:70;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:15px;background:var(--bg)}
.auth-spinner{width:40px;height:40px;border:3px solid var(--line);border-top-color:var(--ink);border-radius:50%;animation:spin 1s linear infinite}
.auth-screen p{color:var(--muted);font-size:14px;text-align:center}
#auth-retry{border:0;background:var(--ink);color:white;border-radius:10px;min-height:48px;padding:8px 20px}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes cameraFlash{0%{opacity:0}20%{opacity:1}65%{opacity:.85}100%{opacity:0}}
@keyframes screenFlash{0%{opacity:0}30%{opacity:1}100%{opacity:0}}
@keyframes itemIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:430px){
 .list-scroller{padding-left:12px;padding-right:12px}
 .list-content{padding-top:20px}
 .item-value{font-size:15px}
 .item-name{font-size:14px}
 .list-item{gap:8px;padding:10px}
 .item-check{width:41px;height:41px}
 .dock{border-radius:10px}
 .dock-content{padding:14px 14px 4px}
 .camera-square{max-height:calc(min(100vw - 58px, 335px))}
}
@media(max-height:690px){
 .dock[data-mode]:not([data-mode='closed']){height:min(520px,calc(100dvh - 25px - env(safe-area-inset-bottom)))}
 .camera-square{max-height:min(280px,calc(100dvh - 220px))}
 .camera-controls{gap:12px}
 .capture-button{width:59px;height:59px}
}
@media(prefers-reduced-motion:reduce){
 *,*::before,*::after{animation:none!important;transition:none!important}
 .loading-orbit,.auth-spinner{border-color:#999;border-top-color:#111}
 .photo-flash.fire,.flash{opacity:0}
}

/* Compact viewfinder, measured against the actual visual viewport. */
.dock[data-mode='manual'],
.dock[data-mode='camera'],
.dock[data-mode='quantity'],
.dock[data-mode='tier'],
.dock[data-mode='edit'],
.dock[data-mode='loading']{
  height:min(530px,calc(100dvh - 26px - env(safe-area-inset-bottom)));
}
.dock-content{
  padding:14px 15px 6px;
  overflow:hidden;
  overscroll-behavior:none;
  scrollbar-width:none;
}
.dock-content::-webkit-scrollbar{display:none}
.dock[data-mode='camera'] .dock-content,
.dock[data-mode='loading'] .dock-content{
  position:relative;justify-content:center;align-items:center;
  gap:12px;
}
.dock[data-mode='camera'] .dock-heading,
.dock[data-mode='loading'] .dock-heading{
  position:absolute;top:7px;right:0;z-index:9;
  margin:0;min-height:36px;
}
.dock[data-mode='camera'] .dock-heading strong,
.dock[data-mode='loading'] .dock-heading strong{display:none}
.dock[data-mode='camera'] .mini-close,
.dock[data-mode='loading'] .mini-close{
  background:rgba(255,255,255,.92);color:#101113;
  box-shadow:0 2px 8px #0002;
}
.camera-square{
  width:min(100%, 336px, calc(100dvh - 235px - env(safe-area-inset-bottom)));
  height:auto;
  max-height:none;
  min-width:0;
  min-height:0;
  flex:0 1 auto;
  aspect-ratio:1/1;
  margin:0 auto;
  border-radius:10px;
}
.camera-hint{
  position:absolute!important;
  width:1px!important;
  height:1px!important;
  padding:0!important;
  margin:-1px!important;
  overflow:hidden!important;
  clip-path:inset(50%);
  white-space:nowrap;
  border:0!important;
}
.camera-controls{
  flex:0 0 68px;
  min-height:0;
  height:68px;
  width:100%;
  justify-content:center;
  gap:18px;
  padding:0;
  margin:0;
}
.capture-button{
  width:62px;height:62px;
  padding:6px;
  border:3px solid var(--ink);
  background:var(--surface);
  box-shadow:0 2px 9px rgba(0,0,0,.08);
}
.capture-button span{
  background:#fff;
  border:2px solid var(--ink);
}
.upload-button{
  width:49px;height:49px;
  border-radius:10px;
}
.camera-spacer{width:49px}
.dock-buttons{height:60px;padding:5px 9px 7px}
.dock-button{height:48px}
.dock[data-mode='manual'] .dock-form,
.dock[data-mode='edit'] .dock-form{
  min-height:0;
  gap:6px;
}
.dock[data-mode='manual'] .field-label,
.dock[data-mode='edit'] .field-label{margin:2px 0 0}
.dock[data-mode='manual'] .field-input,
.dock[data-mode='edit'] .field-input{min-height:46px;padding:10px 12px}
.dock[data-mode='manual'] .qty-block,
.dock[data-mode='edit'] .qty-block{min-height:70px;gap:7px}
.dock[data-mode='manual'] .qty-stepper button,
.dock[data-mode='edit'] .qty-stepper button{width:49px;height:49px}
.dock[data-mode='manual'] .qty-number,
.dock[data-mode='edit'] .qty-number{font-size:27px}
.dock[data-mode='manual'] .primary-btn,
.dock[data-mode='edit'] .primary-btn{min-height:48px}
.dock[data-mode='edit'] .edit-secondary{margin-top:0}
.dock[data-mode='edit'] .delete-button{padding:6px 10px}

.list-content:has(.empty-list){
  display:flex;
  flex-direction:column;
  justify-content:center;
  min-height:calc(100dvh - 165px - env(safe-area-inset-bottom));
  padding-top:0;
}
.empty-list{
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:13px;
  padding:12px;
  color:var(--muted);
}
.empty-mark{
  width:70px;height:70px;
  border:1px solid var(--line);
  background:var(--surface);
  color:var(--muted);
  border-radius:10px;
  display:grid;
  place-items:center;
}
.empty-mark svg{width:30px;height:30px;stroke-width:1.6}
.empty-list strong{font-size:15px;font-weight:600;letter-spacing:-.02em}

.loading-scene{
  width:min(100%,336px,calc(100dvh - 204px - env(safe-area-inset-bottom)));
  max-height:100%;
  aspect-ratio:1/1;
  flex:0 1 auto;
  border-radius:10px;
  background:#121315;
  position:relative;
  overflow:hidden;
  display:grid;
  place-items:center;
  isolation:isolate;
  animation:sceneEnter .44s cubic-bezier(.2,.8,.2,1) both;
  box-shadow:0 10px 25px rgba(0,0,0,.08);
}
.scan-photo{
  position:absolute;inset:-4%;
  background-size:cover;background-position:center;
  filter:grayscale(1) brightness(.37) contrast(1.1);
  transform:scale(1.07);
  animation:scanBreath 5s ease-in-out infinite alternate;
}
.loading-scene::before{
  content:"";position:absolute;inset:0;z-index:1;
  background:radial-gradient(circle at 50% 44%,transparent 10%,rgba(0,0,0,.5) 76%),
  linear-gradient(160deg,rgba(255,255,255,.06),transparent 40%);
}
.scan-mesh{
  position:absolute;inset:0;z-index:2;opacity:.13;
  background-image:linear-gradient(#fff2 1px,transparent 1px),linear-gradient(90deg,#fff2 1px,transparent 1px);
  background-size:25px 25px;
  mask-image:radial-gradient(circle at center,#000,transparent 73%);
}
.scan-beam{
  position:absolute;
  left:8%;right:8%;
  height:2px;top:9%;
  z-index:3;
  background:linear-gradient(90deg,transparent 0%,#fff 20%,#fff 80%,transparent 100%);
  box-shadow:0 0 9px #fff8,0 0 26px #fff6;
  animation:scanTraverse 2.5s cubic-bezier(.45,0,.55,1) infinite alternate;
}
.scan-beam::after{
  content:"";position:absolute;inset:0 0 auto;
  height:82px;
  background:linear-gradient(to bottom,rgba(255,255,255,.16),transparent);
  transform:translateY(-82px);
}
.scan-reticle{
  display:grid;place-items:center;
  position:relative;z-index:4;
  width:122px;height:122px;
}
.scan-halo{
  position:absolute;inset:0;border:1px solid rgba(255,255,255,.36);
  border-radius:50%;
  border-top-color:#fff;
  border-right-color:#fff;
  animation:spin 4s linear infinite;
}
.scan-halo::before{
  content:"";position:absolute;inset:10px;
  border:1px dashed rgba(255,255,255,.28);
  border-radius:50%;
  animation:scanHaloPulse 1.6s ease-in-out infinite;
}
.scan-core{
  position:relative;
  width:76px;height:76px;
  display:grid;place-items:center;
  border:1px solid rgba(255,255,255,.4);
  border-radius:10px;
  background:rgba(255,255,255,.12);
  backdrop-filter:blur(12px);
  box-shadow:0 0 30px rgba(255,255,255,.08);
}
.scan-core svg{width:33px;height:33px;color:#fff;stroke-width:1.5}
.scan-caption{
  position:absolute;bottom:18px;left:0;right:0;z-index:5;
  display:flex;align-items:center;justify-content:center;gap:9px;
  color:#fff;
  font-size:11px;letter-spacing:.19em;
}
.scan-caption strong{font-weight:700}
.scan-dots{display:flex;gap:3px;align-items:center}
.scan-dots i{width:4px;height:4px;border-radius:50%;background:#fff;opacity:.3;animation:dotPulse 1.2s ease-in-out infinite}
.scan-dots i:nth-child(2){animation-delay:.2s}
.scan-dots i:nth-child(3){animation-delay:.4s}
@keyframes sceneEnter{from{opacity:.4;transform:scale(.93)}to{opacity:1;transform:scale(1)}}
@keyframes scanTraverse{from{top:11%}to{top:82%}}
@keyframes scanBreath{from{transform:scale(1.07)}to{transform:scale(1.16)}}
@keyframes scanHaloPulse{0%,100%{opacity:.35;transform:scale(.95)}50%{opacity:.85;transform:scale(1.03)}}
@keyframes dotPulse{0%,75%,100%{opacity:.25;transform:translateY(0)}35%{opacity:1;transform:translateY(-2px)}}
@media(max-height:630px){
  .dock[data-mode='camera'] .dock-content,.dock[data-mode='loading'] .dock-content{gap:6px;padding-top:9px}
  .camera-controls{flex-basis:57px;height:57px}
  .capture-button{width:55px;height:55px}
  .upload-button{width:43px;height:43px}
  .camera-spacer{width:43px}
  .dock-buttons{height:54px}
  .dock-button{height:43px}
}
@media(prefers-reduced-motion:reduce){
  .loading-scene,.scan-photo,.scan-beam,.scan-halo,.scan-halo::before,.scan-dots i{animation:none!important}
  .scan-beam{top:48%}
}

/* 2026-10-24 — compact aligned controls and clear item editing. */
.dock-wrap{
  display:flex;flex-direction:column;align-items:center;justify-content:flex-end;
  gap:10px;
}
.dock{flex:0 0 auto}
.dock-buttons{
  display:grid;
  grid-template-columns:repeat(2,54px);
  column-gap:6px;
  place-content:center;
  justify-items:center;
  align-items:center;
  padding:4px 0;
}
.dock-button{
  display:grid;place-items:center;justify-self:center;align-self:center;
  width:54px;height:50px;
  padding:0;margin:0;line-height:0;
}
.dock-button svg{
  width:24px;height:24px;
  display:block;margin:0;
  stroke-width:2;
}
.camera-controls{
  display:grid;
  grid-template-columns:48px 62px 48px;
  align-items:center;justify-content:center;
  column-gap:18px;
}
.camera-spacer{width:48px;height:48px}
.upload-button{width:48px;height:48px;display:grid;place-items:center;padding:0}
.upload-button svg{display:block;width:23px;height:23px;margin:0}
.capture-button{justify-self:center;align-self:center}
@media(max-height:630px){
 .camera-controls{grid-template-columns:44px 55px 44px;column-gap:16px}
 .camera-spacer,.upload-button{width:44px;height:44px}
}
.list-scroller{padding-bottom:calc(195px + env(safe-area-inset-bottom))}
.list-item{gap:12px}
.item-descr{min-width:0;flex:1}
.item-value{font-variant-numeric:tabular-nums}
.item-edit{
 width:46px;height:46px;flex:0 0 46px;
 border:0;background:var(--soft);color:var(--ink);
 display:grid;place-items:center;border-radius:10px;
 margin-left:0;padding:0;line-height:0;
}
.item-edit svg{display:block;width:20px;height:20px;margin:0}
.item-edit:active{background:var(--line)}
.edit-check-button{
 border:1px solid var(--line);border-radius:10px;
 min-height:43px;padding:8px 11px;
 background:var(--soft);color:var(--ink);
 font-size:13px;font-weight:600;
}
.edit-secondary{gap:6px}
.floating-totals{
 pointer-events:auto;
 width:min(280px,calc(100vw - 36px));
 border:1px solid var(--line);
 border-radius:10px;background:var(--surface);
 box-shadow:0 7px 25px #0d11151a;
 padding:11px 16px;
 display:grid;gap:5px;
 font-variant-numeric:tabular-nums;
}
.floating-totals>div{
 display:flex;align-items:center;justify-content:space-between;
 gap:16px;
}
.floating-totals span{
 font-size:12px;font-weight:500;color:var(--muted);
}
.floating-totals strong{
 font-size:14px;font-weight:700;letter-spacing:-.01em;white-space:nowrap;
}
.floating-totals>div+div{
 border-top:1px solid var(--line);
 padding-top:5px;
}
.floating-totals>div+div strong{font-size:17px}
.dock[data-mode='camera'] .dock-content,
.dock[data-mode='loading'] .dock-content{
 gap:10px;
}
.photo-flash.fire{
 animation:cameraFlash .35s ease-out both;
}
.loading-scene{
 animation:sceneEnter .23s ease-out both;
 box-shadow:none;
 background:#191a1c;
}
.scan-photo{
 inset:0;
 filter:grayscale(.75) brightness(.58) contrast(1.06);
 animation:none;
 transform:scale(1.015);
}
.loading-scene::before{
 background:linear-gradient(to bottom,rgba(0,0,0,.2),rgba(0,0,0,.28));
}
.scan-sweep{
 position:absolute;z-index:3;left:0;right:0;top:12%;
 height:2px;pointer-events:none;
 background:linear-gradient(90deg,transparent,#ffffffd8 24%,#ffffff 50%,#ffffffd8 76%,transparent);
 box-shadow:0 0 9px #ffffff75;
 animation:scanSweep 2.35s ease-in-out infinite alternate;
}
.scan-progress{
 position:relative;z-index:4;
 width:58px;height:58px;
 border:3px solid rgba(255,255,255,.25);
 border-top-color:#fff;
 border-right-color:#fff;
 border-radius:50%;
 animation:spin 1.15s linear infinite;
}
.scan-status{
 position:absolute;z-index:4;bottom:22px;left:0;right:0;
 color:#fff;
 font-size:11px;font-weight:600;text-align:center;
 letter-spacing:.14em;
}
@keyframes scanSweep{from{top:12%}to{top:86%}}
@media(prefers-reduced-motion:reduce){
 .scan-sweep{animation:none;top:50%}
 .scan-progress{animation:none;border-color:#fff9;border-top-color:#fff}
 .loading-scene{animation:none}
}

/* Price breakdown: verified normal baseline, savings and effective total. */
.floating-totals{width:min(310px,calc(100vw - 36px));gap:6px;padding:13px 16px}
.floating-totals span small{font-size:10px;color:var(--muted);font-weight:400}
.floating-totals .savings-line strong{font-weight:700;color:var(--ink)}
.floating-totals .final-line{border-top:1px solid var(--line);padding-top:8px;margin-top:2px}
.floating-totals .final-line span{font-size:13px;font-weight:700;color:var(--ink)}
.floating-totals .final-line strong{font-size:19px;font-weight:700}
.floating-totals .surcharge-line strong{font-weight:600}

/* Rande confirmation sheet — never use Chrome's native confirm or validation popups. */
.confirm-overlay{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:20px;overscroll-behavior:none}
.confirm-scrim{position:absolute;inset:0;background:rgba(10,11,13,.53);animation:confirmFade .18s ease-out}
.confirm-card{
 position:relative;isolation:isolate;
 width:min(100%,350px);border:1px solid var(--line);border-radius:10px;
 background:var(--surface);color:var(--ink);
 box-shadow:0 22px 75px rgba(0,0,0,.20);
 padding:24px;text-align:left;animation:confirmEnter .2s ease-out both;
}
.confirm-icon{display:grid;place-items:center;width:45px;height:45px;border-radius:10px;background:var(--soft);margin-bottom:14px}
.confirm-icon svg{width:23px;height:23px}
.confirm-card h2{font-size:20px;line-height:1.25;letter-spacing:-.025em;margin:0 0 8px}
.confirm-card p{font-size:14px;line-height:1.55;color:var(--muted);margin:0 0 23px}
.confirm-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.confirm-actions button{border:1px solid var(--line);min-height:48px;border-radius:10px;font-size:14px;font-weight:700}
.confirm-cancel{background:var(--soft);color:var(--ink)}
.confirm-accept{background:var(--ink);color:var(--surface)!important;border-color:var(--ink)!important}
.list-item.item-pending{opacity:.68;transition:opacity .16s ease}
.list-item.item-pending .item-edit{cursor:wait}
@keyframes confirmFade{from{opacity:0}to{opacity:1}}
@keyframes confirmEnter{from{opacity:0;transform:translateY(8px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(prefers-reduced-motion:reduce){.confirm-card,.confirm-scrim{animation:none!important}}

/* Rande Maps header and native single-screen interaction geometry. */
html[data-theme='dark']{
 color-scheme:dark;
 --bg:#0B0B0C;--surface:#151618;--ink:#F5F7FA;--muted:#A7ADB5;
 --line:#2A2D31;--soft:#1D1F23;--dark:#101113;
 --shadow:0 14px 38px rgba(0,0,0,.3);
}
.scan-header{
 position:absolute;z-index:18;top:0;left:0;right:0;
 height:calc(68px + env(safe-area-inset-top));
 padding-top:env(safe-area-inset-top);
 background:var(--surface);
 border-bottom:1px solid var(--line);
 display:flex;align-items:center;
}
.scan-header-inner{
 display:flex;align-items:center;justify-content:space-between;gap:12px;
 width:100%;max-width:780px;margin:auto;padding:0 18px;
}
.scan-header h1{
 margin:0;font-size:19px;font-weight:700;letter-spacing:-.035em;
 line-height:1.25;color:var(--ink);
}
#application .list-scroller{
 top:calc(68px + env(safe-area-inset-top));
 bottom:0;
}
.list-content:has(.empty-list){
 min-height:calc(100dvh - 225px - env(safe-area-inset-top) - env(safe-area-inset-bottom));
}
#application .dock-wrap{z-index:25}
.item-pending{opacity:1!important}
.item-pending .item-edit{opacity:1}
.dock-heading{
 align-items:center;min-height:43px;
 margin-bottom:10px;gap:10px;
}
.dock-heading strong{min-width:0}
.mini-close{
 display:grid;place-items:center;
 padding:0!important;
 width:42px!important;height:42px!important;
 min-width:42px!important;min-height:42px!important;
 line-height:0;
 flex:0 0 42px;
 border-radius:10px;
}
.mini-close i{
 display:grid;place-items:center;
 width:100%;height:100%;margin:0;padding:0;
 line-height:0;
}
.mini-close i svg{display:block;width:19px;height:19px;margin:0}
.dock[data-mode='camera'] .dock-heading,
.dock[data-mode='loading'] .dock-heading{
 top:9px;right:10px;
 min-height:42px;height:42px;
}
.dock[data-mode='camera'] .mini-close,
.dock[data-mode='loading'] .mini-close{
 background:rgba(250,250,250,.95);color:#111215;
}
/* The very same photograph and DOM square remain mounted during analysis. */
.camera-square.loading-scene.loading-on-photo{
 width:min(100%,336px,calc(100dvh - 235px - env(safe-area-inset-bottom)));
 aspect-ratio:1/1;
 max-height:none;
 flex:0 1 auto;
 margin:0 auto;
 border-radius:10px;
 transform:none!important;
 animation:none!important;
 background:#121315;
 box-shadow:none;
}
.loading-on-photo>img{
 position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
 filter:grayscale(.6) brightness(.52);
 transition:filter .35s ease;
}
.loading-on-photo::before{
 content:"";position:absolute;inset:0;z-index:1;
 background:linear-gradient(to bottom,rgba(0,0,0,.15),rgba(0,0,0,.36));
}
.loading-on-photo .scan-sweep,.loading-on-photo .scan-progress,.loading-on-photo .scan-status{
 animation-delay:.12s;
}
.dock[data-mode='loading'] .camera-controls{
 visibility:hidden!important;
 pointer-events:none!important;
}
.dock[data-mode='loading'] .dock-content{
 gap:10px;
 justify-content:center;
}
@media(max-height:630px){
 .camera-square.loading-scene.loading-on-photo{
  width:min(100%,336px,calc(100dvh - 235px - env(safe-area-inset-bottom)));
 }
}
@media(prefers-reduced-motion:reduce){
 .loading-on-photo>img{transition:none!important}
}


/* Dock motion: the bottom action rail NEVER participates in flex reflow.
 * Height/width morphs above it; content fades without being detached. */
.dock{
 position:relative;
 display:block;
 transform-origin:50% 100%;
 transition:
  width .42s cubic-bezier(.22,1,.36,1),
  height .42s cubic-bezier(.22,1,.36,1),
  border-radius .42s cubic-bezier(.22,1,.36,1),
  box-shadow .3s ease;
 will-change:width,height;
}
.dock[data-mode] .dock-content{
 position:absolute;
 inset:0 0 60px;
 width:100%;
 height:auto;
 min-height:0;
 flex:none;
 display:flex;
 flex-direction:column;
 opacity:1;
 transform:translate3d(0,0,0);
 transform-origin:50% 100%;
 transition:
  opacity .24s ease .10s,
  transform .40s cubic-bezier(.22,1,.36,1);
 overflow:hidden;
 pointer-events:auto;
}
.dock[data-mode='closed'] .dock-content{
 display:flex;
 opacity:0;
 transform:translate3d(0,10px,0) scale(.98);
 pointer-events:none;
 transition:
  opacity .20s ease,
  transform .34s cubic-bezier(.22,1,.36,1);
}
.dock[data-mode] .dock-buttons{
 position:absolute;
 bottom:0;left:0;right:0;
 z-index:10;
 width:100%;height:60px;
 margin:0;
 display:grid;
 grid-template-columns:repeat(2,54px);
 column-gap:6px;
 align-items:center;
 justify-items:center;
 place-content:center;
 padding:4px 0;
 background:var(--surface);
}
.dock[data-mode] .dock-button{
 display:grid;
 place-items:center;
 justify-self:center;
 align-self:center;
 width:54px;height:50px;
 padding:0;
 margin:0;
}
.dock[data-mode] .dock-button svg{
 display:block;
 width:24px;height:24px;
 margin:0;
}
@media(max-height:630px){
 .dock[data-mode] .dock-content{bottom:54px}
 .dock[data-mode] .dock-buttons{height:54px}
 .dock[data-mode] .dock-button{height:44px}
}
@media(prefers-reduced-motion:reduce){
 .dock,.dock[data-mode] .dock-content{transition:none!important;will-change:auto}
 .dock[data-mode='closed'] .dock-content{transform:none}
}


/* Restrained panel reveal, leaving the anchored action rail untouched. */
.dock[data-mode]:not([data-mode='closed']) .dock-content > * {
 animation:scan-panel-enter .26s cubic-bezier(.22,.8,.3,1) both;
}
@keyframes scan-panel-enter{
 from{opacity:0;transform:translate3d(0,7px,0)}
 to{opacity:1;transform:translate3d(0,0,0)}
}
@media(prefers-reduced-motion:reduce){
 .dock .dock-content > *{animation:none!important}
}

/* Strong active state in both Maps-neutral themes; legible on a dark camera sheet. */
.dock[data-mode] .dock-button.active{
 background:var(--ink);
 color:var(--surface);
}
.dock[data-mode] .dock-button.active svg{stroke:currentColor}
.dock[data-mode] .dock-button.active:focus-visible{outline-color:var(--focus)}
/* Manual input is a flat, integrated menu – never a nested modal/card. */
.dock[data-mode='manual']{
 height:min(412px,calc(100dvh - 24px - env(safe-area-inset-bottom)));
}
.dock[data-mode='manual'] .dock-content{
 padding-top:12px;
}
.dock[data-mode='manual'] .dock-form{
 background:none;
 border:0;
 box-shadow:none;
 border-radius:0;
}
.dock[data-mode='manual'] .field-input{
 background:transparent;
 border:0;
 border-bottom:1px solid var(--line);
 border-radius:0;
 padding:9px 5px;
}
.dock[data-mode='manual'] .field-input:focus{
 outline-offset:0;
 border-bottom-color:var(--ink);
}

/* Account identity: distinctive neutral indigo avatar until a consented photo is available. */
#rande-profile-trigger{
 background:linear-gradient(145deg,#4E648D,#2D3952);
 border-color:rgba(145,165,202,.6);
 color:#fff;
 box-shadow:0 2px 12px rgba(24,35,61,.18);
 font-weight:700;
}
#rande-profile-trigger:has(img){
 background:var(--soft);
 border-color:var(--line);
}
#rande-profile-trigger img{object-fit:cover}
#rande-account #account-avatar{
 background:linear-gradient(145deg,#4E648D,#2D3952);
 color:#fff;
 border-color:rgba(145,165,202,.6);
}
#rande-account #account-avatar:has(img){background:var(--account-soft);border-color:var(--account-border)}
/* White camera release, visible on both neutral light and dark surfaces. */
.dock[data-mode='camera'] .capture-button{
 border:3px solid var(--ink);
 background:var(--surface);
 box-shadow:0 0 0 1px var(--line);
}
.dock[data-mode='camera'] .capture-button span{
 display:block;
 background:#fff;
 border:0;
 box-shadow:inset 0 0 0 1px rgba(0,0,0,.12);
}
html[data-theme='light'] .dock[data-mode='camera'] .capture-button span{background:#262A32}
.dock[data-mode='camera'] .capture-button:active span{transform:scale(.9)}
.dock[data-mode='camera'] .capture-button span{transition:transform .14s ease}
@media(prefers-reduced-motion:reduce){.dock[data-mode='camera'] .capture-button span{transition:none}}

/* 2026-10-24 — camera theme coherence, transition shielding and empty-state lock. */
:root{
 --scan-viewfinder:#E9EAED;
 --scan-viewfinder-border:#D7DADF;
 --scan-close-bg:#FFFFFF;
 --scan-close-fg:#111215;
 --scan-close-border:#D7DADF;
}
html[data-theme='dark']{
 --scan-viewfinder:#111214;
 --scan-viewfinder-border:#303238;
 --scan-close-bg:#26282C;
 --scan-close-fg:#F5F7FA;
 --scan-close-border:#3D4047;
}
/* A camera needs a neutral fallback surface; the live video remains unfiltered. */
.dock[data-mode='camera'] .camera-square{
 background:var(--scan-viewfinder);
 border:1px solid var(--scan-viewfinder-border);
 box-shadow:none;
}
.dock[data-mode='camera'] #camera-preview{
 filter:none!important;
 opacity:1;
}
.dock[data-mode='camera'] .camera-guides{filter:drop-shadow(0 1px 3px rgba(0,0,0,.38))}
.dock[data-mode='camera'] .mini-close,
.dock[data-mode='loading'] .mini-close{
 background:var(--scan-close-bg)!important;
 color:var(--scan-close-fg)!important;
 border:1px solid var(--scan-close-border)!important;
 box-shadow:0 2px 7px rgba(0,0,0,.11);
 display:grid;
 place-items:center;
}
.dock[data-mode='camera'] .mini-close i,
.dock[data-mode='loading'] .mini-close i{
 display:grid;
 place-items:center;
 line-height:0;
 width:100%;
 height:100%;
}
.dock[data-mode='camera'] .mini-close svg,
.dock[data-mode='loading'] .mini-close svg{display:block;width:19px;height:19px}
/* During a direct mode switch the outgoing form fades in its original dimensions,
   and the replacement is revealed only after the container finishes resizing. */
.dock[data-switching='out'] .dock-content{
 opacity:0!important;
 transform:translate3d(0,8px,0) scale(.985)!important;
 transition:opacity .15s ease, transform .17s ease!important;
 pointer-events:none!important;
}
.dock[data-switching='in'] .dock-content{
 opacity:0!important;
 transform:translate3d(0,8px,0) scale(.985)!important;
 transition:none!important;
 pointer-events:none!important;
}
.dock[data-switching] .dock-content>*{
 animation:none!important;
}
.dock[data-switching='out'] .dock-content{
 /* prevent the outgoing manual form from reaching the round bottom edge */
 clip-path:inset(0 0 0 0 round 12px);
}
.dock[data-switching='in'] .dock-content{
 clip-path:none;
}
.list-scroller:has(.empty-list){
 overflow:hidden!important;
 overscroll-behavior:none!important;
 touch-action:none;
 scrollbar-width:none!important;
}
.list-scroller:has(.empty-list)::-webkit-scrollbar{display:none}
@media(prefers-reduced-motion:reduce){
 .dock[data-switching] .dock-content{transition:none!important;transform:none!important}
}

/* Manual menu fits completely above the anchored Lucide actions. */
.dock[data-mode='manual']{
 height:min(500px,calc(100dvh - 26px - env(safe-area-inset-bottom)));
}
.dock[data-mode='manual'] .dock-content{
 padding:13px 16px 16px;
}
.dock[data-mode='manual'] .dock-form{
 min-height:0;
 gap:6px;
}
.dock[data-mode='manual'] .dock-heading{flex:0 0 auto;margin-bottom:5px}
.dock[data-mode='manual'] #manual-total{flex:0 0 auto;margin:0}
.dock[data-mode='manual'] .primary-btn{
 flex-shrink:0;min-height:49px;
 margin-top:4px;margin-bottom:0;
}
/* A single white circle moves under the two Lucide icons as modes change. */
.dock[data-mode] .dock-buttons{position:absolute;isolation:isolate}
.dock-indicator{
 position:absolute;
 z-index:0;
 width:52px;height:50px;
 top:50%;
 left:calc(50% - 56px);
 border-radius:10px;
 background:#fff;
 border:1px solid rgba(16,17,19,.15);
 box-shadow:0 2px 10px rgba(0,0,0,.12);
 pointer-events:none;
 opacity:0;
 transform:translate3d(0,-50%,0) scale(.83);
 transition:transform .38s cubic-bezier(.2,.8,.2,1), opacity .2s ease;
}
.dock[data-mode='manual'] .dock-indicator,
.dock[data-mode='edit'] .dock-indicator{
 opacity:1;
 transform:translate3d(0,-50%,0) scale(1);
}
.dock[data-mode='camera'] .dock-indicator,
.dock[data-mode='loading'] .dock-indicator,
.dock[data-mode='tier'] .dock-indicator,
.dock[data-mode='quantity'] .dock-indicator{
 opacity:1;
 transform:translate3d(60px,-50%,0) scale(1);
}
.dock[data-mode] .dock-button{position:relative;z-index:1;isolation:isolate}
.dock[data-mode] .dock-button.active{
 background:transparent!important;
 color:#111215!important;
}
.dock[data-mode] .dock-button.active svg{stroke:currentColor!important}
@media(prefers-reduced-motion:reduce){
 .dock-indicator{transition:none}
}

/* Override the legacy short-viewport 520px rule: the manual menu uses
 * one consistent usable height on all mobile breakpoints. */
#dock[data-mode='manual']{
 height:min(500px,calc(100dvh - 26px - env(safe-area-inset-bottom)));
}

/* Header list action, aligned to the account avatar. */
.scan-header-actions{display:flex;gap:9px;align-items:center;justify-content:flex-end;flex-shrink:0}
.clear-list-button{
 width:44px;height:44px;flex:0 0 44px;
 display:grid;place-items:center;
 background:var(--soft);color:var(--ink);
 border:1px solid var(--line);border-radius:10px;
 padding:0;line-height:0;
 transition:background-color .18s,border-color .18s,color .18s;
}
.clear-list-button svg{display:block;width:20px;height:20px;margin:0}
.clear-list-button:disabled{opacity:.42;cursor:default}
@media(hover:hover) and (pointer:fine){.clear-list-button:not(:disabled):hover{border-color:#B94A55;color:#B94A55}}
.clear-list-button:not(:disabled):active{background:rgba(170,50,67,.1)}
@media(prefers-reduced-motion:reduce){.clear-list-button{transition:none}}

/* 2026-10-24 — Finishing pass: shared motion language, focus and panel layering. */
:root{
 --scan-motion-fast:180ms;
 --scan-motion-medium:300ms;
 --scan-ease-out:cubic-bezier(.16,1,.3,1);
}
/* Subtotal remains in the identical anchored position as the dock expands.
   It is physically behind the opaque dock, not removed/reinserted. */
#dock-wrap{
 position:fixed;
 isolation:isolate;
}
#dock-wrap #floating-totals{
 position:absolute;
 z-index:1;
 bottom:calc(67px + 10px);
 left:50%;
 margin:0;
 transform:translateX(-50%);
 flex:none;
 pointer-events:none;
 opacity:1;
 box-shadow:0 7px 25px rgba(13,17,21,.10);
 transition:opacity .25s ease,box-shadow .25s ease;
}
#dock-wrap #dock{
 position:relative;
 z-index:2;
 flex:none;
}
#dock-wrap:has(#dock:not([data-mode='closed'])) #floating-totals{
 /* Remains mounted and fixed behind the expanded opaque panel. */
 opacity:1;
}
.field-input:focus,
.field-input:focus-visible,
.dock[data-mode='manual'] .field-input:focus,
.dock[data-mode='edit'] .field-input:focus-visible{
 border-color:#FFFFFF!important;
 border-bottom-color:#FFFFFF!important;
 outline:2px solid #FFFFFF!important;
 outline-offset:1px;
 box-shadow:0 0 0 1px rgba(25,28,34,.35),0 0 0 4px rgba(255,255,255,.09);
 transition:border-color .16s ease,box-shadow .16s ease;
}
html[data-theme='light'] .field-input:focus,
html[data-theme='light'] .field-input:focus-visible{
 box-shadow:0 0 0 1px rgba(24,26,31,.60),0 0 0 4px rgba(24,26,31,.09);
}
.qty-stepper button{
 position:relative;
 transform:scale(1);
 transform-origin:center;
 transition:
  background-color .2s ease,
  border-color .2s ease,
  box-shadow .22s ease,
  transform .13s cubic-bezier(.2,.75,.18,1);
}
.qty-stepper button:active{
 transform:scale(.85);
 box-shadow:inset 0 1px 6px rgba(0,0,0,.12);
}
@media(hover:hover) and (pointer:fine){.qty-stepper button:not(:disabled):hover{
 border-color:color-mix(in srgb,var(--ink) 40%,var(--line));
}}
.qty-number,.item-value,.floating-totals strong,#manual-total,.item-draft-price{
 font-variant-numeric:tabular-nums;
}
.primary-btn,.outline-btn,.item-edit,.clear-list-button,.mini-close,.upload-button{
 transform-origin:center;
 transition:
  background-color .19s ease,
  color .19s ease,
  border-color .19s ease,
  box-shadow .22s ease,
  transform .18s var(--scan-ease-out);
}
.primary-btn:active,.outline-btn:active,.item-edit:active,
.clear-list-button:not(:disabled):active,.mini-close:active,.upload-button:active{
 transform:scale(.952);
}
.dock-button:active svg,.account-back:active svg{
 transform:scale(.9);
}
.dock-button svg,.account-back svg{
 transition:transform .15s var(--scan-ease-out);
}
.items{position:relative}
.items .list-item.item-appearing{
 animation:scan-item-appear .38s cubic-bezier(.16,1,.3,1) both;
}
@keyframes scan-item-appear{
 0%{opacity:0;transform:translate3d(0,12px,0) scale(.967);filter:blur(1.5px)}
 58%{opacity:1;transform:translate3d(0,-2px,0) scale(1.008);filter:blur(0)}
 100%{opacity:1;transform:translate3d(0,0,0) scale(1);filter:blur(0)}
}
.scan-exit-layer{
 position:fixed;
 inset:0;
 z-index:19;
 pointer-events:none;
 overflow:hidden;
}
.scan-exit-ghost{
 position:absolute;
 box-sizing:border-box;
 display:flex;
 align-items:center;
 gap:12px;
 min-height:0;
 padding:13px 14px;
 border:1px solid var(--line);
 border-radius:10px;
 background:var(--surface);
 color:var(--ink);
 box-shadow:0 8px 20px rgba(0,0,0,.05);
 animation:scan-item-exit .26s ease-in both;
}
.scan-exit-ghost .item-descr{flex:1;min-width:0}
.scan-exit-ghost .item-edit{
 width:46px;height:46px;
 flex:0 0 46px;
 display:grid;
 place-items:center;
 border-radius:10px;
 background:var(--soft);
 color:var(--ink);
}
@keyframes scan-item-exit{
 from{opacity:1;transform:translate3d(0,0,0) scale(1);filter:blur(0)}
 to{opacity:0;transform:translate3d(0,-10px,0) scale(.975);filter:blur(1.2px)}
}
#dock[data-mode='closed'] .dock-content{opacity:0}
#dock[data-mode]:not([data-mode='closed']) .dock-content{will-change:opacity,transform}
#dock[data-mode]:not([data-mode='closed']) .dock-content>.dock-heading{
 animation:scan-panel-enter .25s var(--scan-ease-out) both;
}
#dock[data-mode]:not([data-mode='closed']) .dock-content>.dock-form,
#dock[data-mode]:not([data-mode='closed']) .dock-content>.tier-layout,
#dock[data-mode]:not([data-mode='closed']) .dock-content>.qty-block{
 animation:scan-content-rise .36s var(--scan-ease-out) both;
}
@keyframes scan-content-rise{
 from{opacity:0;transform:translate3d(0,9px,0)}
 to{opacity:1;transform:translate3d(0,0,0)}
}
#toast:not([hidden]){
 animation:scan-toast-arrive .25s var(--scan-ease-out) both;
}
@keyframes scan-toast-arrive{
 from{opacity:0;transform:translate3d(-50%,12px,0) scale(.97)}
 to{opacity:1;transform:translate3d(-50%,0,0) scale(1)}
}
@media(prefers-reduced-motion:reduce){
 .qty-stepper button,.primary-btn,.outline-btn,.item-edit,
 .dock-button svg,.account-back svg,.field-input,#dock-wrap #floating-totals{
  transition:none!important;
 }
 .items .list-item.item-appearing,.scan-exit-ghost,#toast:not([hidden]),
 #dock .dock-content>*{
  animation:none!important;filter:none!important;
 }
}

/* Rande Scan — mass/count input, pre-add correction and small-screen ergonomics. */
.dock[data-mode='scan-review']{
 width:min(398px,calc(100vw - 28px));
 height:min(585px,calc(100dvh - 26px - env(safe-area-inset-bottom)));
 border-radius:10px;
}
.dock[data-mode='scan-review'] .dock-content{
 padding:12px 15px 9px;
 gap:7px;
}
.dock[data-mode='scan-review'] .dock-heading{margin-bottom:1px;flex-shrink:0}
.measure-row{
 display:flex;
 align-items:center;
 justify-content:space-between;
 gap:10px;
 font-size:13px;
 font-weight:600;
 color:var(--muted);
}
.measure-toggle{
 display:inline-flex;
 align-items:center;
 gap:3px;
 padding:3px;
 border-radius:10px;
 border:1px solid var(--line);
 background:var(--soft);
}
.measure-toggle button{
 min-width:62px;
 min-height:32px;
 padding:4px 9px;
 border:0;
 border-radius:10px;
 color:var(--muted);
 background:transparent;
 font-size:12px;
 font-weight:700;
 transition:background .2s ease,color .2s ease,transform .16s ease;
}
.measure-toggle button.selected{
 background:var(--ink);
 color:var(--surface);
}
.measure-toggle button:active{transform:scale(.94)}
.dock[data-mode='manual'] .dock-form{gap:4px}
.dock[data-mode='manual'] .dock-heading{margin-bottom:1px}
.dock[data-mode='manual'] .qty-block{
 min-height:62px;
 flex:1 1 74px;
 gap:5px;
}
.dock[data-mode='manual'] .qty-label{display:none}
.dock[data-mode='manual'] .qty-stepper button{width:43px;height:43px}
.dock[data-mode='manual'] .qty-number{font-size:27px}
.dock[data-mode='manual'] .measure-row{margin-top:5px}
.dock[data-mode='manual'] .measure-weight-input{
 min-height:45px;
 height:45px;
 flex:0 0 45px;
}
.dock[data-mode='manual'] #manual-total{margin:5px 0}
.dock[data-mode='manual'] .primary-btn{min-height:46px}
.scan-draft-heading{
 display:flex;
 align-items:center;
 justify-content:center;
 gap:12px;
 min-height:70px;
}
.scan-draft-heading>div{min-width:0;flex:1}
.scan-draft-heading .item-draft-name,
.scan-draft-heading .item-draft-detail{text-align:left;margin:0}
.scan-draft-heading .item-draft-name{
 font-size:16px;
 line-height:1.35;
 overflow-wrap:anywhere;
}
.scan-draft-heading .item-draft-detail{
 margin-top:5px;
 white-space:normal;
 overflow-wrap:anywhere;
}
#scan-draft-edit{
 width:46px;
 height:46px;
 flex:0 0 46px;
 display:grid;
 place-items:center;
 background:var(--soft);
 border:1px solid var(--line);
 border-radius:10px;
 color:var(--ink);
 transition:transform .16s cubic-bezier(.2,.8,.2,1);
}
#scan-draft-edit svg{width:21px;height:21px}
#scan-draft-edit:active{transform:scale(.88)}
.dock[data-mode='quantity'] #draft-unit{margin:0;color:var(--muted);font-size:12px}
.dock[data-mode='quantity'] #draft-price{margin:0;font-size:14px;font-weight:600;color:var(--ink)}
.dock[data-mode='quantity'] .qty-block{flex:1;min-height:85px}
.dock[data-mode='quantity'] .dock-content{gap:7px}
#scan-review-form{
 min-height:0;
 display:flex;
 flex-direction:column;
 gap:5px;
 padding-bottom:2px;
}
#scan-review-form .field-label{margin:0;font-size:12px}
#scan-review-form>.field-input{min-height:41px;padding:8px 11px}
.review-grid{
 display:grid;
 grid-template-columns:minmax(0,1fr) minmax(0,1fr);
 gap:10px;
}
.review-grid label,.review-reference{
 display:flex;
 flex-direction:column;
 gap:3px;
 min-width:0;
 font-size:11px;
 font-weight:600;
 color:var(--muted);
}
.review-grid input,.review-grid select,.review-reference input{
 min-width:0;width:100%;
 min-height:41px;
 padding:7px 8px;
 color:var(--ink);
 background:var(--surface);
 border:1px solid var(--line);
 border-radius:10px;
 font:inherit;
 font-size:14px;
}
.review-grid select{
 color-scheme:inherit;
 padding-right:3px;
}
.review-reference input{margin-top:3px}
#scan-review-form .primary-btn{
 min-height:47px;
 flex-shrink:0;
 margin-top:auto;
}
@media(max-height:640px){
 .dock[data-mode='scan-review'] .dock-content{padding-top:9px;padding-bottom:2px;gap:4px}
 .dock[data-mode='scan-review'] .dock-heading{min-height:36px}
 #scan-review-form{gap:4px}
 #scan-review-form>.field-input{min-height:36px;padding:6px 9px}
 .review-grid input,.review-grid select,.review-reference input{min-height:36px}
 #scan-review-form .primary-btn{min-height:43px}
}
@media(prefers-reduced-motion:reduce){
 .measure-toggle button,#scan-draft-edit{transition:none!important}
}

/* Keep the confirmation fully clear of the anchored toolbar. */
#scan-review-form .primary-btn{margin-bottom:10px}

@media(max-height:640px){
 #scan-review-form{gap:3px}
 #scan-review-form .field-label{font-size:11px;line-height:1.1}
 #scan-review-form>.field-input{min-height:33px;height:33px;padding:5px 8px}
 .review-grid input,.review-grid select,.review-reference input{min-height:33px;height:33px;padding:5px 7px}
 .review-grid label,.review-reference{gap:2px;line-height:1.2}
 #scan-review-form .primary-btn{min-height:41px;margin-bottom:6px}
}

@media(max-height:640px){#scan-review-form .primary-btn{height:40px!important;min-height:40px!important;padding:5px 9px!important;margin-bottom:3px}}

/* Review forms have fixed content height; do not stretch the submit to the dock edge. */
#scan-review-form .primary-btn{margin-top:6px!important;margin-bottom:10px!important}

@media(max-height:640px){
 .dock[data-mode='manual'] .dock-content{padding-top:9px;padding-bottom:9px}
 .dock[data-mode='manual'] .field-label{margin:0}
 .dock[data-mode='manual'] .field-input{min-height:39px;height:39px;padding:7px 10px}
 .dock[data-mode='manual'] .measure-toggle button{min-height:27px;padding:2px 8px}
 .dock[data-mode='manual'] .measure-weight-input{min-height:39px;height:39px;flex-basis:39px}
 .dock[data-mode='manual'] #manual-total{margin:2px 0}
}

/* Product-only image identification — neutral compact confirmation. */
.dock[data-mode='product']{
 width:min(398px,calc(100vw - 28px));
 height:min(494px,calc(100dvh - 26px - env(safe-area-inset-bottom)));
 border-radius:10px;
}
.dock[data-mode='product'] .dock-content{
 padding:12px 16px 9px;
 gap:7px;
}
.dock[data-mode='product'] .dock-heading{min-height:42px;margin-bottom:2px;flex:0 0 auto}
#found-product-form{
 display:flex;
 flex-direction:column;
 gap:6px;
 min-height:0;
 overflow:hidden;
}
#found-product-form .field-label{margin:2px 0 0;font-size:12px}
#found-product-form>.field-input{
 flex:0 0 auto;
 min-height:44px;
 height:44px;
 padding:8px 11px;
}
#found-product-form .found-product-meta{
 margin:0;
 min-height:16px;
 max-height:35px;
 overflow:hidden;
 color:var(--muted);
 font-size:12px;
 line-height:1.4;
 overflow-wrap:anywhere;
}
#found-product-form .measure-row{margin:3px 0;min-height:38px}
#found-product-form .qty-block{
 flex:1 1 78px;
 min-height:64px;
 gap:5px;
}
#found-product-form .qty-label{display:none}
#found-product-form .qty-stepper button{width:46px;height:46px;min-width:46px}
#found-product-form .qty-number{font-size:30px}
#found-product-form #found-weight{
 flex:1 1 51px;
 min-height:44px;
 max-height:51px;
 align-self:stretch;
}
#found-product-form #found-total{
 font-size:12px;
 min-height:18px;
 margin:1px 0;
 color:var(--muted);
}
#found-product-form .primary-btn{
 margin:2px 0 8px;
 min-height:49px;
 flex:0 0 auto;
}
.dock[data-mode='product'] .dock-buttons{pointer-events:auto}
@media(max-height:640px){
 .dock[data-mode='product'] .dock-content{padding:8px 13px 4px;gap:4px}
 .dock[data-mode='product'] .dock-heading{min-height:36px;margin-bottom:0}
 #found-product-form{gap:3px}
 #found-product-form .field-label{font-size:11px;margin:0}
 #found-product-form>.field-input{min-height:37px;height:37px;padding:6px 9px}
 #found-product-form .measure-row{margin:0;min-height:32px}
 #found-product-form .measure-toggle button{min-height:28px}
 #found-product-form .qty-block{min-height:51px;flex-basis:55px;gap:2px}
 #found-product-form .qty-stepper button{width:40px;height:40px;min-width:40px}
 #found-product-form .qty-number{font-size:25px}
 #found-product-form #found-weight{min-height:39px;max-height:41px;flex-basis:41px}
 #found-product-form .primary-btn{min-height:43px;margin-bottom:5px;padding:7px 10px}
 #found-product-form .found-product-meta{font-size:11px;max-height:30px}
}

/* Reserve an explicit breathing gap between product confirmation and the fixed rail. */
#found-product-form .qty-block{flex:0 1 73px}
#found-product-form .primary-btn{margin-top:6px;margin-bottom:15px}

/* Prevent the product-only submit control from ever overlapping the action rail. */
#found-product-form{gap:3px}
#found-product-form .measure-row{min-height:33px;margin:0}
#found-product-form .qty-block{min-height:56px;flex:0 1 58px}
#found-product-form .primary-btn{margin-top:2px;margin-bottom:6px}
@media(max-height:640px){
 #found-product-form{gap:2px}
 #found-product-form .qty-block{min-height:46px;flex:0 1 47px}
 #found-product-form .measure-row{min-height:29px}
 #found-product-form .primary-btn{margin-top:1px;margin-bottom:3px}
}

/* Product-only sheet stays compact even under the legacy small-height media rule. */
#dock[data-mode='product']{height:min(475px,calc(100dvh - 26px - env(safe-area-inset-bottom)))}

/* Android app download, online/offline indicator and narrow mobile header. */
.download-app-button{text-decoration:none;cursor:pointer}
.download-app-button:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.connection-state{
 position:absolute;
 z-index:17;
 left:50%;
 transform:translateX(-50%);
 top:calc(76px + env(safe-area-inset-top));
 max-width:calc(100vw - 40px);
 white-space:nowrap;
 padding:7px 13px;
 border:1px solid var(--line);
 border-radius:10px;
 color:var(--ink);
 background:var(--surface);
 font-size:12px;
 font-weight:600;
 box-shadow:0 3px 14px rgba(0,0,0,.07);
 pointer-events:none;
}
#application:has(#connection-state:not([hidden])) .list-scroller{
 top:calc(106px + env(safe-area-inset-top));
}
html[data-app-shell='android'] .download-app-button{display:none!important}
@media(max-width:390px){
 .scan-header-inner{padding-left:12px;padding-right:12px;gap:6px}
 .scan-header h1{font-size:clamp(14px,4.1vw,18px);white-space:nowrap;min-width:0}
 .scan-header-actions{gap:5px}
 .scan-header-actions>.clear-list-button{width:39px;height:39px;flex-basis:39px;border-radius:10px}
 .scan-header-actions>#rande-profile-trigger{width:41px;height:41px;flex-basis:41px}
}

/* rCompras 1.0.1: black camera stage until decoded video is actually playable. */
#camera-square.camera-square{
 background:#000!important;
 border-color:#242424!important;
 position:relative;
 isolation:isolate;
}
#camera-square #camera-preview{
 display:block!important;
 width:100%;height:100%;object-fit:cover;
 background:#000!important;
 opacity:0!important;
 visibility:hidden;
 filter:none!important;
 transition:opacity .38s cubic-bezier(.16,1,.3,1)!important;
}
#camera-square.camera-ready #camera-preview{
 opacity:1!important;
 visibility:visible;
}
#camera-preview::-webkit-media-controls,
#camera-preview::-webkit-media-controls-panel,
#camera-preview::-webkit-media-controls-overlay-play-button,
#camera-preview::-webkit-media-controls-start-playback-button{
 display:none!important;
 -webkit-appearance:none!important;
}
#camera-square .camera-guides{z-index:3;pointer-events:none}
@media(prefers-reduced-motion:reduce){
 #camera-square #camera-preview{transition:none!important}
}

/* rCompras 1.0.4: preserve the last camera frame throughout dock collapse. */
#camera-square .camera-last-frame{
 position:absolute;inset:0;width:100%;height:100%;
 display:block;object-fit:cover;z-index:2;pointer-events:none;
 opacity:1!important;visibility:visible!important;
}
#camera-square.camera-frame-held #camera-preview{
 opacity:0!important;visibility:hidden!important;
}
#dock[data-mode='closed'] #camera-square.camera-frame-held .camera-last-frame{
 opacity:1!important;visibility:visible!important;
}
/* A high contrast sliding pill: dark in light theme, white in dark theme. */
html[data-theme='light'] #dock .dock-indicator{
 background:#25282B!important;
 border-color:#25282B!important;
 box-shadow:0 2px 9px rgba(12,13,16,.17);
 transition:transform .38s cubic-bezier(.2,.8,.2,1),opacity .2s ease,background-color .25s ease,border-color .25s ease;
}
html[data-theme='light'] #dock .dock-button.active{
 color:#FFFFFF!important;
 background:transparent!important;
 transition:color .23s ease;
}
html[data-theme='light'] #dock .dock-button.active svg{stroke:#FFFFFF!important}
html[data-theme='dark'] #dock .dock-indicator{background:#FFFFFF!important}
html[data-theme='dark'] #dock .dock-button.active{color:#111215!important;transition:color .23s ease}

/* Frame stays opaque while the viewport collapses; removed after the closing transition. */
#dock.camera-collapsing .dock-content{opacity:1!important;pointer-events:none!important;transform:none!important}
#dock.camera-collapsing .camera-square{background:#000!important}

/* Wholesale rule editor: optional, compact and vertically scrollable on mobile. */
.wholesale-settings{flex:0 0 auto;border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin:3px 0;background:var(--soft)}
.wholesale-settings summary{cursor:pointer;font-size:12px;font-weight:650;color:var(--ink);list-style-position:inside}
.wholesale-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}
.wholesale-grid label{display:flex;flex-direction:column;gap:4px;font-size:11px;font-weight:600;color:var(--muted)}
.wholesale-grid input{width:100%;min-width:0;min-height:37px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);padding:6px 8px;font:inherit;font-size:14px}
.wholesale-grid input:focus-visible{outline:2px solid var(--ink);outline-offset:1px}
#edit-total{font-size:12px;margin:2px 0}
#draft-wholesale{font-size:12px;line-height:1.4;margin:0}
.dock[data-mode='edit'] .dock-content,.dock[data-mode='manual'] .dock-content{overflow-y:auto}
@media(max-width:365px){.wholesale-grid{grid-template-columns:1fr}}

/* rCompras: onboarding, budget, frequent products and inline quantity/price controls */
#application .list-content{padding-top:18px}
.guest-bar{display:flex;gap:10px;align-items:center;justify-content:space-between;padding:12px 13px;margin-bottom:13px;background:var(--soft);border:1px solid var(--line);border-radius:10px;color:var(--ink);font-size:12px;font-weight:600}
.guest-bar button{padding:9px 10px;border:1px solid var(--ink);background:var(--ink);color:var(--surface);border-radius:10px;font-size:12px;font-weight:700}
.budget-card{border:1px solid var(--line);background:var(--surface);padding:12px 14px;border-radius:10px;margin-bottom:15px}
.budget-open{border:0;background:transparent;width:100%;color:var(--ink);display:flex;gap:10px;justify-content:space-between;align-items:center;text-align:left;padding:0}
.budget-open span{font-size:12px;color:var(--muted)}.budget-open strong{font-size:14px;margin-left:auto}.budget-open svg{width:16px;height:16px}
.budget-card progress{width:100%;height:7px;appearance:none;display:block;margin-top:11px;border:0;border-radius:10px;overflow:hidden;background:var(--soft)}
.budget-card progress::-webkit-progress-bar{background:var(--soft)}
.budget-card progress::-webkit-progress-value{background:var(--ink);border-radius:10px}
.budget-card progress::-moz-progress-bar{background:var(--ink)}
.budget-card p{margin:5px 0 0;font-size:11px;color:var(--muted)}
.budget-card p[data-level="high"]{color:#D74747;font-weight:700}
.budget-card p[data-level="medium"]{color:#AD751B;font-weight:700}
.recent-panel{margin-bottom:15px}.recent-panel h2{font-size:12px;font-weight:700;letter-spacing:.015em;color:var(--muted);margin:0 0 9px}
.recent-products{display:flex;gap:8px;overflow-x:auto;padding-bottom:5px;scrollbar-width:thin}
.recent-chip{flex:0 0 auto;max-width:205px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:1px solid var(--line);background:var(--surface);color:var(--ink);padding:10px 12px;border-radius:10px;font-size:12px;font-weight:600}
#items .list-item{display:flex;flex-direction:column;align-items:stretch;gap:9px;min-height:85px;padding:11px 13px}
.item-main{display:flex;gap:11px;align-items:center;justify-content:space-between;width:100%}
.item-main .item-value{font-size:15px}
.item-quick{display:flex;align-items:center;gap:8px;justify-content:space-between;border-top:1px solid var(--line);padding-top:8px}
.quick-measure{display:flex;align-items:center;gap:5px;min-width:0}
.quick-measure button{width:31px;height:31px;border:1px solid var(--line);border-radius:10px;background:var(--soft);color:var(--ink);display:grid;place-items:center}
.quick-measure button svg{width:15px;height:15px}
.quick-number{min-width:45px;text-align:center;font-size:12px;font-weight:700;white-space:nowrap}
.quick-weight{width:74px;min-height:34px;padding:5px 7px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font-size:13px}
.quick-price-label{display:flex;align-items:center;gap:3px;font-size:12px;font-weight:600;margin-left:auto;color:var(--muted)}
.quick-price{width:65px;min-height:34px;padding:5px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font-size:13px;font-variant-numeric:tabular-nums}
.item-quick .item-edit{width:34px;height:34px;min-width:34px;border-radius:10px}
.item-quick .item-edit svg{width:17px;height:17px}
.budget-overlay{position:fixed;inset:0;z-index:110;background:rgba(0,0,0,.48);display:grid;place-items:center;padding:15px}
.budget-dialog{width:min(410px,100%);padding:21px;background:var(--surface);color:var(--ink);border-radius:10px;display:grid;gap:11px}
.budget-dialog h2{margin:0;font-size:19px}.budget-dialog p{margin:0;font-size:12px;color:var(--muted)}
.budget-dialog label{font-size:13px;font-weight:600}.budget-dialog-actions{display:flex;gap:11px}
.budget-dialog-actions>*{flex:1}
@media(max-width:380px){.guest-bar{font-size:11px;padding:8px}.guest-bar button{font-size:11px}.quick-price{width:58px}.quick-number{min-width:36px}.item-quick{gap:4px}}

/* Scan processing and compact bottom area reserved for future advertising. */
:root{--rcompras-banner-reserve:54px}
#dock-wrap{bottom:calc(19px + var(--rcompras-banner-reserve) + env(safe-area-inset-bottom))}
#application .list-scroller{
 scroll-behavior:smooth;scroll-padding-block-start:12px;
 padding-bottom:calc(225px + var(--rcompras-banner-reserve) + env(safe-area-inset-bottom));
 overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;
}
#application .list-scroller:focus{outline:none}
.items{gap:10px}
#items>.list-item{will-change:auto;transition:background-color .18s ease,border-color .18s ease,box-shadow .2s ease}
#items>.list-item.item-appearing{animation:rcompras-row-reveal .35s cubic-bezier(.16,1,.3,1) both}
@keyframes rcompras-row-reveal{
 0%{opacity:0;transform:translate3d(0,17px,0) scale(.975);filter:blur(3px)}
 68%{opacity:1;filter:blur(0)}
 100%{opacity:1;transform:translate3d(0,0,0) scale(1);filter:blur(0)}
}
.scan-exit-ghost{animation:rcompras-row-remove .32s cubic-bezier(.55,0,.85,.5) both!important}
@keyframes rcompras-row-remove{
 0%{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}
 100%{opacity:0;transform:translateY(-10px) scale(.97);filter:blur(3px)}
}
.scan-processing{
 position:relative;display:flex;align-items:center;gap:13px;min-height:91px;overflow:hidden;
 background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:17px;
 isolation:isolate;animation:rcompras-row-reveal .3s cubic-bezier(.16,1,.3,1) both;
}
.scan-processing::before{
 content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
 background:linear-gradient(110deg,transparent 9%,rgba(130,136,150,.09) 32%,rgba(170,174,183,.21) 49%,rgba(130,136,150,.09) 66%,transparent 88%);
 background-size:230% 100%;animation:rcompras-scan-shimmer 1.6s linear infinite;
}
.scan-pending-orb{position:relative;z-index:1;width:38px;height:38px;flex:0 0 38px;border:3px solid var(--line);border-top-color:var(--ink);border-radius:50%;animation:rcompras-loading-spin .85s linear infinite}
.scan-pending-orb span{display:block;width:10px;height:10px;position:absolute;inset:0;margin:auto;background:var(--muted);opacity:.3;border-radius:50%}
.scan-pending-content{position:relative;z-index:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.scan-pending-content strong{font-size:14px;color:var(--ink)}
.scan-pending-content small{font-size:12px;color:var(--muted)}
.scan-processing-exiting{animation:rcompras-row-remove .34s ease-in both!important;pointer-events:none}
@keyframes rcompras-loading-spin{to{transform:rotate(360deg)}}
@keyframes rcompras-scan-shimmer{from{background-position:230% 0}to{background-position:-230% 0}}
.scan-inline-error{padding:15px 17px;background:var(--surface);border:1px solid var(--line);border-radius:10px;display:grid;gap:10px}
.scan-inline-error strong{font-size:14px}.scan-inline-error p{font-size:12px;line-height:1.5;color:var(--muted);margin:0}
.scan-inline-error>div{display:flex;gap:8px;flex-wrap:wrap}
.scan-inline-error button{border:1px solid var(--line);border-radius:10px;padding:10px 13px;font-size:12px;font-weight:700;background:var(--soft);color:var(--ink)}
.scan-inline-error .scan-error-main{background:var(--ink);color:var(--surface)}
@media(max-height:680px){
 #dock-wrap{bottom:calc(10px + var(--rcompras-banner-reserve) + env(safe-area-inset-bottom))}
 #application .list-scroller{padding-bottom:calc(190px + var(--rcompras-banner-reserve) + env(safe-area-inset-bottom))}
}
@media(prefers-reduced-motion:reduce){
 #items>.list-item.item-appearing,.scan-exit-ghost,.scan-processing,.scan-processing::before,.scan-pending-orb,.scan-processing-exiting{
  animation:none!important;filter:none!important;transform:none!important;
 }
 #application .list-scroller{scroll-behavior:auto}
}

/* Install feedback: accepting a browser prompt is not proof the Android icon appeared. */
.install-help-overlay{position:fixed;inset:0;z-index:135;padding:15px;display:grid;place-items:center;background:rgba(0,0,0,.53)}
.install-help-panel{width:min(410px,100%);background:var(--surface);color:var(--ink);padding:24px 21px 20px;border:1px solid var(--line);border-radius:10px;box-shadow:0 18px 55px rgba(0,0,0,.19);display:grid;gap:14px}
.install-help-icon{display:grid;place-items:center;width:46px;height:46px;border-radius:10px;background:var(--soft)}
.install-help-icon svg{width:23px;height:23px}
.install-help-panel h2{font-size:18px;letter-spacing:-.025em;margin:0}
.install-help-panel p{margin:0;line-height:1.6;font-size:14px;color:var(--muted)}
.install-help-panel .primary-btn{margin-top:7px}

/* R Compras: four fixed actions, compact cards and voice/budget dialogs. */
html,body{max-width:100%;overflow-x:hidden}
#application{overflow:hidden}
.scan-header-inner{gap:8px;padding-inline:clamp(10px,4vw,18px);min-width:0}
.scan-header h1{font-size:clamp(15px,4.3vw,19px);white-space:nowrap;flex-shrink:0}
.scan-header-actions{gap:clamp(2px,1.5vw,9px);min-width:0}
.credits-trigger{
 border:1px solid var(--line);background:var(--soft);color:var(--ink);border-radius:10px;
 font-size:12px;font-weight:800;font-variant-numeric:tabular-nums;
 padding:7px 8px;white-space:nowrap;min-height:34px;
}
.dock[data-mode='closed']{width:250px;height:64px;border-radius:10px}
.dock[data-mode] .dock-buttons{
 grid-template-columns:repeat(4,minmax(0,50px));column-gap:7px;
 width:100%;padding:3px 6px;height:60px;
}
.dock[data-mode] .dock-button{height:48px;width:50px;border-radius:10px}
.dock[data-mode] .dock-button svg{width:22px;height:22px}
.dock-button[data-level='medium']{color:#A16C12}
.dock-button[data-level='high']{color:#C44B49}
.dock[data-mode='voice']{
 width:min(398px,calc(100vw - 28px));
 height:min(420px,calc(100dvh - 140px - env(safe-area-inset-top) - env(safe-area-inset-bottom)));
 border-radius:10px;
}
.dock[data-mode='manual'],.dock[data-mode='edit'],.dock[data-mode='camera'],
.dock[data-mode='quantity'],.dock[data-mode='tier'],.dock[data-mode='loading']{
 max-height:calc(100dvh - 140px - env(safe-area-inset-top) - env(safe-area-inset-bottom));
}
.dock[data-mode] .dock-content{padding:11px 13px 2px;overflow-y:auto;scrollbar-width:none}
.dock[data-mode] .dock-content::-webkit-scrollbar{display:none}
.dock[data-mode='manual'] .dock-form,.dock[data-mode='edit'] .dock-form{gap:6px}
.dock[data-mode='manual'] .field-input,.dock[data-mode='edit'] .field-input{min-height:39px;padding:7px 10px}
.dock[data-mode='manual'] .qty-block,.dock[data-mode='edit'] .qty-block{min-height:49px;gap:3px}
.dock[data-mode='manual'] .qty-stepper button,.dock[data-mode='edit'] .qty-stepper button{width:38px;height:38px}
.dock[data-mode='manual'] .qty-number,.dock[data-mode='edit'] .qty-number{font-size:22px}
.dock[data-mode='manual'] .primary-btn,.dock[data-mode='edit'] .primary-btn{min-height:42px}
.dock[data-mode='manual'] .dock-heading,.dock[data-mode='edit'] .dock-heading{min-height:34px;margin-bottom:5px}
.dock[data-mode='manual'] .mini-close,.dock[data-mode='edit'] .mini-close{min-width:34px!important;min-height:34px!important;width:34px!important;height:34px!important}
.dock[data-mode='manual'] .field-label,.dock[data-mode='edit'] .field-label{margin:1px 0 0}
.dock[data-mode='manual'] .wholesale-settings,.dock[data-mode='edit'] .wholesale-settings{margin-top:0}
#application .list-scroller{padding-bottom:calc(205px + var(--rcompras-banner-reserve) + env(safe-area-inset-bottom));}
#items>.list-item{max-width:100%;min-width:0}
.item-quick{gap:5px;flex-wrap:nowrap;min-width:0}
.quick-price-label[hidden]{display:none!important}
.item-quick .item-edit,.item-quick .item-remove{
 display:grid;place-items:center;width:33px;height:33px;min-width:33px;
 border:1px solid var(--line);border-radius:10px;background:var(--soft);color:var(--ink);
 margin-left:0;padding:0;
}
.item-quick .item-remove{color:#BC5454}
.item-quick .item-remove svg,.item-quick .item-edit svg{width:16px;height:16px}
.item-quick button:disabled{opacity:.45}
.quick-price-label{min-width:0;margin-left:auto}
.quick-price{width:min(65px,16vw)}
.credits-overlay{position:fixed;inset:0;z-index:115;background:rgba(0,0,0,.52);display:grid;place-items:center;padding:14px}
.credits-dialog{background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:10px;padding:20px;width:min(390px,100%);display:grid;gap:16px}
.credits-dialog h2{font-size:19px;margin:0}
.credits-details{display:grid;gap:8px}
.credits-details strong{font-size:16px}
.credits-details p{font-size:13px;color:var(--muted);line-height:1.5;margin:0 0 7px}
.budget-dialog{max-height:calc(100dvh - 80px);overflow:auto}
.budget-preview{font-weight:700;color:var(--ink)!important}
.voice-panel{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center;min-height:0}
.voice-orb{display:grid;place-items:center;width:60px;height:60px;background:var(--soft);border:1px solid var(--line);border-radius:10px}
.voice-orb svg{width:26px;height:26px}
.voice-panel strong{font-size:17px}
.voice-panel>p{color:var(--muted);font-size:12px;line-height:1.5;margin:0}
.voice-panel .primary-btn{flex:none;min-height:46px}
.voice-transcript{width:100%;max-height:56px;overflow:hidden;white-space:normal}
@media(max-width:359px){
 .dock[data-mode='closed']{width:236px}
 .dock[data-mode] .dock-buttons{grid-template-columns:repeat(4,47px);column-gap:5px}
 .dock[data-mode] .dock-button{width:47px}
 .scan-header h1{font-size:15px}
 .credits-trigger{font-size:10px;padding-inline:5px}
 .scan-header-actions .clear-list-button{width:31px;height:31px}
 .quick-weight{width:59px}
 .quick-number{min-width:32px}
}
@media(max-height:710px){
 .dock[data-mode='manual'],.dock[data-mode='edit']{height:calc(100dvh - 140px - env(safe-area-inset-top) - env(safe-area-inset-bottom))}
 .dock[data-mode='manual'] .qty-block,.dock[data-mode='edit'] .qty-block{min-height:42px}
 .dock[data-mode='manual'] .dock-form,.dock[data-mode='edit'] .dock-form{gap:3px}
 .dock[data-mode='manual'] .field-input,.dock[data-mode='edit'] .field-input{min-height:36px}
 .voice-orb{height:43px;width:43px}
}


/* Compact list, transient recognition notice, recording indicators and original dock position. */
#dock-wrap{bottom:calc(18px + env(safe-area-inset-bottom))!important}
#application .list-scroller{padding-bottom:calc(225px + env(safe-area-inset-bottom))}
#items{display:flex;flex-direction:column;gap:13px}
#items>.list-item{margin:0;gap:8px;padding:13px 14px;min-height:80px;border-radius:10px}
#items>.list-item .item-sub{margin-top:5px;font-size:13px;font-weight:600}
#items>.list-item .item-value{display:none}
#items>.list-item .item-quick{padding-top:8px;gap:7px}
#items>.list-item .quick-number{min-width:25px;font-size:14px}
#items>.list-item .quick-measure button{width:35px;height:35px}
#items>.list-item .item-edit,#items>.list-item .item-remove{width:35px;height:35px;min-width:35px}
#items>.list-item .quick-price-label:not([hidden]){margin-left:auto}
.scan-transient-notice{display:flex;align-items:center;gap:12px;border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:16px;min-height:72px;font-size:14px;animation:rcompras-row-reveal .2s ease both}
.scan-transient-icon{display:grid;place-items:center;width:35px;height:35px;border:1px solid var(--line);border-radius:10px;color:var(--muted);flex:0 0 35px}
.scan-transient-icon svg{width:18px;height:18px}
.scan-transient-exit{animation:rcompras-row-remove .28s ease-in both!important}
#items>.scan-inline-error-compact{display:flex;align-items:center;gap:9px;min-height:65px;border-radius:10px;padding:9px 11px}
.scan-inline-error-compact .scan-error-icon{display:grid;place-items:center;flex:0 0 26px;color:var(--muted)}
.scan-inline-error-compact .scan-error-icon svg{width:21px;height:21px}
.scan-inline-error-compact strong{font-size:13px;min-width:0;flex:1}
.scan-inline-error-compact .scan-error-actions{display:flex;gap:8px}
.scan-inline-error-compact .scan-error-actions button{
 width:40px;height:40px;padding:0;display:grid;place-items:center;
 border:1px solid var(--line);border-radius:10px;color:var(--ink);background:var(--soft)
}
.scan-inline-error-compact .scan-error-actions .scan-error-main{background:var(--ink);color:var(--surface)}
.scan-inline-error-compact .scan-error-actions svg{width:19px;height:19px}
.voice-visual{display:grid;place-items:center;gap:9px;min-height:99px}
.voice-orb{transition:transform .2s ease,background .2s ease;border-radius:50%;width:54px;height:54px}
.voice-wave{height:25px;display:flex;align-items:center;justify-content:center;gap:4px;opacity:.12;transition:opacity .2s}
.voice-wave span{height:6px;width:4px;border-radius:8px;background:var(--ink);transform-origin:center}
.voice-visual.recording .voice-orb{background:var(--ink);color:var(--surface);transform:scale(1.04)}
.voice-visual.recording .voice-wave{opacity:1}
.voice-visual.recording .voice-wave span{animation:rcompras-voice-wave .66s ease-in-out infinite alternate}
.voice-visual.recording .voice-wave span:nth-child(3n){animation-delay:-.27s}
.voice-visual.recording .voice-wave span:nth-child(3n + 1){animation-delay:-.43s}
.voice-visual.recording .voice-wave span:nth-child(5n){animation-duration:.85s}
#voice-record.recording{background:var(--ink);color:var(--surface);outline:2px solid var(--line);outline-offset:3px}
#voice-record.recording .voice-record-icon svg{fill:currentColor;width:17px;height:17px}
@keyframes rcompras-voice-wave{0%{height:5px}100%{height:25px}}
@media(prefers-reduced-motion:reduce){.voice-visual.recording .voice-wave span{animation:none;height:14px}}
@media(max-width:370px){#items>.list-item{padding:10px 9px}#items>.list-item .quick-measure button{width:32px;height:32px}#items>.list-item .item-edit,#items>.list-item .item-remove{min-width:32px;width:32px}}

/* The budget editor uses the same morphing dock as camera and typing. */
.dock[data-mode='budget']{
 width:min(398px,calc(100vw - 28px));height:min(316px,calc(100dvh - 125px - env(safe-area-inset-top) - env(safe-area-inset-bottom)));border-radius:10px;
}
.dock[data-mode='budget'] .dock-content{justify-content:space-between}
.dock[data-mode='budget'] .dock-heading{min-height:36px;margin-bottom:4px}
.budget-dock-form{flex:1;gap:11px;justify-content:center}
.budget-dock-form .budget-preview{margin:0;font-size:13px;text-align:center}
.budget-dock-form .field-label{font-size:13px}
.budget-dock-form .primary-btn{min-height:45px}
.budget-dock-form .outline-btn{min-height:34px;border:0;color:var(--muted);background:transparent;font-size:12px}
details.wholesale-settings{will-change:height}

/* Audio waves react to live RMS captured from the microphone. */
.dock[data-mode='voice']{height:min(330px,calc(100dvh - 120px - env(safe-area-inset-top) - env(safe-area-inset-bottom)))}
.dock[data-mode='voice'] .dock-heading{min-height:36px;margin-bottom:3px}
.dock[data-mode='voice'] .voice-panel{gap:6px;justify-content:center}
.dock[data-mode='voice'] .voice-panel>p:first-of-type{display:none}
.dock[data-mode='voice'] .voice-visual{min-height:90px;gap:4px}
.dock[data-mode='voice'] .voice-orb{height:40px;width:40px}
.dock[data-mode='voice'] .voice-orb svg{height:20px;width:20px}
.dock[data-mode='voice'] .voice-panel strong{font-size:15px}
.dock[data-mode='voice'] .voice-wave{height:49px;align-items:center}
.dock[data-mode='voice'] .voice-wave span{transition:height .09s linear}
.dock[data-mode='voice'] .voice-visual.recording .voice-wave span{animation:none}
.dock[data-mode='voice'] #voice-record{min-height:44px}
.dock[data-mode='voice'] #voice-state{font-size:11px}
.dock[data-mode='voice'] .voice-transcript{max-height:40px}
@media(prefers-reduced-motion:reduce){.dock[data-mode='voice'] .voice-wave span{transition:none}}

/* Contextual purchase totals animate without leaving empty unused rows. */
#dock-wrap #floating-totals{gap:0;padding-block:10px;overflow:hidden}
#floating-totals .summary-row{
 display:flex;align-items:center;justify-content:space-between;gap:12px;overflow:hidden;
 max-height:55px;opacity:1;transform:translateY(0);margin:0;padding-block:6px;
 transition:max-height .30s cubic-bezier(.22,1,.36,1),opacity .23s ease,transform .30s ease,padding .30s ease,border-color .30s ease;
}
#floating-totals .summary-row.is-collapsed{
 max-height:0;opacity:0;transform:translateY(-8px);padding-top:0!important;padding-bottom:0!important;border-color:transparent!important;
 pointer-events:none;
}
#floating-totals .summary-row + .summary-row{border-top:1px solid var(--line)}
#floating-totals .summary-row.is-collapsed + .summary-row{border-top-color:transparent}
#floating-totals .summary-row.final-line{margin:0}
#floating-totals .budget-summary-line span{font-size:12px;color:var(--muted)}
#floating-totals .budget-summary-line strong{font-size:14px}
#floating-totals #budget-status-line[data-level='over'] strong{color:#D15A5A}
#floating-totals #budget-status-line[data-level='near'] strong{color:#B28736}
@media(prefers-reduced-motion:reduce){#floating-totals .summary-row{transition:none;transform:none}}


/* rCompras v1.0.9: fixed four-action rail, animated fit-to-content stage. */
#dock-wrap{bottom:calc(18px + env(safe-area-inset-bottom))!important}
#dock{overflow:hidden}
#dock[data-mode='manual'],#dock[data-mode='edit']{
 height:var(--rcompras-manual-height,490px)!important;
 max-height:calc(100dvh - 105px - env(safe-area-inset-bottom))!important;
}
#dock[data-mode='manual'] .dock-content,
#dock[data-mode='edit'] .dock-content,
#dock[data-mode='budget'] .dock-content,
#dock[data-mode='voice'] .dock-content{overflow:hidden!important}
#dock[data-mode='budget']{
 height:min(255px,calc(100dvh - 115px))!important;
 max-height:calc(100dvh - 115px)!important
}
.budget-dock-form{gap:8px!important}
.budget-dock-form .field-input{min-height:44px}
.budget-dock-form .primary-btn{min-height:44px;flex:0 0 auto}
.dock[data-mode='voice']{
 height:170px!important;max-height:calc(100dvh - 110px)!important;
 width:min(330px,calc(100vw - 28px))!important;
}
.dock[data-mode='voice'] .dock-content{inset:0 0 60px;display:grid;place-items:center;padding:0 12px!important}
.dock[data-mode='voice'] .voice-minimal{width:100%;min-height:80px;display:grid;place-items:center}
.dock[data-mode='voice'] .voice-wave{width:100%;height:56px;gap:5px;opacity:1!important;justify-content:center}
.dock[data-mode='voice'] .voice-wave span{width:5px;background:var(--ink);transition:height .085s linear}
.dock[data-mode='voice'] .voice-minimal:not(.recording) .voice-wave span{height:5px!important;opacity:.32}
#dock[data-mode] .dock-buttons{
 grid-template-columns:repeat(4,50px)!important;column-gap:7px!important;
 justify-content:center;align-content:center;place-items:center;
}
#dock[data-mode] .dock-button{width:50px!important;height:49px!important;border-radius:10px!important}
#dock[data-mode] .dock-indicator{
 z-index:0;width:50px;height:49px;top:3px;left:0;
 border-radius:10px;transform:scale(1)!important;
 transition:left .36s cubic-bezier(.22,1,.36,1),top .3s ease,opacity .18s ease!important;
}
#dock[data-mode='closed'] .dock-indicator{opacity:0!important}
#dock[data-mode='manual'] .dock-indicator,
#dock[data-mode='edit'] .dock-indicator,
#dock[data-mode='camera'] .dock-indicator,
#dock[data-mode='voice'] .dock-indicator,
#dock[data-mode='budget'] .dock-indicator,
#dock[data-mode='loading'] .dock-indicator,
#dock[data-mode='tier'] .dock-indicator,
#dock[data-mode='quantity'] .dock-indicator{opacity:1}
#dock[data-mode] .dock-button.active{background:transparent!important}
@media(max-width:359px){
 #dock[data-mode] .dock-buttons{grid-template-columns:repeat(4,46px)!important;column-gap:4px!important}
 #dock[data-mode] .dock-button{width:46px!important;height:46px!important}
 #dock[data-mode] .dock-indicator{width:46px;height:46px}
}
#dock[data-mode='manual'] .qty-stepper button,
#dock[data-mode='edit'] .qty-stepper button{
 width:47px!important;height:43px!important;min-height:43px;
 border-radius:10px!important;display:grid;place-items:center;padding:0;
}
#dock[data-mode='manual'] .qty-stepper button svg,
#dock[data-mode='edit'] .qty-stepper button svg{width:23px;height:23px;display:block;margin:0}
#dock[data-mode='manual'] .qty-number,
#dock[data-mode='edit'] .qty-number{min-width:54px;font-size:26px}
#dock[data-mode='manual'] .qty-block,
#dock[data-mode='edit'] .qty-block{min-height:70px;flex:0 0 auto;gap:6px}
#dock[data-mode='manual'] .dock-form,
#dock[data-mode='edit'] .dock-form{gap:7px;justify-content:flex-start}
#dock[data-mode='manual'] .dock-content{padding:12px 15px 4px}
#dock[data-mode='manual'] .field-input{min-height:41px;padding:8px 10px}
#dock[data-mode='manual'] .primary-btn{min-height:42px}
#dock[data-mode='manual'] .wholesale-settings{flex:0 0 auto}
/* Controlled details: whole menu grows as the section expands; no scrollbar. */
.wholesale-settings{overflow:hidden}
.wholesale-settings summary{
 display:flex;align-items:center;justify-content:space-between;gap:8px;
 list-style:none;min-height:28px;cursor:pointer;
}
.wholesale-settings summary::-webkit-details-marker{display:none}
.wholesale-settings summary::marker{content:''}
.wholesale-settings summary svg{width:17px;height:17px;flex:0 0 17px;transition:transform .36s cubic-bezier(.22,1,.36,1)}
.wholesale-settings.wholesale-expanded summary svg{transform:rotate(180deg)}
.wholesale-settings .wholesale-grid{
 max-height:0;opacity:0;overflow:hidden;margin-top:0;
 transition:max-height .36s cubic-bezier(.22,1,.36,1),opacity .28s ease,margin-top .36s ease
}
.wholesale-settings.wholesale-expanded .wholesale-grid{
 max-height:125px;opacity:1;margin-top:9px
}
/* quantity left, edit + delete always grouped against the right edge */
#items>.list-item .item-quick{display:flex;gap:7px;justify-content:flex-start}
#items>.list-item .quick-measure{margin-right:auto}
#items>.list-item .quick-price-label:not([hidden]){margin-left:0;flex:0 1 88px}
#items>.list-item .item-actions{display:flex;gap:5px;flex:0 0 auto;margin-left:auto;align-items:center}
#items>.list-item .item-actions button{margin:0}
.credits-trigger{display:flex;gap:5px;align-items:center;justify-content:center}
.credits-trigger svg{width:17px;height:17px}
.credits-trigger #credits-counter{font-variant-numeric:tabular-nums}
.credits-rings{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:8px 0}
.credit-ring-item{display:flex;flex-direction:column;align-items:center;text-align:center;gap:7px;min-width:0}
.credit-ring-item>strong{font-size:14px}
.credit-ring-item>small{font-size:11px;color:var(--muted)}
.credit-ring{
 width:min(32vw,138px);height:min(32vw,138px);aspect-ratio:1;
 display:grid;place-items:center;border-radius:50%;
 background:conic-gradient(var(--ink) var(--credit-percent),var(--line) 0);
}
.credit-ring-center{
 background:var(--surface);border-radius:50%;width:calc(100% - 15px);height:calc(100% - 15px);
 display:flex;flex-direction:column;align-items:center;justify-content:center;
}
.credit-ring-center strong{font-size:31px;font-weight:800;font-variant-numeric:tabular-nums}
.credit-ring-center small{font-size:11px;color:var(--muted)}
.credits-footnote{font-size:12px;color:var(--muted);line-height:1.45;margin:0}
#credits-upgrade[disabled]{opacity:.53;cursor:default}
.credits-dialog{gap:12px}
@media(max-height:680px){
 #dock[data-mode='manual'] .dock-content{padding-top:5px}
 #dock[data-mode='manual'] .dock-form{gap:3px}
 #dock[data-mode='manual'] .qty-stepper button{width:40px!important;height:39px!important;min-height:39px}
 #dock[data-mode='manual'] .qty-block{min-height:49px;gap:2px}
 #dock[data-mode='manual'] .field-input{min-height:36px}
 #dock[data-mode='manual'] .wholesale-settings{padding-block:4px}
}
@media(prefers-reduced-motion:reduce){
 .wholesale-settings summary svg,.wholesale-settings .wholesale-grid,#dock[data-mode] .dock-indicator{transition:none!important}
}


/* Small-screen fit, including the expanded wholesale editor. */
@media(max-height:790px){
 #dock[data-mode='manual'] .dock-content{padding:5px 12px 2px!important}
 #dock[data-mode='manual'] .dock-heading{min-height:30px;margin-bottom:1px}
 #dock[data-mode='manual'] .dock-form{gap:2px!important}
 #dock[data-mode='manual'] .field-label{margin:0!important;font-size:11px}
 #dock[data-mode='manual'] .field-input{min-height:34px!important;padding:5px 8px!important}
 #dock[data-mode='manual'] .qty-block{min-height:50px;gap:2px}
 #dock[data-mode='manual'] .qty-stepper button{height:42px!important;min-height:42px!important;width:45px!important}
 #dock[data-mode='manual'] .primary-btn{min-height:39px!important;margin:0!important}
 #dock[data-mode='manual'] .wholesale-grid{gap:5px}
 #dock[data-mode='manual'] .wholesale-grid input{min-height:31px;padding:4px 6px}
 #dock[data-mode='manual'] .wholesale-settings{padding:5px 8px;margin:0}
 #dock[data-mode='manual'] .wholesale-settings summary{min-height:24px}
 #dock[data-mode='manual'] .measure-toggle{padding:2px}
 #dock[data-mode='manual'] .measure-toggle button{min-height:28px}
 #dock[data-mode='manual'] #manual-total{font-size:11px}
}

.credits-rings.guest-rings{grid-template-columns:1fr;place-items:center}

/* The indicator remains centered during dock width animation, not only afterwards. */
#dock[data-mode] .dock-indicator{left:calc(50% - 25px + var(--indicator-shift,0px))!important;top:calc(50% - 24.5px)!important}
@media(max-width:359px){#dock[data-mode] .dock-indicator{left:calc(50% - 23px + var(--indicator-shift,0px))!important;top:calc(50% - 23px)!important}}


/* rCompras 1.0.10 – compact natural-height panels and Android keyboard. */
#dock[data-mode='budget'],#dock[data-mode='manual'],#dock[data-mode='edit']{
 height:var(--rcompras-fit-height,var(--rcompras-manual-height,340px))!important;
 max-height:calc(100dvh - 94px - env(safe-area-inset-top) - env(safe-area-inset-bottom))!important;
}
#dock[data-mode='budget'] .dock-content,
#dock[data-mode='manual'] .dock-content,
#dock[data-mode='edit'] .dock-content{flex:1;min-height:0;overflow:hidden!important;justify-content:flex-start!important}
#dock[data-mode='budget'] .budget-dock-form,
#dock[data-mode='manual'] .dock-form,
#dock[data-mode='edit'] .dock-form{flex:0 0 auto!important;justify-content:flex-start!important;min-height:0!important}
#dock[data-mode='budget'] .dock-content{padding:13px 16px 4px!important}
#dock[data-mode='budget'] .dock-heading{min-height:39px!important;margin-bottom:7px!important}
#dock[data-mode='budget'] .budget-dock-form{gap:9px!important}
#dock[data-mode='budget'] .budget-preview{min-height:0;margin:0!important;font-size:13px;line-height:1.35}
#dock[data-mode='budget'] .field-label{margin:0!important}
#dock[data-mode='budget'] .field-input{min-height:46px!important}
#dock[data-mode='budget'] #budget-submit{min-height:47px!important;flex:0 0 auto!important;margin:0!important;white-space:normal}
#dock[data-mode='budget'] .dock-content>*{flex-shrink:0}
#dock .mini-close{width:40px!important;height:40px!important;min-width:40px!important;min-height:40px!important;aspect-ratio:1!important;border-radius:10px!important;padding:0;display:grid;place-items:center}
#dock .mini-close svg{width:20px;height:20px;display:block}
#items>.list-item .item-actions{gap:7px;display:flex;align-items:center;margin-left:auto;flex:0 0 auto}
#items>.list-item .item-actions .item-edit,
#items>.list-item .item-actions .item-remove{width:43px!important;height:43px!important;min-width:43px!important;min-height:43px!important;flex:0 0 43px!important;aspect-ratio:1!important;border-radius:8px!important;padding:0!important;display:grid;place-items:center}
#items>.list-item .item-actions svg{width:19px;height:19px}
#items>.list-item .item-sub{max-width:100%;white-space:normal;font-variant-numeric:tabular-nums}
#items>.list-item{overflow:hidden}
#dock-wrap{bottom:calc(18px + env(safe-area-inset-bottom) + var(--rcompras-keyboard-inset,0px))!important;transition:bottom .18s ease-out}
html.rcompras-keyboard #dock-wrap{transition:none!important}
html.rcompras-keyboard #dock[data-mode='manual'],
html.rcompras-keyboard #dock[data-mode='budget'],
html.rcompras-keyboard #dock[data-mode='edit']{max-height:calc(100dvh - 40px - var(--rcompras-keyboard-inset,0px))!important}
html,body,#application{overscroll-behavior:none!important}
#dock .wholesale-settings .wholesale-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
#dock .wholesale-settings.wholesale-expanded .wholesale-grid{max-height:180px}
#dock[data-mode='closed'] .dock-indicator[data-used='1']{opacity:1!important}
#dock[data-mode='closed'] .dock-indicator:not([data-used]){opacity:0!important}
#dock .dock-indicator{transition:left .38s cubic-bezier(.2,.78,.2,1),opacity .18s ease!important}
@media(max-width:380px){
 #items>.list-item .item-actions .item-edit,#items>.list-item .item-actions .item-remove{width:39px!important;height:39px!important;min-width:39px!important;min-height:39px!important;flex-basis:39px!important}
 #items>.list-item .item-quick{gap:4px}
}
@media(max-height:680px){
 #dock[data-mode='budget'] .dock-content{padding-top:5px!important}
 #dock[data-mode='budget'] .dock-heading{min-height:34px!important;margin-bottom:2px!important}
 #dock[data-mode='budget'] .budget-dock-form{gap:5px!important}
}
/* Single slower gradient band, without overlapping shimmer layers. */
.scan-processing .scan-pending-shine{display:none!important}
.scan-processing::before{
 inset:0!important;
 background:linear-gradient(102deg,transparent 0%,transparent 37%,rgba(160,168,183,.18) 49%,transparent 61%,transparent 100%)!important;
 background-size:240% 100%!important;
 background-repeat:no-repeat!important;
 animation:rcompras-shimmer-single 2.8s linear infinite!important;
}
@keyframes rcompras-shimmer-single{0%{background-position:220% 0}100%{background-position:-120% 0}}
/* Top notifications: stacked, animated, manually swipeable. */
#notification-island{
 position:fixed;z-index:180;top:calc(10px + env(safe-area-inset-top));left:50%;transform:translateX(-50%);
 width:min(360px,calc(100vw - 28px));display:flex;flex-direction:column;align-items:stretch;gap:7px;pointer-events:none
}
.island-message{
 pointer-events:auto;touch-action:pan-y;cursor:grab;user-select:none;
 border-radius:10px;padding:12px 17px;background:#1D1F23;color:#FFF;border:1px solid rgba(255,255,255,.18);
 box-shadow:0 9px 35px #0005;text-align:center;font-size:13px;font-weight:650;line-height:1.4;
 animation:rcompras-island-in .3s cubic-bezier(.2,.8,.2,1) both;transition:transform .18s ease,opacity .18s ease;
}
.island-message.island-leaving{animation:rcompras-island-out .24s ease-in both!important;pointer-events:none}
@keyframes rcompras-island-in{0%{opacity:0;transform:translateY(-18px) scale(.9)}100%{opacity:1;transform:translateY(0) scale(1)}}
@keyframes rcompras-island-out{0%{opacity:1;max-height:100px;margin:0}100%{opacity:0;transform:translateX(var(--exit-x,0px)) translateY(-12px) scale(.88);max-height:0;padding-top:0;padding-bottom:0;margin:0;border-width:0}}
/* Animated credit rings, values and close gesture. */
@property --credit-percent{syntax:"<percentage>";inherits:false;initial-value:0%}
.credit-ring{transition:--credit-percent .85s cubic-bezier(.15,.8,.15,1);transform-origin:center}
.credits-overlay:not([hidden]) .credits-dialog{animation:rcompras-credit-open .38s cubic-bezier(.16,1,.3,1) both}
.credits-overlay.is-closing .credits-dialog{animation:rcompras-credit-close .23s ease-in both}
.credits-overlay.is-closing{animation:rcompras-credit-backdrop-close .24s ease both}
@keyframes rcompras-credit-open{0%{opacity:0;transform:translateY(20px) scale(.94)}100%{opacity:1;transform:none}}
@keyframes rcompras-credit-close{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:translateY(14px) scale(.96)}}
@keyframes rcompras-credit-backdrop-close{to{background:transparent}}
.credits-plan-name{text-align:center;font-weight:750;font-size:14px;margin:2px 0 0}
.credits-ring-item .credit-ring-center strong{font-variant-numeric:tabular-nums}
.credits-rings{margin:6px 0 10px}
#credits-upgrade{margin-top:0}
/* Microphone-to-stop motion, including background shape. */
#voice-button svg{transition:opacity .16s ease,transform .23s cubic-bezier(.2,.8,.2,1)}
#voice-button.recording svg{animation:rcompras-mic-morph .27s cubic-bezier(.2,.8,.2,1) both}
@keyframes rcompras-mic-morph{0%{opacity:.2;transform:rotate(-55deg) scale(.35)}70%{transform:rotate(8deg) scale(1.09)}100%{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){
 #notification-island .island-message,.credits-overlay .credits-dialog,.credit-ring,#voice-button svg{animation:none!important;transition:none!important}
}

.credits-overlay.is-closing{pointer-events:none!important}

/* 1.0.11: one progress clock for credit ring and number; no CSS second animation. */
.credit-ring{transition:none!important}
#dock[data-mode='closed'] .dock-indicator,#dock[data-mode='closed'] .dock-indicator[data-used='1']{opacity:0!important}
/* During the wholesale transition the natural form height drives the dock frame by frame. */
#dock.wholesale-resizing{transition-property:width,border-radius,box-shadow!important}
#dock .wholesale-settings.wholesale-expanded .wholesale-grid{max-height:var(--wholesale-target,none)}

/* The content observer computes the height; old static viewport subtraction must not clip it. */
#dock[data-mode='manual'],#dock[data-mode='edit'],#dock[data-mode='budget'],
html.rcompras-keyboard #dock[data-mode='manual'],html.rcompras-keyboard #dock[data-mode='edit'],html.rcompras-keyboard #dock[data-mode='budget']{
 max-height:100dvh!important;
}


/* rCompras 1.0.12: global modal for multiple real-world price modalities. */
.price-mode-trigger{display:grid;place-items:center;flex:0 0 42px}
.price-mode-trigger svg{width:21px;height:21px;display:block;margin:auto}
.price-mode-trigger[data-active='true']{border-color:var(--ink);background:var(--soft)}
.price-mode-overlay{position:fixed;inset:0;z-index:125;background:rgba(6,8,11,.52);padding:16px;display:grid;place-items:center}
.price-mode-dialog{width:min(420px,100%);max-height:min(560px,calc(100dvh - 34px));overflow:hidden;display:flex;flex-direction:column;gap:14px;
 background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:10px;padding:20px;
 box-shadow:0 24px 65px #0004;animation:price-dialog-open .33s cubic-bezier(.16,1,.3,1) both}
.price-mode-overlay.is-closing{pointer-events:none}
.price-mode-overlay.is-closing .price-mode-dialog{animation:price-dialog-close .23s ease-in both}
.price-mode-heading{display:flex;justify-content:space-between;align-items:start;gap:14px}
.price-mode-heading h2{font-size:19px;line-height:1.3;margin:0 0 4px}
.price-mode-heading p{font-size:12px;color:var(--muted);margin:0}
#price-mode-close{width:39px;height:39px;min-width:39px;display:grid;place-items:center;border-radius:10px;border:1px solid var(--line);background:var(--soft);color:var(--ink)}
#price-mode-close svg{width:20px;height:20px}
.price-mode-options{display:flex;flex-direction:column;gap:9px;overflow:auto;scrollbar-width:thin}
.price-mode-option{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;
 min-height:68px;text-align:left;padding:13px 15px;border-radius:10px;border:1px solid var(--line);background:var(--surface);color:var(--ink)}
.price-mode-option[aria-pressed='true']{border-color:var(--ink);background:var(--soft)}
.price-mode-option>span:first-child{display:flex;flex-direction:column;gap:4px}
.price-mode-option strong{font-size:15px}
.price-mode-option small{font-size:12px;color:var(--muted);line-height:1.35}
.price-mode-selection{width:24px;height:24px;flex:0 0 24px;display:grid;place-items:center}
.price-mode-selection svg{width:22px;height:22px}
@keyframes price-dialog-open{from{opacity:0;transform:translateY(18px) scale(.96)}to{opacity:1;transform:none}}
@keyframes price-dialog-close{to{opacity:0;transform:translateY(12px) scale(.97)}}
/* Denser list with a readable wholesale minimum and dynamically reserved viewport. */
#items{gap:8px!important}
#items>.list-item{min-height:72px;padding:10px 12px!important;border-radius:10px;gap:6px!important}
#items>.list-item .item-quick{padding-top:6px!important}
#items>.list-item .item-sub{margin-top:3px!important;line-height:1.35}
#items>.list-item .item-wholesale{display:block;margin-top:3px;font-size:11px;font-weight:600;color:var(--muted);line-height:1.4}
#items>.list-item .item-wholesale[hidden]{display:none!important}
#application .list-scroller{padding-bottom:var(--rcompras-scroll-reserve,215px)!important;scroll-padding-bottom:18px}
/* Floating price summary toggles while retaining total, budget and the remaining/over amount. */
#dock-wrap #floating-totals{pointer-events:auto;cursor:pointer;outline-offset:3px}
#dock-wrap .summary-toggle{display:flex;align-items:center;justify-content:space-between;gap:5px;
 max-height:26px;margin-bottom:2px;font-size:10px;font-weight:650;color:var(--muted);line-height:16px}
#dock-wrap .summary-toggle svg{width:16px;height:16px;transform:rotate(0deg);transition:transform .28s cubic-bezier(.2,.8,.2,1)}
#dock-wrap #floating-totals.is-compact .summary-toggle svg{transform:rotate(-90deg)}
#dock-wrap #floating-totals.is-compact :is(#subtotal-line,#discount-line,#surcharge-line){
 max-height:0!important;opacity:0!important;transform:translateY(-7px)!important;
 padding:0!important;margin:0!important;border-color:transparent!important;pointer-events:none!important;
}
#dock-wrap #floating-totals .summary-row{transition:max-height .3s cubic-bezier(.25,.8,.25,1),opacity .3s ease,padding .3s ease,transform .3s ease}
/* Native Lucide icons centered to the same optical box in every control. */
button:has(>svg),button:has(>i[data-lucide]){align-items:center;justify-content:center}
#dock button svg,.scan-header-actions button svg,.item-actions button svg,.price-mode-dialog button svg{
 display:block;vertical-align:middle;margin:auto;flex-shrink:0;
}
#dock .dock-button{display:grid;place-items:center}
#dock .dock-buttons .dock-button svg{width:22px;height:22px}
/* Single brighter shimmer stripe, visible on both themes. */
.scan-processing::before{
 background:linear-gradient(100deg,transparent 34%,rgba(102,110,127,.12) 43%,
 rgba(93,105,127,.28) 50%,rgba(102,110,127,.12) 57%,transparent 66%)!important;
}
html[data-theme='dark'] .scan-processing::before{
 background:linear-gradient(100deg,transparent 34%,rgba(235,238,247,.08) 43%,rgba(235,238,247,.20) 50%,rgba(235,238,247,.08) 57%,transparent 66%)!important;
}
/* Dynamic Island notification: dismiss X and time-remaining underline. */
#notification-island{width:min(398px,calc(100vw - 26px));gap:7px}
.island-message{position:relative;min-height:74px;padding:13px 44px 17px 18px;
 display:flex;align-items:center;justify-content:center;border-radius:10px;overflow:hidden;
 font-size:14px;line-height:1.4;box-shadow:0 12px 40px #0006}
.island-notice-content{width:100%;text-align:center}
.island-dismiss{position:absolute;right:9px;top:9px;display:grid;place-items:center;
 border-radius:10px;color:#FFF;background:rgba(255,255,255,.13);border:0;width:29px;height:29px;padding:0}
.island-dismiss svg{width:17px;height:17px}
.island-time{position:absolute;bottom:0;left:0;width:100%;height:4px;background:rgba(255,255,255,.84);transform-origin:left center;
 animation:island-lifetime 3s linear both;pointer-events:none}
@keyframes island-lifetime{from{transform:scaleX(1)}to{transform:scaleX(0)}}
/* Neutral high-contrast selection and input focus: dark on light, light on dark. */
:root{--focus:var(--ink)}
:focus-visible{outline-color:var(--ink)!important}
input:focus,textarea:focus,select:focus{border-color:var(--ink)!important;outline-color:var(--ink)!important;caret-color:var(--ink)}
::selection{background:var(--ink);color:var(--surface)}
input::selection,textarea::selection{background:var(--ink);color:var(--surface)}
input,select,textarea{accent-color:var(--ink)}
.dock-content :is(input,select,textarea):focus,.field-input:focus,
html[data-theme='light'] .field-input:focus,html[data-theme='dark'] .field-input:focus{
 border-color:var(--ink)!important;outline:2px solid var(--ink)!important;
 box-shadow:0 0 0 3px color-mix(in srgb,var(--ink) 12%,transparent)!important;
}
/* Keyboard should not collapse panels when an input has focus. */
html.rcompras-keyboard #dock[data-mode='manual'],
html.rcompras-keyboard #dock[data-mode='edit'],
html.rcompras-keyboard #dock[data-mode='budget']{max-height:none!important}
/* Synchronize dock grow/collapse to wholesale option's CSS transition. */
#dock.wholesale-resizing{transition-property:width,border-radius,box-shadow!important}
@media(prefers-reduced-motion:reduce){
 .price-mode-dialog,.price-mode-overlay.is-closing .price-mode-dialog,.island-time{animation:none!important}
 #dock-wrap .summary-toggle svg{transition:none!important}
}

/* Island must never obscure header controls such as the global price selector. */
#notification-island{top:calc(78px + env(safe-area-inset-top))!important}


/* One visible moving glint over each actively processing card.
   The full-width pseudo-element slides across the card in both themes. */
#items > .scan-processing{position:relative;isolation:isolate;overflow:hidden}
#items > .scan-processing::before{
 content:""!important;position:absolute!important;inset:0 auto 0 -100%!important;
 width:100%!important;height:100%!important;z-index:0!important;pointer-events:none!important;
 background:linear-gradient(90deg,transparent 21%,rgba(108,124,144,.10) 33%,rgba(124,148,179,.35) 50%,rgba(108,124,144,.10) 67%,transparent 79%)!important;
 background-size:100% 100%!important;background-repeat:no-repeat!important;
 animation:rcompras-card-glint-travel 2.6s linear infinite!important;
 will-change:transform;
}
html[data-theme="dark"] #items > .scan-processing::before{
 background:linear-gradient(90deg,transparent 21%,rgba(238,244,255,.06) 33%,rgba(238,244,255,.23) 50%,rgba(238,244,255,.06) 67%,transparent 79%)!important;
}
@keyframes rcompras-card-glint-travel{
 0%{transform:translate3d(0,0,0)}
 100%{transform:translate3d(200%,0,0)}
}
/* Keep accessible reduced-motion behavior. */
@media(prefers-reduced-motion:reduce){
 #items > .scan-processing::before{animation:none!important;transform:translate3d(100%,0,0)!important}
}
/* The budget now occupies exactly one row: available/limit. */
#floating-totals #budget-line .budget-amount{
 display:inline-flex;align-items:baseline;gap:3px;white-space:nowrap;
 font-size:clamp(11px,3.3vw,14px);font-variant-numeric:tabular-nums;
}
#floating-totals #budget-line .budget-separator{font-weight:500;color:var(--muted)}
#floating-totals #budget-line #summary-budget-balance.is-over-budget{color:#ce4049;font-weight:800}
html[data-theme="dark"] #floating-totals #budget-line #summary-budget-balance.is-over-budget{color:#ff767b}
#floating-totals #budget-line #summary-budget-total{color:var(--ink)}
/* Mode picker is intentionally name-only and easy to scan. */
.price-mode-option{min-height:55px}
.price-mode-option>span:first-child{gap:0}

/* A pending scan is a persistent card; it never fades in again on sync. */
#items > .scan-processing:not(.scan-processing-exiting){
 animation:none!important;opacity:1!important;filter:none!important;transform:none!important;
}
/* Only the glint travels; the card itself remains visually stationary. */
#items > .scan-processing:not(.scan-processing-exiting)::before{
 animation:rcompras-card-glint-travel 2.6s linear infinite!important;
}
@media(prefers-reduced-motion:reduce){
 #items > .scan-processing:not(.scan-processing-exiting)::before{animation:none!important}
}


/* v1.0.15 — Only the item viewport slides. Header, totals, and dock remain fixed. */
.scan-brand{display:flex;flex-direction:column;align-items:flex-start;min-width:0;gap:3px;overflow:hidden}
.scan-brand h1{margin:0}
.list-subtitle{display:flex;align-items:center;gap:7px;min-height:17px;font-size:11px;font-weight:650;color:var(--muted)}
.list-subtitle-dots{display:inline-flex;align-items:center;gap:3px}
.list-subtitle-dots i{display:block;width:5px;height:5px;border-radius:50%;background:var(--line);transition:background .28s,width .28s}
.list-subtitle-dots i.selected{background:var(--ink);width:12px;border-radius:3px}
.list-subtitle #list-subtitle-text.subtitle-transition{animation:list-subtitle-switch .36s cubic-bezier(.2,.8,.2,1)}
@keyframes list-subtitle-switch{from{opacity:.15;transform:translateY(8px)}to{opacity:1;transform:none}}
#app-list{overflow-x:hidden!important;touch-action:pan-y;overscroll-behavior-x:contain}
#list-content{width:100%;min-width:0}
.list-pages{display:flex;width:200%;align-items:flex-start;transform:translate3d(0,0,0);
 transition:transform .38s cubic-bezier(.22,.82,.22,1);will-change:transform}
.list-pages[data-page="planning"]{transform:translate3d(-50%,0,0)}
.list-page{flex:0 0 50%;width:50%;min-width:0;padding:0 1px}
#planning-items{display:flex;flex-direction:column;gap:9px;min-height:100px;padding:5px 0 12px}
.planning-card{display:flex;align-items:center;gap:10px;min-height:64px;border:1px solid var(--line);
 border-radius:10px;background:var(--surface);padding:10px 12px;color:var(--ink);
 transition:border-color .2s,opacity .25s,background .25s}
.planning-status{width:24px;height:24px;flex:0 0 24px;border:1.5px solid var(--muted);
 border-radius:8px;display:grid;place-items:center;cursor:pointer;color:var(--surface);background:transparent}
.planning-status svg{width:15px;height:15px;opacity:0}
.planning-card.is-bought{opacity:.59}
.planning-card.is-bought .planning-status{background:var(--ink);border-color:var(--ink)}
.planning-card.is-bought .planning-status svg{opacity:1}
.planning-card.is-bought .planning-name{text-decoration:line-through}
.planning-name{font-size:15px;line-height:1.35;font-weight:700;flex:1;overflow-wrap:anywhere;cursor:pointer}
.planning-actions{display:flex;gap:6px;flex:0 0 auto}
.planning-actions button{width:39px;height:39px;min-width:39px;min-height:39px;border:1px solid var(--line);
 border-radius:10px;background:var(--soft);color:var(--ink);padding:0;display:grid;place-items:center}
.planning-actions svg{width:18px;height:18px}
.planning-actions .planning-remove{color:#CE5660}
.planning-edit-input{flex:1;min-width:0;background:var(--surface);color:var(--ink);border:1.5px solid var(--ink);border-radius:8px;padding:8px;font-size:15px}
.planning-empty{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:9px;
 min-height:225px;text-align:center;color:var(--muted);padding:20px}
.planning-empty>svg{width:45px;height:45px;color:var(--ink);stroke-width:1.6}
.planning-empty strong{color:var(--ink);font-size:16px}
.planning-empty small{max-width:260px;line-height:1.5;font-size:12px}
.planning-dock-form{gap:10px;flex:0 0 auto}
#planning-text{min-height:170px;max-height:min(36dvh,250px);resize:none;line-height:1.55;font-size:15px;padding:12px}
#dock[data-mode="manual"] .planning-dock-form .primary-btn{min-height:45px}
#dock[data-mode="manual"]:has(.planning-dock-form){width:min(410px,calc(100vw - 24px))}
#dock[data-mode="manual"]:has(.planning-dock-form) .dock-content{overflow:hidden}
#application.shopping-list-page #floating-totals .summary-toggle,
#application.shopping-list-page #floating-totals :is(#subtotal-line,#discount-line,#surcharge-line){display:none!important}
#application.shopping-list-page #floating-totals{padding-top:10px;padding-bottom:10px}
#application.shopping-list-page #floating-totals .final-line{border-top:0}
#planning-loading{min-height:76px;flex-shrink:0}
@media(max-width:370px){
 .scan-header-inner{gap:4px!important}
 .scan-brand h1{font-size:21px}
 .scan-header-actions{gap:5px!important}
 .planning-actions button{width:36px;height:36px;min-width:36px;min-height:36px}
}
@media(prefers-reduced-motion:reduce){
 .list-pages,.list-subtitle-dots i{transition:none!important}
 #list-subtitle-text.subtitle-transition{animation:none!important}
}
/* Credits modal internal pages: no nested overlay, compact pagination. */
.credits-extra-controls{display:flex;justify-content:center;gap:12px;margin:4px 0 1px}
.credits-extra-controls button{width:52px;height:47px;border:1px solid var(--line);border-radius:10px;
 display:grid;place-items:center;background:var(--soft);color:var(--ink)}
.credits-extra-controls svg{width:22px;height:22px}
.credits-dialog.credits-show-subpage> :is(#credits-title,#credits-details,#credits-extra-controls,#credits-upgrade){display:none!important}
.credits-subpage{display:flex;flex-direction:column;gap:14px;min-height:245px}
.credits-subpage[hidden]{display:none!important}
.credits-subpage.subpage-arriving{animation:credit-subpage-slide .28s cubic-bezier(.2,.8,.2,1)}
@keyframes credit-subpage-slide{from{opacity:.1;transform:translateX(22px)}to{opacity:1;transform:none}}
.credits-subpage-head{display:flex;align-items:center;gap:12px;margin:0 0 8px}
.credits-subpage-head strong{font-size:18px}
#credits-subpage-back{border:1px solid var(--line);width:40px;height:40px;min-width:40px;
 border-radius:10px;background:var(--soft);display:grid;place-items:center;color:var(--ink)}
#credits-subpage-back svg{width:20px;height:20px}
#credits-subpage-content{display:flex;flex-direction:column;gap:14px;align-items:stretch}
.credits-subpage-help{font-size:12px;line-height:1.5;color:var(--muted);text-align:center;margin:0}
.gift-code-slots{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:7px}
.gift-code-slots input{height:58px;min-width:0;text-align:center;background:var(--surface);color:var(--ink);
 border:1.5px solid var(--line);border-radius:10px;text-transform:uppercase;font-size:23px;font-weight:800}
.gift-code-slots input:focus{border-color:var(--ink);outline:2px solid var(--ink)}
#gift-redeem{min-height:49px}
#gift-redeem:not(:disabled){background:var(--ink);color:var(--surface)}
.gift-message{min-height:25px;font-size:12px;color:#BC525A;text-align:center;margin:0;line-height:1.45}
.gift-message.gift-success{color:var(--ink)}
.pix-entry-label{font-size:12px;font-weight:750;color:var(--muted)}
.pix-amount{font-size:27px!important;text-align:center;min-height:65px}
#pix-next{min-height:48px}
.pix-footnote{font-size:11px}
.pix-qr{background:white;padding:11px;align-self:center;border-radius:10px;max-width:100%;width:254px;
 min-height:250px;display:grid;place-items:center;color:#111}
.pix-qr svg{display:block;width:100%;height:auto;max-width:235px}
.pix-price{text-align:center;font-size:24px;font-variant-numeric:tabular-nums}
.pix-disclaimer{color:var(--muted);text-align:center;font-size:11px;line-height:1.5}
@media(max-height:690px){.credits-dialog{max-height:calc(100dvh - 24px);overflow-y:auto}.pix-qr{width:200px;min-height:200px}}

/* System notices never sit above interactive dialogs or block the back arrow. */
body:has(#credits-overlay:not([hidden])) #notification-island,
body:has(#confirm-overlay:not([hidden])) #notification-island,
body:has(#price-mode-overlay:not([hidden])) #notification-island{visibility:hidden!important;pointer-events:none!important}

/* The subscription, gift and donation actions share one row. */
.credits-extra-controls{display:flex;gap:8px;align-items:stretch;width:100%}
.credits-extra-controls #credits-upgrade{width:auto;flex:1;min-width:0;font-size:12px;padding-inline:6px;min-height:47px;margin:0}
.credits-extra-controls #credits-gift,.credits-extra-controls #credits-donate{width:45px;height:47px;flex:0 0 45px}\n


/* 1.0.16 — the planning list shares the cart top alignment. */
#application.shopping-list-page .list-content{padding-top:clamp(16px,3vh,32px)}
#application.shopping-list-page #list-pages,
#application.shopping-list-page #planning-page,
#application.shopping-list-page #planning-items{
 align-items:stretch;justify-content:flex-start;align-content:flex-start;
}
#application.shopping-list-page #planning-items{
 margin:0;min-height:0;flex:0 0 auto;padding-top:0;
}
#application .list-scroller{overflow-anchor:none}

/* The planning scan glow is the SAME traveling band as the cart, not a
   static background-position shimmer. One mounted card = one continuous pass. */
#planning-items > #planning-loading{
 position:relative;isolation:isolate;overflow:hidden;width:100%;
 display:flex;align-items:center;gap:12px;
 animation:none!important;opacity:1!important;transform:none!important;
}
#planning-items > #planning-loading::before{
 content:""!important;position:absolute!important;inset:0 auto 0 -100%!important;
 width:100%!important;height:100%!important;z-index:0!important;pointer-events:none!important;
 background:linear-gradient(90deg,transparent 21%,rgba(108,124,144,.10) 33%,rgba(124,148,179,.35) 50%,rgba(108,124,144,.10) 67%,transparent 79%)!important;
 background-size:100% 100%!important;background-repeat:no-repeat!important;
 animation:rcompras-card-glint-travel 2.6s linear infinite!important;will-change:transform;
}
html[data-theme="dark"] #planning-items > #planning-loading::before{
 background:linear-gradient(90deg,transparent 21%,rgba(238,244,255,.06) 33%,rgba(238,244,255,.23) 50%,rgba(238,244,255,.06) 67%,transparent 79%)!important;
}
@media(prefers-reduced-motion:reduce){
 #planning-items > #planning-loading::before{animation:none!important}
}

/* Only show monetary totals if the cart contains an actual item. */
#floating-totals[hidden]{display:none!important}
/* A single continuous accordion animation for optional subtotal, discounts
   and surcharge; keep the node mounted so closing does not snap. */
#dock-wrap #floating-totals .summary-row{
 max-height:46px;
 transition:max-height .36s cubic-bezier(.4,0,.2,1),
            padding-top .36s cubic-bezier(.4,0,.2,1),
            padding-bottom .36s cubic-bezier(.4,0,.2,1),
            opacity .32s ease,transform .36s cubic-bezier(.4,0,.2,1)!important;
}
#dock-wrap #floating-totals .summary-row.is-collapsed,
#dock-wrap #floating-totals.is-compact :is(#subtotal-line,#discount-line,#surcharge-line){
 max-height:0!important;opacity:0!important;transform:translateY(-5px)!important;
 padding-top:0!important;padding-bottom:0!important;
 border-color:transparent!important;pointer-events:none!important;
}
#floating-totals .summary-row.final-line,
#floating-totals .summary-row + .summary-row.final-line{
 border-top:none!important;margin-top:0!important;
}
#floating-totals .summary-row.final-line{padding-top:6px!important}
@media(prefers-reduced-motion:reduce){
 #dock-wrap #floating-totals .summary-row{transition:none!important}
}

/* Empty cart centers only its own placeholder, never the neighboring planning list. */
#application.shopping-list-page #list-content{
 display:block!important;min-height:0!important;justify-content:flex-start!important;
 align-items:stretch!important;flex-direction:initial!important;
}

/* No 1px separator survives when an optional summary row collapses. */
#dock-wrap #floating-totals .summary-row + .summary-row{border-top:none!important}


/* rCompras 1.0.17 — one invariant vertical layout for both carousel pages.
   Switching pages never flips flex centering, top padding, item heights or scrollTop. */
#application #list-content,
#application.shopping-list-page #list-content,
#application:not(.shopping-list-page) #list-content {
 display:block!important;
 justify-content:flex-start!important;align-items:stretch!important;
 flex-direction:initial!important;min-height:0!important;
 padding-top:18px!important;
}
#application #list-pages{
 display:flex;width:200%;align-items:flex-start!important;align-content:flex-start!important;
 transform:translate3d(0,0,0);
 transition:transform .31s cubic-bezier(.22,.82,.2,1);
 will-change:transform;
 backface-visibility:hidden;
}
#application #list-pages[data-page="planning"]{transform:translate3d(-50%,0,0)}
#application #list-pages.is-dragging{transition:none!important}
#application #list-pages .list-page{
 flex:0 0 50%;width:50%;min-width:0;
 align-self:flex-start;transform:none!important;contain:layout style;
}
#application #list-pages .list-page #items,
#application #list-pages .list-page #planning-items{
 margin-top:0!important;position:relative;top:0!important;
}
#application .list-scroller{scroll-behavior:auto!important;overflow-anchor:none;touch-action:pan-y}
#application #list-pages .planning-card{transform:translateZ(0);backface-visibility:hidden}
#application #list-pages .planning-card.planning-entering{
 animation:planning-row-enter .32s cubic-bezier(.18,.87,.25,1) both;
}
@keyframes planning-row-enter{
 from{opacity:0;transform:translate3d(0,9px,0)}
 to{opacity:1;transform:translate3d(0,0,0)}
}
#list-subtitle-text.subtitle-transition{animation:carousel-caption-enter .27s cubic-bezier(.2,.84,.2,1) both}
@keyframes carousel-caption-enter{
 from{opacity:.15;transform:translate3d(9px,0,0)}
 to{opacity:1;transform:translate3d(0,0,0)}
}
/* The credit page uses the same top-left back convention as its subpages. */
.credits-home-head{display:flex;align-items:center;gap:12px;min-height:41px}
.credits-home-head h2{margin:0;flex:1;min-width:0}
#credits-home-back{
 width:40px;height:40px;min-width:40px;min-height:40px;border-radius:10px;
 background:var(--soft);color:var(--ink);border:1px solid var(--line);
 display:grid;place-items:center;padding:0
}
#credits-home-back svg{width:20px;height:20px;display:block;margin:auto}
.credits-dialog.credits-show-subpage .credits-home-head{display:none!important}
.credits-extra-controls #credits-gift,
.credits-extra-controls #credits-donate{
 display:grid!important;place-items:center!important;
 padding:0!important;line-height:1!important;
}
.credits-extra-controls #credits-gift svg,
.credits-extra-controls #credits-donate svg{
 width:22px;height:22px;display:block;margin:auto!important;
 transform:none!important;flex:0 0 22px;
}
/* Redemption feedback is a dismissible, time-limited large Dynamic Island.
   It stays visible above this modal without covering the back arrows. */
body:has(#credits-overlay:not([hidden])) #notification-island{
 visibility:visible!important;
 pointer-events:none!important;
 top:calc(82px + env(safe-area-inset-top))!important;
 z-index:190!important;
}
body:has(#credits-overlay:not([hidden])) #notification-island .island-message{
 pointer-events:auto!important;min-height:82px;
}
#credits-subpage-content:has(#pix-qr){gap:15px;align-items:center}
#credits-subpage-content:has(#pix-qr) #pix-copy{width:100%;max-width:270px}
@media(prefers-reduced-motion:reduce){
 #application #list-pages,.planning-card.planning-entering,#list-subtitle-text.subtitle-transition{
  transition:none!important;animation:none!important
 }
}

/* Page headers and back arrows never move during internal credit-page transitions. */
#credits-subpage.subpage-arriving{animation:none!important}
#credits-subpage.subpage-arriving #credits-subpage-content{animation:credit-subpage-slide .28s cubic-bezier(.2,.8,.2,1) both}
@media(prefers-reduced-motion:reduce){#credits-subpage.subpage-arriving #credits-subpage-content{animation:none!important}}

/* Only redemption feedback is visible while credits are open; ordinary stacked
   notices cannot cover the Pix or back buttons. */
body:has(#credits-overlay:not([hidden])) #notification-island .island-message:not(.island-redeem){display:none!important}
body:has(#credits-overlay:not([hidden])) #notification-island .island-message.island-redeem{min-height:82px;display:flex!important}


/* rCompras 1.0.18 — no monetary summary over the planning list. */
#application.shopping-list-page #floating-totals{display:none!important}
#dock-wrap #floating-totals .summary-toggle[hidden]{display:none!important}
#dock-wrap #floating-totals[role="group"]{cursor:default}
#dock-wrap #floating-totals[role="group"]:focus-visible{outline:none}

/* Independently center empty states in the actual space above the action dock.
   Never center the entire 200%-wide page track: that moves populated cards. */
#application #list-pages .list-page #items:has(> .empty-list),
#application #list-pages .list-page #planning-items:has(> .planning-empty){
 min-height:var(--rcompras-empty-height,calc(100dvh - 190px))!important;
 display:flex!important;flex-direction:column!important;
 align-items:center!important;justify-content:center!important;
 padding-top:0!important;padding-bottom:0!important;
}
#application #list-pages .list-page #items> .empty-list,
#application #list-pages .list-page #planning-items> .planning-empty{
 flex:0 0 auto;min-height:0!important;width:100%;
}
#application .list-scroller:has(.empty-list){overflow-y:auto!important;touch-action:pan-y!important}

/* Credits navigation behaves like the cart/list carousel, including backtrack. */
.credits-viewport{position:relative;min-width:0;width:100%;overflow:hidden;
 transition:height .31s cubic-bezier(.22,.82,.2,1)}
.credits-page-track{display:flex;align-items:flex-start;width:100%;
 transform:translate3d(0,0,0);
 transition:transform .31s cubic-bezier(.22,.82,.2,1);will-change:transform}
.credits-page-track .credits-stage{flex:0 0 100%;width:100%;min-width:0;
 display:flex;flex-direction:column;align-items:stretch;gap:12px;
 padding:1px;box-sizing:border-box}
.credits-page-track .credits-stage[hidden]{display:none!important}
.credits-page-track .credits-home-page .credits-home-head,
.credits-dialog.credits-show-subpage .credits-page-track .credits-home-head{
 display:flex!important;align-items:center;gap:12px}
.credits-page-track .credits-home-page .credits-details{display:grid!important}
.credits-page-track .credits-home-page .credits-extra-controls{display:flex!important}
.credits-page-track .credits-subpage{min-height:0}
.credits-page-track .credits-page-content{display:flex;flex-direction:column;
 gap:14px;align-items:stretch}
.credits-page-track .credits-page-back{border:1px solid var(--line);
 width:40px;height:40px;min-width:40px;min-height:40px;
 border-radius:10px;background:var(--soft);color:var(--ink);
 display:grid;place-items:center;padding:0}
.credits-page-track .credits-page-back svg{width:20px;height:20px;display:block;margin:auto}
.credits-page-track .credits-page-title{font-size:18px}
.credits-page-track .credits-page-content:has(#pix-qr){gap:15px;align-items:center}
.credits-page-track .credits-page-content:has(#pix-qr) #pix-copy{width:100%;max-width:270px}
@media(prefers-reduced-motion:reduce){
 .credits-viewport,.credits-page-track{transition:none!important}
}


/* Clip only the horizontal neighbor; long shopping lists remain vertically scrollable. */
#list-page-viewport{
 position:relative;width:100%;min-width:0;
 overflow-x:clip;overflow-y:visible;
}
#application #list-pages{
 width:200%;max-width:none;
}
#application #list-pages .list-page{
 flex:0 0 50%;width:50%;min-width:0;
}

/* Every credits stage has the exact same frame, without a height jump.
   Longer contents (QR code) scroll internally instead of resizing the modal. */
#credits-viewport.credits-viewport{
 height:min(390px,calc(100dvh - 108px))!important;
 max-height:calc(100dvh - 108px)!important;
 overflow:hidden;
 transition:none!important;
}
#credits-page-track.credits-page-track{
 height:100%;
 align-items:stretch;
}
#credits-page-track .credits-stage{
 height:100%!important;max-height:100%!important;
 flex:0 0 100%;overflow-y:auto;overflow-x:hidden;
 overscroll-behavior:contain;scrollbar-width:none;
}
#credits-page-track .credits-stage::-webkit-scrollbar{display:none}




/* rCompras 1.0.23 — compact cart-derived summary with independent empty states.
   Cart:  Mais detalhes  [chevron] + divider > budget > optional savings > total.
   List:  the header and discount row animate closed, leaving budget + total.
   The rows share a single, consistent typographic/grid alignment system. */
#application #dock-wrap #floating-totals,
#application.shopping-list-page #dock-wrap #floating-totals{
 display:flex!important;
 box-sizing:border-box!important;
 flex-direction:column!important;
 justify-content:space-between!important;
 align-items:stretch!important;
 gap:0!important;
 position:absolute;
 width:min(310px,calc(100vw - 36px))!important;
 height:102px!important;
 padding:10px 14px!important;
 margin:0!important;
 border:1px solid var(--line);
 border-radius:10px;
 background:var(--surface);
 box-shadow:0 7px 25px rgba(13,17,21,.10);
 overflow:hidden;
 opacity:1;
 pointer-events:auto!important;
 cursor:default!important;
 font-variant-numeric:tabular-nums;
 transition:height .34s cubic-bezier(.22,.82,.2,1),
            padding .34s cubic-bezier(.22,.82,.2,1),
            box-shadow .22s ease!important;
}
#application.shopping-list-page #dock-wrap #floating-totals{
 height:104px!important;
 padding:11px 14px!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header{
 height:121px!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header.show-discount{
 height:153px!important;
}

/* This button is the entire accordion header, not an inline Total control. */
#application #dock-wrap #floating-totals >#summary-details-toggle{
 display:flex!important;
 box-sizing:border-box!important;
 align-items:center!important;
 justify-content:space-between!important;
 width:100%!important;
 min-width:0!important;
 height:0!important;
 min-height:0!important;
 max-height:0!important;
 flex:0 0 0px!important;
 padding:0!important;
 margin:0!important;
 border:0!important;
 border-radius:0!important;
 border-bottom:0 solid transparent!important;
 background:transparent!important;
 color:var(--muted)!important;
 cursor:pointer;
 overflow:hidden!important;
 visibility:hidden!important;
 opacity:0!important;
 transform:translateY(-7px)!important;
 pointer-events:none!important;
 transition:flex-basis .34s cubic-bezier(.22,.82,.2,1),
            height .34s cubic-bezier(.22,.82,.2,1),
            max-height .34s cubic-bezier(.22,.82,.2,1),
            padding .34s cubic-bezier(.22,.82,.2,1),
            border-color .26s ease,
            opacity .22s ease,
            transform .34s ease,
            visibility 0s linear .34s!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header >#summary-details-toggle{
 height:27px!important;
 min-height:27px!important;
 max-height:27px!important;
 flex-basis:27px!important;
 padding:0 0 4px!important;
 border-bottom:1px solid var(--line)!important;
 visibility:visible!important;
 opacity:1!important;
 transform:none!important;
 pointer-events:auto!important;
 transition:flex-basis .34s cubic-bezier(.22,.82,.2,1),
            height .34s cubic-bezier(.22,.82,.2,1),
            max-height .34s cubic-bezier(.22,.82,.2,1),
            padding .34s cubic-bezier(.22,.82,.2,1),
            border-color .26s ease,
            opacity .22s ease,
            transform .34s ease,
            visibility 0s!important;
}
#application #dock-wrap #floating-totals >#summary-details-toggle >span:first-child{
 font-size:11px!important;
 font-weight:650!important;
 line-height:1.25!important;
 letter-spacing:0!important;
 color:var(--muted)!important;
 text-align:left!important;
 white-space:nowrap!important;
}
#application #dock-wrap #floating-totals >#summary-details-toggle .summary-details-chevron{
 display:block!important;
 flex:0 0 17px!important;
 width:17px!important;
 height:17px!important;
 position:relative;
 color:var(--ink);
}
#application #dock-wrap #floating-totals >#summary-details-toggle .summary-details-chevron::after{
 content:'';
 display:block;
 position:absolute;
 width:7px;height:7px;
 top:4px;left:4px;
 border-right:2px solid currentColor;
 border-bottom:2px solid currentColor;
 transform:rotate(45deg);
 transition:transform .28s cubic-bezier(.22,.82,.2,1);
}
#application #dock-wrap #floating-totals.show-discount >#summary-details-toggle .summary-details-chevron::after{
 transform:translateY(3px) rotate(225deg);
}
#application #dock-wrap #floating-totals >#summary-details-toggle:focus-visible{
 outline:2px solid var(--ink)!important;
 outline-offset:0!important;
}

/* Content rows must never be positioned relative to the header's height. */
#application #dock-wrap #floating-totals >.summary-row,
#application #dock-wrap #floating-totals >.summary-row.final-line{
 display:grid!important;
 grid-template-columns:minmax(0,1fr) max-content!important;
 align-items:center!important;
 justify-content:stretch!important;
 column-gap:10px!important;
 flex:0 0 auto!important;
 box-sizing:border-box!important;
 width:100%!important;
 height:25px!important;
 min-height:25px!important;
 max-height:25px!important;
 padding:0!important;margin:0!important;border:0!important;
 transform:none!important;
 opacity:1!important;
 overflow:visible!important;
 pointer-events:none!important;
 transition:none!important;
}
#application #dock-wrap #floating-totals >.summary-row.final-line{
 height:33px!important;
 min-height:33px!important;
 max-height:33px!important;
}
#application #dock-wrap #floating-totals >#discount-line{
 display:grid!important;
 flex:0 0 0px!important;
 height:0!important;min-height:0!important;max-height:0!important;
 visibility:hidden!important;
 opacity:0!important;
 overflow:hidden!important;
 pointer-events:none!important;
 transform:translateY(-5px)!important;
 transition:opacity .22s ease,transform .28s ease,flex-basis .34s ease!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-discount >#discount-line{
 flex-basis:23px!important;
 height:23px!important;min-height:23px!important;max-height:23px!important;
 visibility:visible!important;
 opacity:1!important;
 transform:none!important;
}
#application #dock-wrap #floating-totals >.summary-row >span:first-child{
 min-width:0!important;
 text-align:left!important;
 justify-self:start!important;
 white-space:nowrap;
 font-size:13px!important;
 font-weight:500!important;
 line-height:1.3!important;
 color:var(--muted)!important;
}
#application #dock-wrap #floating-totals >.summary-row >strong,
#application #dock-wrap #floating-totals >.summary-row >#grand-total{
 justify-self:end!important;
 text-align:right!important;
 min-width:0!important;
 white-space:nowrap;
 line-height:1.15!important;
 margin:0!important;
}
#application #dock-wrap #floating-totals #budget-line .budget-amount{
 display:inline-flex!important;
 align-items:baseline!important;
 justify-content:flex-end!important;
 gap:3px!important;
 font-size:clamp(11px,3.3vw,14px)!important;
 font-weight:650!important;
}
#application #dock-wrap #floating-totals #budget-line .budget-amount >span{
 font-size:inherit!important;
 line-height:inherit!important;
 white-space:nowrap;
}
#application #dock-wrap #floating-totals #budget-line .budget-separator[hidden],
#application #dock-wrap #floating-totals #budget-line #summary-budget-total[hidden]{
 display:none!important;
}
#application #dock-wrap #floating-totals >#discount-line >strong{
 color:var(--ink)!important;
 font-size:13px!important;
 font-weight:700!important;
}
#application #dock-wrap #floating-totals >.final-line >.total-caption{
 font-size:15px!important;
 font-weight:700!important;
 color:var(--ink)!important;
}
#application #dock-wrap #floating-totals >.final-line >#grand-total{
 font-size:19px!important;
 font-weight:750!important;
 letter-spacing:-.02em;
}
#application.shopping-list-page #dock-wrap #floating-totals >.final-line >#grand-total{
 font-size:19px!important;
}
@media(prefers-reduced-motion:reduce){
 #application #dock-wrap #floating-totals,
 #application #dock-wrap #floating-totals >#summary-details-toggle,
 #application #dock-wrap #floating-totals >#discount-line,
 #application #dock-wrap #floating-totals .summary-details-chevron::after{
  transition:none!important;
 }
}

/* Empty cart and empty planning are separate entities, even inside the
   same horizontal track. Hidden finance panel must not reserve space. */
#application #dock-wrap #floating-totals[hidden]{
 display:none!important;
 pointer-events:none!important;
}
#application #list-content:has(.empty-list){
 display:block!important;
 min-height:0!important;
 padding-top:0!important;
}
#application .list-scroller:has(.empty-list){
 overflow-y:auto!important;
 overscroll-behavior:auto!important;
 touch-action:pan-y!important;
}


/* rCompras 1.0.24 — panel entrance/exit + budget-on-demand.
   Keep display mounted for the fade/slide, then apply native hidden. */
#application #dock-wrap #floating-totals,
#application.shopping-list-page #dock-wrap #floating-totals{
 transition:
   height .34s cubic-bezier(.22,.82,.2,1),
   padding .34s cubic-bezier(.22,.82,.2,1),
   opacity .30s cubic-bezier(.22,.82,.2,1),
   transform .30s cubic-bezier(.22,.82,.2,1),
   box-shadow .22s ease!important;
 transform-origin:center bottom!important;
 opacity:1!important;
 transform:translate3d(0,0,0) scale(1)!important;
}
#application #dock-wrap #floating-totals:not(.is-visible){
 opacity:0!important;
 transform:translate3d(0,17px,0) scale(.96)!important;
 pointer-events:none!important;
}
#application #dock-wrap #floating-totals[hidden]{
 display:none!important;
 opacity:0!important;
 pointer-events:none!important;
}
/* Budget is a conditional row: zero actual height and zero visual remnant
   when undefined. These sizes include comfortable top/bottom padding. */
#application #dock-wrap #floating-totals:not(.has-budget){
 height:65px!important;
 padding:12px 14px!important;
}
#application.shopping-list-page #dock-wrap #floating-totals:not(.has-budget){
 height:65px!important;
 padding:12px 14px!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header:not(.has-budget){
 height:91px!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header.show-discount:not(.has-budget){
 height:122px!important;
}
#application #dock-wrap #floating-totals:not(.has-budget) >#budget-line{
 flex:0 0 0!important;
 height:0!important;
 min-height:0!important;
 max-height:0!important;
 opacity:0!important;
 visibility:hidden!important;
 overflow:hidden!important;
 transform:translateY(-5px)!important;
 pointer-events:none!important;
}
#application #dock-wrap #floating-totals.has-budget >#budget-line{
 visibility:visible!important;
 opacity:1!important;
 transform:none!important;
}
#application #dock-wrap #floating-totals >#budget-line{
 transition:height .34s ease,
            max-height .34s ease,
            flex-basis .34s ease,
            opacity .22s ease,
            transform .34s ease!important;
}
@media(prefers-reduced-motion:reduce){
 #application #dock-wrap #floating-totals,
 #application #dock-wrap #floating-totals >#budget-line{
  transition:none!important;
 }
}


/* rCompras 1.0.25 — deterministic horizontal centering.
   Absolute positioning no longer relies on the flex static-position algorithm. */
#application #dock-wrap #floating-totals{
 left:0!important;
 right:0!important;
 margin-left:auto!important;
 margin-right:auto!important;
 max-width:calc(100vw - 28px)!important;
}
#application #dock-wrap #floating-totals{
 --finance-positive:#18795C;
 --finance-negative:#B93D4D;
 --finance-accent:#3563AC;
}
html[data-theme="dark"] #application #dock-wrap #floating-totals{
 --finance-positive:#63CDB2;
 --finance-negative:#F28A98;
 --finance-accent:#A8BFF2;
}
#application #dock-wrap #floating-totals #budget-line[data-level="over"] #summary-budget-balance{
 color:var(--finance-negative)!important;
}
#application #dock-wrap #floating-totals #budget-line:not([data-level="over"]) #summary-budget-balance{
 color:var(--finance-positive)!important;
}
#application #dock-wrap #floating-totals #budget-line .budget-separator,
#application #dock-wrap #floating-totals #summary-budget-total{
 color:var(--muted)!important;
}
#application #dock-wrap #floating-totals #discount-value{
 color:var(--finance-positive)!important;
}
#application #dock-wrap #floating-totals #summary-details-toggle>span:first-child{
 color:var(--muted)!important;
}
#application #dock-wrap #floating-totals .summary-details-chevron{
 color:var(--muted)!important;
}
#application #dock-wrap #floating-totals .total-caption{
 color:var(--ink)!important;
}
#application #dock-wrap #floating-totals #grand-total{
 color:var(--ink)!important;
}


/* rCompras 1.0.25 — content balance within every 390px credits stage.
   Header is anchored at the top, primary content occupies the center,
   and redemption/donation actions anchor to the bottom. */
#credits-page-track .credits-stage{
 display:flex!important;
 flex-direction:column!important;
 align-items:stretch!important;
 justify-content:flex-start!important;
 gap:10px!important;
}
#credits-page-track .credits-home-page .credits-home-head{
 flex:0 0 auto!important;
}
#credits-page-track .credits-home-page #credits-details{
 flex:1 1 auto!important;
 min-height:0!important;
 align-content:center!important;
 justify-content:stretch!important;
 margin:0!important;
}
#credits-page-track .credits-home-page .credits-extra-controls{
 flex:0 0 auto!important;
 margin-top:auto!important;
}
#credits-page-track .credits-subpage-head{
 flex:0 0 auto!important;
 margin-bottom:0!important;
 min-height:42px!important;
}
#credits-page-track #credits-subpage-content,
#credits-page-track .credits-page-content{
 display:flex!important;
 flex:1 1 auto!important;
 flex-direction:column!important;
 align-items:stretch!important;
 justify-content:space-between!important;
 gap:12px!important;
 width:100%!important;
 min-width:0!important;
 min-height:0!important;
 padding:6px 0 2px!important;
}
#credits-page-track .credits-page-content .credits-subpage-help{
 flex:0 0 auto;
}
#credits-page-track .gift-code-slots{
 width:100%;
 margin-block:auto!important;
 flex:0 0 auto;
}
#credits-page-track #gift-redeem,
#credits-page-track #pix-next,
#credits-page-track #pix-copy{
 flex:0 0 auto!important;
 margin-top:auto!important;
 width:100%;
}
#credits-page-track .pix-entry-group{
 flex:0 1 auto!important;
 display:flex!important;
 flex-direction:column!important;
 justify-content:center!important;
 align-items:stretch!important;
 gap:11px!important;
 margin-block:auto!important;
 width:100%;
}
#credits-page-track .pix-entry-group .pix-entry-label{
 text-align:center;
}
#credits-page-track .pix-entry-group #pix-amount{
 width:100%;
}
#credits-page-track .credits-page-content:has(#pix-qr){
 justify-content:space-between!important;
 align-items:stretch!important;
}
#credits-page-track .credits-page-content #pix-qr{
 margin:auto auto!important;
 max-width:min(100%,240px)!important;
 width:min(100%,240px)!important;
 min-height:0!important;
 flex:0 1 auto!important;
}
#credits-page-track .credits-page-content #pix-qr svg{
 max-height:min(220px,36dvh)!important;
 width:auto!important;
 max-width:100%!important;
 margin:auto!important;
}
#credits-page-track .credits-page-content #pix-copy{
 align-self:stretch!important;
 max-width:none!important;
}
@media(max-height:630px){
 #credits-page-track .credits-stage{gap:6px!important}
 #credits-page-track #credits-subpage-content,
 #credits-page-track .credits-page-content{gap:8px!important}
 #credits-page-track .gift-code-slots input{height:46px!important}
}

#application #dock-wrap #floating-totals >#discount-line >#discount-value,
#application #dock-wrap #floating-totals #discount-percent{
 color:var(--finance-positive)!important;
}
#application #dock-wrap #floating-totals >#discount-line >#discount-label{
 color:var(--muted)!important;
}
#application #dock-wrap #floating-totals #discount-percent{
 font-size:inherit!important;
 font-weight:700!important;
}

#application.shopping-list-page #dock-wrap #floating-totals{
 left:0!important;
 right:0!important;
 margin-left:auto!important;
 margin-right:auto!important;
}


/* rCompras 1.0.26 — non-destructive header actions use neutral feedback.
   Only the clear/delete action retains its destructive red treatment. */
#application .scan-header-actions :is(#price-mode-button,#install-app):not(:disabled),
#application .scan-header-actions #credits-trigger:not(:disabled){
 transition:background-color .18s ease,border-color .18s ease,color .18s ease,transform .18s ease;
}
@media(hover:hover) and (pointer:fine){#application .scan-header-actions :is(#price-mode-button,#install-app):not(:disabled):hover,
#application .scan-header-actions #credits-trigger:not(:disabled):hover{
 border-color:color-mix(in srgb,var(--ink) 36%,var(--line))!important;
 background:color-mix(in srgb,var(--ink) 7%,var(--surface))!important;
 color:var(--ink)!important;}
}
#application .scan-header-actions :is(#price-mode-button,#install-app):not(:disabled):active,
#application .scan-header-actions #credits-trigger:not(:disabled):active{
 border-color:color-mix(in srgb,var(--ink) 52%,var(--line))!important;
 background:color-mix(in srgb,var(--ink) 14%,var(--surface))!important;
 color:var(--ink)!important;
}
#application .scan-header-actions #price-mode-button[data-active="true"]{
 border-color:color-mix(in srgb,var(--ink) 52%,var(--line))!important;
 background:color-mix(in srgb,var(--ink) 10%,var(--surface))!important;
 color:var(--ink)!important;
}
#application .scan-header-actions #price-mode-button:focus-visible{
 outline:2px solid var(--focus)!important;
 outline-offset:2px;
}
#price-mode-overlay .price-mode-option:not(:disabled){
 transition:background-color .18s ease,border-color .18s ease,color .18s ease;
}
@media(hover:hover) and (pointer:fine){#price-mode-overlay .price-mode-option:not(:disabled):hover{
 background:color-mix(in srgb,var(--ink) 6%,var(--surface))!important;
 border-color:color-mix(in srgb,var(--ink) 38%,var(--line))!important;
 color:var(--ink)!important;
}}
#price-mode-overlay .price-mode-option:not(:disabled):active,
#price-mode-overlay .price-mode-option[aria-pressed="true"]{
 background:color-mix(in srgb,var(--ink) 10%,var(--surface))!important;
 border-color:var(--ink)!important;
 color:var(--ink)!important;
}
@media(prefers-reduced-motion:reduce){
 #application .scan-header-actions :is(#price-mode-button,#install-app),
 #application .scan-header-actions #credits-trigger,
 #price-mode-overlay .price-mode-option{transition:none!important}
}


/* rCompras 1.0.29: smooth, single color lerp and count-up exclusively on currency. */
#application .value-motion{
 font-variant-numeric:tabular-nums;
 transition:none!important;
 text-shadow:none!important;
}
#application #items .item-sub .value-motion{display:inline-block;}
@media(prefers-reduced-motion:reduce){
 #application .value-motion{animation:none!important;text-shadow:none!important;filter:none!important;}
}

/* rCompras 1.0.30: anchor financial rows to the bottom of the expanding panel.
   space-between redistributed every row on each frame and caused down/up jumps. */
#application #dock-wrap #floating-totals{
 justify-content:flex-end!important;
 gap:4px!important;
}

/* rCompras 1.0.33: stable breathing room above BOTH carousel lists. */
#application #list-content,
#application.shopping-list-page #list-content,
#application:not(.shopping-list-page) #list-content{
 padding-top:clamp(32px,4.2vh,46px)!important;
}
/* Planning is voice/text only: disable only the camera ICON visually.
   The button frame stays unchanged; opacity/color smoothly ease both ways. */
#application #camera-button,
#application #camera-button:disabled{
 opacity:1!important;
 filter:none!important;
 background:transparent!important;
 transform:none!important;
}
#application #camera-button:disabled{
 cursor:not-allowed!important;
 pointer-events:none!important;
}
#application #camera-button svg{
 opacity:1;
 color:var(--ink);
 transition:opacity .38s cubic-bezier(.22,.82,.2,1),
            color .38s cubic-bezier(.22,.82,.2,1)!important;
}
#application.shopping-list-page #camera-button:disabled svg{
 opacity:.36!important;
 color:var(--muted)!important;
}
@media(prefers-reduced-motion:reduce){
 #application #camera-button svg{transition:none!important}
}
/* The island remains a hit-testing surface until its exit is fully removed. */
#notification-island:not(:has(.island-message)){pointer-events:none!important}
#notification-island:has(.island-message){pointer-events:auto!important;touch-action:pan-y}
#notification-island .island-message,
#notification-island .island-message.island-leaving{
 pointer-events:auto!important;
}
#notification-island .island-message:not(.island-redeem){
 min-height:49px!important;
 max-height:78px;
 padding:9px 41px 12px 13px!important;
 border-radius:10px!important;
 font-size:12px!important;
 line-height:1.32!important;
}
#notification-island .island-notice-content{
 display:-webkit-box;
 -webkit-box-orient:vertical;
 -webkit-line-clamp:2;
 line-clamp:2;
 overflow:hidden;
}
#notification-island .island-dismiss{width:26px;height:26px;right:7px;top:7px}
#notification-island .island-time{animation-duration:var(--island-duration,2100ms)!important;height:3px}
@media(prefers-reduced-motion:reduce){
 #notification-island .island-message.island-leaving{animation:none!important}
}

/* Código promocional fixo: cinco caixas independentes, sem rolagem horizontal. */
.gift-code-slots{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:7px;width:100%;max-width:350px;margin-inline:auto}
.gift-code-slots .gift-code-slot{width:100%;min-width:0;padding:0;font-size:clamp(18px,5vw,23px);letter-spacing:0;text-align:center;}
.gift-code-slots .gift-code-slot:focus-visible{outline-offset:2px}
@media(max-width:340px){.gift-code-slots{gap:5px}.gift-code-slots .gift-code-slot{height:49px;font-size:20px}}

/* Auth fail-safe: reconnection remains accessible while the local cart is shown. */
.connection-state:has(.connection-retry){display:flex;align-items:center;gap:9px;pointer-events:auto;white-space:normal;width:max-content;max-width:calc(100vw - 20px);}
.connection-state .connection-retry{border:1px solid var(--line);border-radius:10px;background:var(--ink);color:var(--surface);font-weight:700;font-size:11px;padding:6px 10px;white-space:nowrap;}
.connection-state .connection-retry:disabled{opacity:.55;}

/* Plano aplicado ao botão de créditos — Gratuito neutro, Básico verde, Atacado laranja. */
#application .scan-header-actions #credits-trigger[data-plan=basico]{
 --tier-color:#168B53;--tier-ink:#117644;--tier-shadow:rgba(19,174,98,.36);
 background:color-mix(in srgb,var(--tier-color) 12%,var(--surface))!important;color:var(--tier-ink)!important;
 border-color:color-mix(in srgb,var(--tier-color) 60%,var(--line))!important;
 box-shadow:0 0 0 1px rgba(18,166,89,.12),0 0 18px var(--tier-shadow);
 animation:credits-tier-glow-green 2.8s ease-in-out infinite;
}
#application .scan-header-actions #credits-trigger[data-plan=atacado]{
 --tier-color:#EF8722;--tier-ink:#A45310;--tier-shadow:rgba(239,128,21,.40);
 background:color-mix(in srgb,var(--tier-color) 13%,var(--surface))!important;color:var(--tier-ink)!important;
 border-color:color-mix(in srgb,var(--tier-color) 68%,var(--line))!important;
 box-shadow:0 0 0 1px rgba(229,131,31,.14),0 0 19px var(--tier-shadow);
 animation:credits-tier-glow-orange 2.8s ease-in-out infinite;
}
#application .scan-header-actions #credits-trigger[data-plan=gratuito]{
 animation:none;box-shadow:none!important;
}
#application .scan-header-actions #credits-trigger:is([data-plan=basico],[data-plan=atacado]):hover{
 background:color-mix(in srgb,var(--tier-color) 20%,var(--surface))!important;
 border-color:var(--tier-color)!important;color:var(--tier-ink)!important;
}
#application .scan-header-actions #credits-trigger:is([data-plan=basico],[data-plan=atacado]):active{transform:scale(.96)}
@keyframes credits-tier-glow-green{0%,100%{box-shadow:0 0 0 1px rgba(18,166,89,.11),0 0 8px rgba(19,174,98,.17)}50%{box-shadow:0 0 0 2px rgba(18,166,89,.23),0 0 23px rgba(19,174,98,.42)}}
@keyframes credits-tier-glow-orange{0%,100%{box-shadow:0 0 0 1px rgba(229,131,31,.14),0 0 9px rgba(239,128,21,.19)}50%{box-shadow:0 0 0 2px rgba(239,128,21,.26),0 0 25px rgba(239,128,21,.46)}}
#credits-overlay[data-plan=basico] .credit-ring{--credits-accent:#168B53}
#credits-overlay[data-plan=atacado] .credit-ring{--credits-accent:#EF8722}
@media(prefers-reduced-motion:reduce){
 #application .scan-header-actions #credits-trigger:is([data-plan=basico],[data-plan=atacado]){animation:none!important}
}

/* Situação da assinatura sob o nome do plano na visão de créditos. */
#credits-details .credits-plan-info{display:flex;flex-direction:column;gap:4px;margin:2px 0 0}
#credits-details .credits-plan-info .credits-plan-name{margin:0}
#credits-details .credits-plan-validity{display:block;text-align:center;font-size:11px;line-height:1.5;color:var(--muted);font-weight:550;font-variant-numeric:tabular-nums}

/* RCompras: optional precise-location / community contribution permissions. */
.scan-privacy{display:grid;gap:7px;padding:10px 14px;margin:6px 0 2px;border:1px solid var(--line,rgba(128,128,128,.22));border-radius:10px;font-size:12px;background:var(--surface,rgba(128,128,128,.04))}
.scan-privacy label{display:flex;align-items:center;gap:9px;min-height:26px;cursor:pointer;font-weight:550}
.scan-privacy input{width:17px;height:17px;flex:0 0 17px;accent-color:var(--ink)}
.scan-privacy small{font-size:11px;line-height:1.35;opacity:.75;padding-left:26px}

.scan-last-position{padding:5px 16px 7px;font-size:11px;opacity:.78;white-space:normal;overflow-wrap:anywhere}

.scan-history-delete{justify-self:start;border:0;background:transparent;padding:4px 0 1px 26px;font-size:11px;text-decoration:underline;color:inherit;opacity:.8;cursor:pointer}

/* Compact privacy drawer: slides in from the right and exits to the right. */
.scan-privacy-overlay:not([hidden]){
 position:fixed;inset:0;z-index:99999;display:flex;align-items:center;
 justify-content:flex-end;padding:14px;background:rgba(10,15,24,.30);
 animation:scan-privacy-backdrop-in .25s ease-out both;
}
.scan-privacy-overlay .scan-privacy-modal{
 box-sizing:border-box;flex:0 1 398px;
 width:min(398px,calc(100vw - 28px));
 max-width:calc(100vw - 28px);
 max-height:calc(100dvh - 28px);
 overflow:auto;overscroll-behavior:contain;
 border:1px solid var(--line,rgba(128,128,128,.18));
 border-radius:10px;
 padding:20px 19px 18px;
 background:var(--surface,#fff);color:var(--ink,#202125);
 box-shadow:0 14px 48px rgba(0,0,0,.22);
 display:flex;flex-direction:column;gap:12px;
 animation:scan-privacy-enter .27s cubic-bezier(.2,.85,.25,1) both;
}
.scan-privacy-overlay.is-closing{animation:scan-privacy-backdrop-out .24s ease-in both}
.scan-privacy-overlay.is-closing .scan-privacy-modal{animation:scan-privacy-exit .24s cubic-bezier(.55,0,.85,.55) both}
@keyframes scan-privacy-enter{from{transform:translateX(calc(100% + 32px));opacity:.55}to{transform:translateX(0);opacity:1}}
@keyframes scan-privacy-exit{from{transform:translateX(0);opacity:1}to{transform:translateX(calc(100% + 32px));opacity:.55}}
@keyframes scan-privacy-backdrop-in{from{background:rgba(10,15,24,0)}to{background:rgba(10,15,24,.30)}}
@keyframes scan-privacy-backdrop-out{from{background:rgba(10,15,24,.30)}to{background:rgba(10,15,24,0)}}
.scan-privacy-drawer-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.scan-privacy-modal h2{font-size:19px;font-weight:750;margin:0}
#privacy-close{display:grid;place-items:center;flex:0 0 32px;width:32px;height:32px;line-height:1;border:1px solid var(--line,#d5d8df);border-radius:10px;background:transparent;color:inherit;font-size:24px;cursor:pointer}
.scan-privacy-modal p{margin:0;font-size:12.5px;line-height:1.5}
.scan-privacy-modal label{display:flex;align-items:flex-start;gap:10px;line-height:1.4;font-size:13px;padding:5px 0;cursor:pointer}
.scan-privacy-modal label input{width:18px;height:18px;flex:0 0 18px;accent-color:var(--ink)}
.scan-privacy-modal .privacy-hint{opacity:.72;font-size:11px}
.scan-privacy-modal-actions{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}
.scan-privacy-modal-actions button{border-radius:10px;border:1px solid var(--line,#d5d8df);padding:11px 12px;font-weight:600;font-size:12px;cursor:pointer}
#privacy-save{background:var(--ink,#25282b);color:var(--surface,#fff)}
#privacy-skip{background:transparent;color:inherit}
.scan-privacy-erase{border:0;background:transparent;text-decoration:underline;text-align:left;color:inherit;font-size:11px;opacity:.75;cursor:pointer;padding:5px 0}
@media(min-width:800px){.scan-privacy-overlay:not([hidden]){padding-right:30px}}
@media(max-width:390px){.scan-privacy-modal{padding:15px!important;gap:9px!important}}
@media(prefers-reduced-motion:reduce){
 .scan-privacy-overlay:not([hidden]),.scan-privacy-overlay .scan-privacy-modal,
 .scan-privacy-overlay.is-closing,.scan-privacy-overlay.is-closing .scan-privacy-modal{
  animation-duration:.01ms!important;
 }
}
/* Screen-owned privacy controls: the camera contains no GPS settings or messaging. */
#privacy-test,#privacy-device-settings{font:inherit;font-size:12px;padding:8px 10px;border:1px solid var(--line,#d5d8df);border-radius:10px;background:transparent;color:inherit;cursor:pointer}
#privacy-status:empty,#privacy-device-status:empty{display:none}

/* 2026-10-30 — Keyboard: panel is capped to the visible room so a focused field can always be scrolled into view. */
html.rcompras-keyboard #dock[data-mode='manual'],
html.rcompras-keyboard #dock[data-mode='edit'],
html.rcompras-keyboard #dock[data-mode='budget']{max-height:var(--rcompras-keyboard-room,100dvh)!important}

/* R Compras DEV: shared search under the fixed header. */
.shopping-search-bar{display:flex;align-items:center;gap:10px;padding:8px 14px;
 margin:0 12px 0;border:1px solid var(--line);border-radius:10px;
 background:var(--surface);color:var(--muted);position:relative;z-index:2}
.shopping-search-bar svg{width:18px;height:18px;flex-shrink:0}
#shopping-search{background:transparent;border:0;outline:0;color:var(--ink);
 width:100%;font:inherit;font-size:15px;min-height:28px}
#shopping-search::placeholder{color:var(--muted)}
#shopping-search::-webkit-search-cancel-button{cursor:pointer}
#items > .list-item[hidden],#planning-items > [data-planning-id][hidden]{display:none!important}
#application #camera-button svg{color:var(--ink)!important}
#application.shopping-list-page #camera-button:disabled svg{
 color:var(--muted)!important;opacity:.4!important}
html[data-theme="dark"] #application #camera-button svg,
html.dark #application #camera-button svg{color:var(--ink)!important}
#price-mode-overlay .price-mode-option[aria-checked="true"]{
 border-color:var(--ink);background:var(--soft)}
@media(prefers-reduced-motion:reduce){.shopping-search-bar{scroll-behavior:auto}}

/* DEV camera SVG stroke follows actual theme instead of inherited active-button white. */
html[data-theme] #application #dock-wrap #dock #camera-button svg{
 color:var(--ink)!important;
 stroke:var(--ink)!important;
}
html[data-theme] #application.shopping-list-page #dock-wrap #dock #camera-button:disabled svg{
 color:var(--muted)!important;
 stroke:var(--muted)!important;
 opacity:.4!important;
}

/* DEV only: search must occupy its own fixed row BELOW the header, even with an empty cart. */
#application > .shopping-search-bar{
 position:absolute!important;top:calc(68px + env(safe-area-inset-top));left:50%;transform:translateX(-50%);
 width:calc(100% - 24px);max-width:748px;margin:8px 0 0!important;
 min-height:44px;z-index:19;box-shadow:0 2px 8px rgba(0,0,0,.035);
}
#application .list-scroller{top:calc(128px + env(safe-area-inset-top))!important}
#shopping-search{min-width:0}
#application .dev-fixture-trigger{width:33px;height:33px;flex:0 0 33px;padding:0;display:grid;place-items:center;
 border:1px dashed var(--muted);color:var(--ink);background:var(--soft);border-radius:10px}
#application .dev-fixture-trigger svg{width:18px;height:18px}
#application .dev-fixture-trigger[hidden]{display:none!important}
.dev-fixture-overlay{position:fixed;inset:0;z-index:90;display:flex;align-items:center;justify-content:center;
 background:rgba(10,11,14,.55);padding:12px;overscroll-behavior:contain}
.dev-fixture-dialog{display:flex;flex-direction:column;gap:11px;width:min(530px,100%);max-height:calc(100dvh - 24px);
 overflow:auto;overscroll-behavior:contain;background:var(--surface);color:var(--ink);border:1px solid var(--line);
 border-radius:10px;padding:20px;box-shadow:0 22px 66px #0006}
.dev-fixture-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.dev-fixture-head h2{margin:3px 0 0;font-size:22px}
.dev-fixture-eyebrow{font-size:10px;letter-spacing:.095em;color:var(--muted);font-weight:800}
.dev-fixture-head button{width:40px;height:40px;display:grid;place-items:center;border:0;border-radius:10px;
 background:var(--soft);color:var(--ink);flex-shrink:0}
.dev-fixture-dialog>p{margin:0;font-size:12px;color:var(--muted);line-height:1.5}
.dev-fixture-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.dev-fixture-stats span{border:1px solid var(--line);background:var(--soft);padding:9px 5px;
 text-align:center;border-radius:10px;font-size:11px}
.dev-fixture-stats strong{display:block;font-size:20px;color:var(--ink)}
.dev-fixture-choice{display:flex;align-items:flex-start;gap:10px;font-size:13px;cursor:pointer}
.dev-fixture-choice input{width:18px;height:18px;accent-color:var(--ink);flex-shrink:0}
.dev-fixture-preview{border:1px solid var(--line);border-radius:10px;padding:9px 12px;font-size:12px}
.dev-fixture-preview summary{cursor:pointer;font-weight:700}
.dev-fixture-preview p{margin-bottom:0;line-height:1.5;color:var(--muted)}
.dev-fixture-extra{font-size:12px;font-weight:700}
#dev-fixture-manual{width:100%;min-height:76px;resize:vertical;padding:10px 12px;
 border:1px solid var(--line);border-radius:10px;background:var(--bg);color:var(--ink);font:inherit;font-size:13px}
.dev-fixture-dialog .dev-fixture-hint{font-size:11px;margin-top:-7px}
.dev-fixture-status{min-height:18px}
.dev-fixture-buttons{display:flex;gap:9px;flex-wrap:wrap}
.dev-fixture-buttons button{flex:1 1 160px;min-height:45px;border-radius:10px;font-weight:700;padding:9px}
.dev-fixture-remove{border:1px solid var(--line);background:var(--surface);color:var(--ink)}
.dev-fixture-generate{border:1px solid var(--ink);background:var(--ink);color:var(--surface)}
.dev-fixture-buttons button:disabled{opacity:.55}
@media(max-width:390px){#application .dev-fixture-trigger{width:30px;height:30px;flex-basis:30px}
 .dev-fixture-dialog{padding:14px;gap:9px}.dev-fixture-stats strong{font-size:17px}
 #application .scan-header-actions{gap:3px!important}}

/* A persistent exit affordance stays available when fixture writes are in flight. */
.dev-fixture-head{position:sticky;top:-20px;z-index:3;background:var(--surface);padding:4px 0}
.dev-fixture-exit{position:sticky;bottom:-20px;width:100%;min-height:47px;flex-shrink:0;
 border-radius:10px;border:1px solid var(--line);background:var(--soft);color:var(--ink);
 font:inherit;font-weight:700;z-index:3;box-shadow:0 -5px 12px var(--surface)}
@media(max-width:390px){.dev-fixture-head{top:-14px}.dev-fixture-exit{bottom:-14px}}


/* DEV finance summary: one stable axis, with Subtotal and Descontos in the same accordion.
   No space-between redistribution or stale hard-coded 1.0.23 heights. */
#application #dock-wrap #floating-totals{
 justify-content:flex-end!important;align-content:stretch!important;gap:0!important;
 height:70px!important;padding:14px 14px!important;
 transition:height .40s cubic-bezier(.22,.80,.22,1),
            padding .40s cubic-bezier(.22,.80,.22,1),
            opacity .32s ease,transform .32s cubic-bezier(.22,.80,.22,1),
            box-shadow .22s ease!important;
}
#application #dock-wrap #floating-totals.has-budget{height:104px!important}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header:not(.has-budget){height:107px!important}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header.has-budget{height:141px!important}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header.show-discount:not(.has-budget){height:171px!important}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header.show-discount.has-budget{height:205px!important}
#application #dock-wrap #floating-totals >#summary-details-toggle{margin-bottom:0!important;
 transition:height .40s cubic-bezier(.22,.80,.22,1),
 max-height .40s cubic-bezier(.22,.80,.22,1),flex-basis .40s cubic-bezier(.22,.80,.22,1),
 margin-bottom .40s cubic-bezier(.22,.80,.22,1),opacity .25s ease,
 transform .40s cubic-bezier(.22,.80,.22,1),visibility 0s linear .40s!important}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header >#summary-details-toggle{
 margin-bottom:8px!important;transition:height .40s cubic-bezier(.22,.80,.22,1),
 max-height .40s cubic-bezier(.22,.80,.22,1),flex-basis .40s cubic-bezier(.22,.80,.22,1),
 margin-bottom .40s cubic-bezier(.22,.80,.22,1),opacity .25s ease,transform .40s cubic-bezier(.22,.80,.22,1),
 visibility 0s!important;
}
#application #dock-wrap #floating-totals >#budget-line{margin-bottom:0!important;
 transition:height .40s cubic-bezier(.22,.80,.22,1),min-height .40s cubic-bezier(.22,.80,.22,1),
 max-height .40s cubic-bezier(.22,.80,.22,1),flex-basis .40s cubic-bezier(.22,.80,.22,1),
 margin-bottom .40s cubic-bezier(.22,.80,.22,1),opacity .24s ease!important}
#application #dock-wrap #floating-totals.has-budget >#budget-line{margin-bottom:9px!important}
#application #dock-wrap #floating-totals >#subtotal-line,
#application #dock-wrap #floating-totals >#discount-line{
 display:grid!important;flex:0 0 0px!important;
 height:0!important;min-height:0!important;max-height:0!important;
 padding:0!important;margin:0!important;border:0!important;
 overflow:hidden!important;visibility:hidden!important;opacity:0!important;
 transform:translateY(-5px)!important;pointer-events:none!important;
 transition:height .40s cubic-bezier(.22,.80,.22,1),
 min-height .40s cubic-bezier(.22,.80,.22,1),max-height .40s cubic-bezier(.22,.80,.22,1),
 flex-basis .40s cubic-bezier(.22,.80,.22,1),margin-bottom .40s cubic-bezier(.22,.80,.22,1),
 opacity .24s ease,transform .40s cubic-bezier(.22,.80,.22,1),
 visibility 0s linear .40s!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-discount >#subtotal-line,
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-discount >#discount-line{
 height:23px!important;min-height:23px!important;max-height:23px!important;flex-basis:23px!important;
 opacity:1!important;visibility:visible!important;transform:none!important;
 transition:height .40s cubic-bezier(.22,.80,.22,1),min-height .40s cubic-bezier(.22,.80,.22,1),
 max-height .40s cubic-bezier(.22,.80,.22,1),flex-basis .40s cubic-bezier(.22,.80,.22,1),
 margin-bottom .40s cubic-bezier(.22,.80,.22,1),opacity .24s ease,transform .40s cubic-bezier(.22,.80,.22,1),
 visibility 0s!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-discount >#subtotal-line{margin-bottom:5px!important}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-discount >#discount-line{margin-bottom:8px!important}
#application #dock-wrap #floating-totals #subtotal-value{font-size:13px!important;font-weight:650!important;color:var(--ink)!important}
#application #dock-wrap #floating-totals >.final-line{margin-top:0!important}
@media(prefers-reduced-motion:reduce){
 #application #dock-wrap #floating-totals,#application #dock-wrap #floating-totals >#summary-details-toggle,
 #application #dock-wrap #floating-totals >#budget-line,#application #dock-wrap #floating-totals >#subtotal-line,
 #application #dock-wrap #floating-totals >#discount-line{transition:none!important}
}
/* Editing existing cart item: keep the name field visible when mobile keyboard opens. */
#dock[data-mode='edit'] .dock-content{
 overflow-y:auto!important;overscroll-behavior:contain!important;touch-action:pan-y!important;
 scrollbar-width:thin!important;scroll-padding-top:14px;scroll-padding-bottom:18px;
}
#dock[data-mode='edit'] .dock-content::-webkit-scrollbar{display:block;width:4px}
#dock[data-mode='edit'] .dock-form{padding-bottom:15px;min-height:max-content!important}
#planning-items .planning-card:has(.planning-edit-input){position:relative;z-index:2}
#planning-items .planning-edit-input{font-size:16px;min-height:42px}

/* Match the preceding higher-specificity no-budget selectors. */
#application #dock-wrap #floating-totals:not(.has-budget):not(.show-details-header){height:70px!important}
#application #dock-wrap #floating-totals.has-budget:not(.show-details-header){height:104px!important}


/* DEV: swipe and page-switch settle at the same 220ms timing, scroll uses its
   dedicated 135ms RAF tween and starts before the gesture ends. */
#application #list-pages{transition:transform .22s cubic-bezier(.22,.82,.2,1)}
#application #list-pages.is-dragging{transition:none!important}
@media(prefers-reduced-motion:reduce){
 #application #list-pages{transition:none!important}
}

/* Compact the budget editor: preview, limit label and price input should read
   as a single group on BOTH shopping pages, without exaggerated empty bands. */
#application #dock[data-mode='budget'] .dock-content{
 padding:8px 15px 2px!important;gap:0!important;justify-content:flex-start!important;
}
#application #dock[data-mode='budget'] .dock-heading{
 min-height:34px!important;margin:0 0 2px!important;
}
#application #dock[data-mode='budget'] .budget-dock-form{
 flex:0 0 auto!important;gap:5px!important;justify-content:flex-start!important;
 margin:0!important;
}
#application #dock[data-mode='budget'] .budget-preview{
 min-height:0!important;margin:0!important;line-height:1.25!important;
}
#application #dock[data-mode='budget'] .field-label{
 margin:0!important;line-height:1.25!important;
}
#application #dock[data-mode='budget'] #budget-input{margin:0!important}
#application #dock[data-mode='budget'] #budget-submit{margin:0!important}
@media(max-height:680px){
 #application #dock[data-mode='budget'] .dock-content{padding-top:5px!important}
 #application #dock[data-mode='budget'] .budget-dock-form{gap:4px!important}
}


/* v8: budget and total summary rows must have no phantom vertical space.
   Exact state heights match the real row geometry plus 9px padding;
   never distribute spare height over the top or between labels. */
#application #dock-wrap #floating-totals{
 justify-content:flex-start!important;
 gap:0!important;padding:9px 13px!important;
 height:54px!important;
 transition:height .29s cubic-bezier(.2,.78,.2,1),
  padding .29s cubic-bezier(.2,.78,.2,1),opacity .26s ease,
  transform .26s cubic-bezier(.2,.78,.2,1),box-shadow .2s ease!important;
}
#application #dock-wrap #floating-totals:not(.has-budget):not(.show-details-header){
 height:54px!important;
}
#application #dock-wrap #floating-totals.has-budget:not(.show-details-header){
 height:83px!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header:not(.has-budget):not(.show-discount){
 height:85px!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header.has-budget:not(.show-discount){
 height:114px!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header.show-discount:not(.has-budget){
 height:139px!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header.show-discount.has-budget{
 height:168px!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header >#summary-details-toggle{
 margin:0 0 4px!important;
}
#application #dock-wrap #floating-totals.has-budget >#budget-line{
 margin:0 0 4px!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-discount >#subtotal-line{
 margin:0 0 3px!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-discount >#discount-line{
 margin:0 0 5px!important;
}
@media(prefers-reduced-motion:reduce){
 #application #dock-wrap #floating-totals{transition:none!important}
}

/* v8: budget editor is compact on either page, removing double margins. */
#application #dock[data-mode='budget'] .dock-content{padding:6px 14px 1px!important}
#application #dock[data-mode='budget'] .dock-heading{min-height:34px!important;margin-bottom:0!important}
#application #dock[data-mode='budget'] .budget-dock-form{gap:4px!important}
#application #dock[data-mode='budget'] .budget-preview{margin:0!important}
#application #dock[data-mode='budget'] #budget-input{min-height:44px!important}


/* v9 financial motion: the card and every line use the SAME grid track tween.
   Fixed row heights and 'justify-content:flex-end' from historical releases
   caused internal text to teleport while the shell was easing. */
#application #dock-wrap #floating-totals,
#application.shopping-list-page #dock-wrap #floating-totals{
 display:grid!important;
 grid-template-columns:minmax(0,1fr)!important;
 grid-template-rows:var(--finance-grid-rows,0px 0px 0px 0px 29px)!important;
 align-content:start!important;
 align-items:stretch!important;
 justify-content:stretch!important;
 justify-items:stretch!important;
 row-gap:0!important;
 column-gap:0!important;
 padding:8px 12px!important;
 overflow:hidden!important;
 transition:height .36s cubic-bezier(.25,.76,.25,1),
            grid-template-rows .36s cubic-bezier(.25,.76,.25,1),
            opacity .28s ease,
            transform .28s cubic-bezier(.25,.76,.25,1),
            box-shadow .22s ease!important;
}
/* Direct rows inherit only their interpolating grid tracks. Content never
   dictates a minimum or jumps to its final flow position before the panel. */
#application #dock-wrap #floating-totals > .summary-row{
 display:grid!important;
 grid-template-columns:minmax(0,1fr) max-content!important;
 align-items:center!important;
 align-self:stretch!important;
 width:100%!important;
 height:100%!important;
 min-height:0!important;
 max-height:none!important;
 flex:none!important;
 margin:0!important;
 padding:0!important;
 border:0!important;
 overflow:hidden!important;
 pointer-events:none!important;
 opacity:0!important;
 visibility:hidden!important;
 transform:translate3d(0,-5px,0)!important;
 transition:opacity .26s cubic-bezier(.25,.76,.25,1),
            transform .36s cubic-bezier(.25,.76,.25,1),
            visibility 0s linear .36s!important;
}
#application #dock-wrap #floating-totals > .final-line,
#application #dock-wrap #floating-totals.has-budget > #budget-line,
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-discount > :is(#subtotal-line,#discount-line){
 opacity:1!important;
 visibility:visible!important;
 transform:translate3d(0,0,0)!important;
 transition:opacity .29s cubic-bezier(.25,.76,.25,1),
            transform .36s cubic-bezier(.25,.76,.25,1),
            visibility 0s!important;
}
#application #dock-wrap #floating-totals > #summary-details-toggle{
 display:flex!important;
 align-items:center!important;
 align-self:stretch!important;
 flex:none!important;
 width:100%!important;
 height:100%!important;
 min-height:0!important;
 max-height:none!important;
 margin:0!important;
 padding:0!important;
 border:0!important;
 border-bottom:0 solid transparent!important;
 overflow:hidden!important;
 opacity:0!important;
 visibility:hidden!important;
 transform:translate3d(0,-5px,0)!important;
 pointer-events:none!important;
 transition:opacity .27s ease,
            transform .36s cubic-bezier(.25,.76,.25,1),
            border-color .27s ease,
            visibility 0s linear .36s!important;
}
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header > #summary-details-toggle{
 height:100%!important;
 min-height:0!important;
 max-height:none!important;
 flex:none!important;
 margin:0!important;
 padding:0 0 1px!important;
 border-bottom:1px solid var(--line)!important;
 opacity:1!important;
 visibility:visible!important;
 transform:translate3d(0,0,0)!important;
 pointer-events:auto!important;
 transition:opacity .27s ease,
            transform .36s cubic-bezier(.25,.76,.25,1),
            border-color .27s ease,
            visibility 0s!important;
}
#application #dock-wrap #floating-totals > :is(#budget-line,#subtotal-line,#discount-line,.final-line) > :is(span,strong){
 line-height:1.12!important;
}
#application #dock-wrap #floating-totals > #budget-line > span:first-child{
 font-size:12px!important;
}
#application #dock-wrap #floating-totals > .final-line > .total-caption{
 line-height:1.12!important;
}
#application #dock-wrap #floating-totals > .final-line > #grand-total{
 line-height:1.14!important;
}
@media(prefers-reduced-motion:reduce){
 #application #dock-wrap #floating-totals,
 #application.shopping-list-page #dock-wrap #floating-totals,
 #application #dock-wrap #floating-totals > :is(#budget-line,#subtotal-line,#discount-line,.final-line,#summary-details-toggle),
 #application:not(.shopping-list-page) #dock-wrap #floating-totals.show-details-header > #summary-details-toggle{
  transition:none!important;
 }
}


/* v9 precision overrides: supersede old state-specific 23px rows and 4px
   margins that would otherwise overrun the interpolated 20px grid tracks. */
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-discount > #subtotal-line,
#application:not(.shopping-list-page) #dock-wrap #floating-totals.show-discount > #discount-line,
#application #dock-wrap #floating-totals.has-budget > #budget-line,
#application #dock-wrap #floating-totals > .summary-row.final-line{
 height:100%!important;
 min-height:0!important;
 max-height:none!important;
 margin:0!important;
 padding:0!important;
 flex:none!important;
 overflow:hidden!important;
}

/* The total is persistent even when all optional tracks are zero. */
#application #dock-wrap #floating-totals > .summary-row.final-line{
 opacity:1!important;visibility:visible!important;
 transform:translate3d(0,0,0)!important;
}
