:root{
  --green:#143c2f;
  --green-2:#1b4a3a;
  --green-3:#0f3026;
  --cream:#f7f0e1;
  --paper:#fffaf0;
  --gold:#c9a15c;
  --gold-soft:#d9bc84;
  --red:#a83a2b;
  --ink:#20382e;
  --muted:#7a705d;
  --line:rgba(20,60,47,.14);
  --serif:"Songti SC","STSong","Source Han Serif CN","Noto Serif SC",serif;
  --sans:-apple-system,BlinkMacSystemFont,"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent;}
html{background:#e8e0d0;}
body{
  min-height:100vh;
  margin:0;
  display:flex;
  justify-content:center;
  background:#e8e0d0;
  color:var(--ink);
  font-family:var(--sans);
  -webkit-font-smoothing:antialiased;
}
button,input,textarea{font:inherit;color:inherit;}
button{border:0;background:none;cursor:pointer;}
button:active{transform:scale(.98);}
.hidden{display:none !important;}

.app{
  position:relative;
  width:100%;
  max-width:430px;
  min-height:100vh;
  background:var(--cream);
  background-image:
    radial-gradient(rgba(20,60,47,.035) .55px, transparent .8px);
  background-size:6px 6px;
  box-shadow:0 0 50px rgba(35,50,40,.14);
  overflow-x:clip;
}
@media(max-width:430px){
  .app{box-shadow:none;}
}

/* ============ HEADER ============ */
.topbar{
  position:sticky;
  top:0;
  z-index:30;
  min-height:119px;
  padding:18px 18px 14px;
  color:var(--cream);
  background:
    radial-gradient(circle at 86% 0%,rgba(217,188,132,.2),transparent 38%),
    linear-gradient(120deg,var(--green-2),var(--green) 55%,var(--green-3));
  overflow:hidden;
}
.topbar::before{
  content:"";
  position:absolute;
  inset:0;
  background-image:repeating-linear-gradient(90deg,transparent 0 42px,rgba(247,240,225,.035) 42px 43px);
}
.topbar::after{
  content:"";
  position:absolute;
  left:0;right:0;bottom:0;
  height:2px;
  background:linear-gradient(90deg,transparent,var(--gold),var(--gold-soft),transparent);
}
.brand{position:relative;z-index:1;}
.brand-kicker{
  font-size:9px;
  letter-spacing:.22em;
  color:var(--gold-soft);
}
.brand-title{
  margin-top:3px;
  font-family:var(--serif);
  font-size:35px;
  line-height:1.08;
  font-weight:900;
  letter-spacing:.055em;
  color:#fbf4e5;
}
.brand-sub{
  margin-top:5px;
  font-size:10px;
  letter-spacing:.14em;
  color:rgba(247,240,225,.66);
}
.seal{
  position:absolute;
  z-index:1;
  right:19px;
  top:23px;
  width:43px;
  height:43px;
  display:flex;
  align-items:center;
  justify-content:center;
  border:1px solid rgba(251,244,229,.8);
  outline:1px solid rgba(251,244,229,.35);
  outline-offset:3px;
  background:var(--red);
  color:#fbf4e5;
  font-family:var(--serif);
  font-size:15px;
  line-height:1.12;
  font-weight:800;
  transform:rotate(5deg);
  box-shadow:0 4px 12px rgba(0,0,0,.18);
}
.seal::after{
  content:"";
  position:absolute;
  inset:3px;
  border:1px solid rgba(251,244,229,.4);
}

.service-strip{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:12px;
  min-height:36px;
  padding:8px 14px;
  background:#efe6d3;
  border-bottom:1px solid rgba(20,60,47,.08);
  font-size:10px;
  letter-spacing:.02em;
  color:#766a55;
}
.service-strip b{
  font-weight:700;
  color:var(--green);
  font-size:11px;
}
.strip-dot{
  width:3px;height:3px;
  border-radius:50%;
  background:#b9a684;
}

/* ============ MENU ============ */
#main{padding:0 16px 100px;}
.menu-lead{
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:10px;
  padding:18px 2px 12px;
}
.eyebrow{
  font-family:"Helvetica Neue",Arial,sans-serif;
  font-size:8px;
  line-height:1;
  letter-spacing:.24em;
  color:#a18e6b;
}
.menu-lead h2{
  margin-top:5px;
  font-family:var(--serif);
  font-size:23px;
  line-height:1;
  font-weight:900;
  letter-spacing:.07em;
  color:var(--green);
}
.menu-lead-right{
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  gap:4px;
  padding-bottom:1px;
  font-size:9px;
  line-height:1.3;
  color:#9b8c73;
  text-align:right;
}
.menu-lead-right span:first-child{color:#7e7059;font-weight:600;}

.menu-section{margin-top:18px;}
.section-head{
  display:flex;
  align-items:baseline;
  gap:8px;
  padding:0 2px;
  margin-bottom:10px;
}
.section-num{
  font-family:var(--serif);
  font-size:13px;
  font-weight:800;
  color:#b9a98d;
  letter-spacing:-.03em;
}
.section-title{
  font-family:var(--serif);
  font-size:19px;
  line-height:1.1;
  font-weight:900;
  letter-spacing:.07em;
  color:var(--green);
  white-space:nowrap;
}
.section-rule{
  flex:1;
  height:1px;
  background:linear-gradient(90deg,rgba(20,60,47,.22),rgba(20,60,47,.03));
}
.section-note{
  font-size:9px;
  color:#a09278;
  white-space:nowrap;
}

.menu-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:10px;
}
.item-card{
  position:relative;
  padding:7px 8px 10px;
  border:1px solid rgba(20,60,47,.10);
  border-radius:16px;
  background:var(--paper);
  box-shadow:0 5px 12px rgba(20,45,35,.07);
  text-align:left;
  overflow:hidden;
  transition:transform .15s ease,box-shadow .15s ease;
}
.item-card:active{transform:scale(.985);}
.item-media{
  height:122px;
  display:flex;
  align-items:center;
  justify-content:center;
  background:var(--paper);
}
.item-media img{
  display:block;
  width:100%;
  height:100%;
  object-fit:contain;
  filter:drop-shadow(0 7px 5px rgba(20,45,35,.15));
}
.item-name{
  padding-right:24px;
  margin-top:3px;
  font-family:var(--serif);
  font-size:16px;
  line-height:1.25;
  font-weight:800;
  letter-spacing:.01em;
  color:var(--green);
}
.item-name .badge{
  display:inline-block;
  vertical-align:2px;
  margin-left:3px;
  padding:1px 3px;
  border:1px solid rgba(168,58,43,.5);
  border-radius:2px;
  color:var(--red);
  font-family:var(--sans);
  font-size:7px;
  line-height:1.3;
  font-weight:500;
  letter-spacing:.03em;
}
.item-price{
  margin-top:2px;
  font-size:9px;
  color:#9a8b73;
}
.item-price b{
  margin-left:1px;
  font-family:var(--serif);
  font-size:20px;
  line-height:1;
  font-weight:800;
  color:var(--green);
  letter-spacing:-.01em;
}
.item-price em{
  margin-left:2px;
  font-style:normal;
  font-size:9px;
}
.add-btn{
  position:absolute;
  right:8px;
  bottom:9px;
  width:27px;
  height:27px;
  display:flex;
  align-items:center;
  justify-content:center;
  border-radius:50%;
  background:var(--green);
  color:var(--paper);
  font-family:var(--sans);
  font-size:18px;
  line-height:1;
  font-weight:400;
  box-shadow:0 3px 7px rgba(20,45,35,.24);
}
.add-btn:active{background:var(--gold);color:var(--green);}
.count-bubble{
  position:absolute;
  top:7px;
  right:7px;
  min-width:17px;
  height:17px;
  padding:0 4px;
  display:flex;
  align-items:center;
  justify-content:center;
  border-radius:9px;
  background:var(--red);
  color:#fff7e9;
  font-size:9px;
  font-weight:700;
  line-height:1;
  box-shadow:0 2px 5px rgba(80,20,15,.2);
}

.compact-card{
  border:1px solid rgba(20,60,47,.10);
  border-radius:16px;
  background:var(--paper);
  overflow:hidden;
  box-shadow:0 5px 12px rgba(20,45,35,.06);
}
.compact-row{
  width:100%;
  display:flex;
  align-items:center;
  gap:10px;
  padding:13px 13px;
  background:transparent;
  border-bottom:1px dashed rgba(20,60,47,.13);
  text-align:left;
}
.compact-row:last-child{border-bottom:0;}
.compact-name{
  flex:1;
  font-family:var(--serif);
  font-size:16px;
  font-weight:800;
  letter-spacing:.02em;
  color:var(--green);
}
.compact-price{
  font-size:9px;
  color:#9a8b73;
}
.compact-price b{
  margin-left:1px;
  font-family:var(--serif);
  font-size:20px;
  color:var(--green);
}
.compact-add{
  width:25px;height:25px;
  display:flex;align-items:center;justify-content:center;
  border-radius:50%;
  background:var(--green);
  color:var(--paper);
  font-size:17px;
  line-height:1;
}
.compact-row:active .compact-add{background:var(--gold);color:var(--green);}

.foot-note{
  display:flex;
  align-items:flex-start;
  gap:6px;
  margin:19px 2px 0;
  font-size:9px;
  line-height:1.6;
  color:#9a8b73;
}
.foot-dot{
  flex:0 0 auto;
  width:4px;height:4px;
  margin-top:5px;
  border-radius:50%;
  background:var(--gold);
}

/* ============ CART BAR ============ */
.cart-bar{
  position:fixed;
  z-index:40;
  left:50%;
  bottom:0;
  transform:translateX(-50%);
  width:min(430px,100%);
  display:flex;
  align-items:center;
  gap:10px;
  padding:10px 14px calc(10px + env(safe-area-inset-bottom));
  background:var(--green);
  color:var(--cream);
  box-shadow:0 -8px 22px rgba(10,35,25,.22);
  animation:barUp .22s ease-out;
}
@keyframes barUp{from{transform:translate(-50%,110%);}to{transform:translate(-50%,0);}}
.cart-bag{
  position:relative;
  flex:0 0 auto;
  width:35px;height:35px;
  display:flex;align-items:center;justify-content:center;
  border:1px solid rgba(247,240,225,.22);
  border-radius:11px;
}
.cart-bag svg{width:19px;height:19px;color:var(--gold-soft);}
.cart-count{
  position:absolute;
  right:-5px;top:-5px;
  min-width:16px;height:16px;
  padding:0 4px;
  display:flex;align-items:center;justify-content:center;
  border-radius:8px;
  background:var(--red);
  color:#fff8ea;
  font-size:9px;
  font-weight:700;
}
.cart-summary{flex:1;min-width:0;}
.cart-total-row{display:flex;align-items:baseline;gap:5px;}
.cart-total-row span{font-size:9px;color:rgba(247,240,225,.62);}
.cart-total-row b{
  font-family:var(--serif);
  font-size:22px;
  line-height:1;
  font-weight:800;
  color:#fbf4e5;
}
.cart-min{
  margin-top:2px;
  font-size:8px;
  line-height:1.2;
  color:rgba(247,240,225,.55);
}
.cart-min.ready{color:var(--gold-soft);}
.checkout-btn{
  flex:0 0 auto;
  min-width:86px;
  padding:10px 14px;
  border-radius:10px;
  background:var(--gold-soft);
  color:var(--green);
  font-size:12px;
  font-weight:700;
  letter-spacing:.03em;
}
.checkout-btn:disabled{opacity:.5;}

/* ============ CHECKOUT ============ */
.checkout-view{padding-top:15px;}
.checkout-top{
  display:flex;
  align-items:center;
  gap:11px;
  padding:0 1px 14px;
}
.round-btn{
  width:33px;height:33px;
  display:flex;align-items:center;justify-content:center;
  border:1px solid rgba(20,60,47,.15);
  border-radius:50%;
  background:rgba(255,250,240,.75);
  color:var(--green);
}
.round-btn svg{width:17px;height:17px;}
.checkout-top h2{
  margin-top:4px;
  font-family:var(--serif);
  font-size:23px;
  line-height:1;
  font-weight:900;
  letter-spacing:.06em;
  color:var(--green);
}
.step-mark{
  margin-left:auto;
  font-family:"Helvetica Neue",Arial,sans-serif;
  font-size:9px;
  letter-spacing:.13em;
  color:#a29072;
}
.summary-card{
  padding:13px 14px;
  border:1px solid rgba(20,60,47,.10);
  border-radius:15px;
  background:var(--paper);
  box-shadow:0 5px 12px rgba(20,45,35,.05);
}
.summary-head{
  display:flex;align-items:baseline;justify-content:space-between;
  margin-bottom:7px;
  font-size:9px;color:#9b8b71;
}
.summary-head b{font-size:10px;color:var(--green);}
.summary-item{
  display:flex;
  justify-content:space-between;
  gap:12px;
  padding:7px 0;
  border-bottom:1px dashed rgba(20,60,47,.11);
}
.summary-item:last-of-type{border-bottom:0;}
.summary-item-main{min-width:0;}
.summary-name{
  font-family:var(--serif);
  font-size:14px;
  line-height:1.3;
  font-weight:800;
  color:var(--green);
}
.summary-opts{
  margin-top:2px;
  font-size:9px;
  line-height:1.4;
  color:#8d7f68;
}
.summary-price{
  flex:0 0 auto;
  font-family:var(--serif);
  font-size:15px;
  font-weight:800;
  color:var(--green);
}
.summary-price .cur{font-size:9px;}
.summary-total{
  display:flex;align-items:baseline;justify-content:space-between;
  margin-top:8px;padding-top:9px;
  border-top:1px solid rgba(20,60,47,.1);
}
.summary-total span{font-size:10px;color:#8d7f68;}
.summary-total b{
  font-family:var(--serif);
  font-size:24px;
  color:var(--green);
}
.form-section{margin-top:15px;}
.form-label{
  margin-bottom:6px;
  font-size:11px;
  font-weight:600;
  color:#576655;
  letter-spacing:.03em;
}
.label-optional{
  margin-left:3px;
  font-size:9px;
  color:#a5967e;
  font-weight:400;
}
.text-input{
  width:100%;
  height:42px;
  padding:0 12px;
  border:1px solid rgba(20,60,47,.15);
  border-radius:10px;
  outline:none;
  background:rgba(255,250,240,.78);
  color:var(--green);
  font-size:13px;
  transition:border .15s ease,box-shadow .15s ease;
}
.text-input::placeholder{color:#b3a68f;}
.text-input:focus{
  border-color:rgba(20,60,47,.48);
  box-shadow:0 0 0 3px rgba(20,60,47,.07);
}
.text-input.error{border-color:var(--red);box-shadow:0 0 0 3px rgba(168,58,43,.07);}
.textarea{
  height:67px;
  padding:10px 12px;
  resize:none;
  line-height:1.5;
}
.form-row{
  display:grid;
  grid-template-columns:1fr .8fr;
  gap:11px;
}
.form-row .form-section{min-width:0;}
.field-error{
  min-height:0;
  margin-top:3px;
  font-size:9px;
  color:var(--red);
}
.field-error:empty{display:none;}
.slot-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:7px;
}
.slot-chip{
  height:35px;
  border:1px solid rgba(20,60,47,.14);
  border-radius:9px;
  background:rgba(255,250,240,.7);
  color:#5e6b58;
  font-size:10px;
  letter-spacing:.01em;
}
.slot-chip.selected{
  border-color:var(--green);
  background:var(--green);
  color:#fbf4e5;
}
.pay-note{
  display:flex;
  gap:9px;
  align-items:flex-start;
  margin-top:16px;
  padding:11px 12px;
  border:1px dashed rgba(168,128,63,.45);
  border-radius:11px;
  background:rgba(255,250,240,.66);
}
.pay-note-icon{
  flex:0 0 auto;
  width:22px;height:22px;
  display:flex;align-items:center;justify-content:center;
  border-radius:50%;
  background:rgba(201,161,92,.2);
  color:#8e6a30;
  font-family:var(--serif);
  font-size:12px;
  font-weight:800;
}
.pay-note b{
  display:block;
  font-size:10px;
  color:#5c6654;
  margin-bottom:2px;
}
.pay-note span{
  display:block;
  font-size:9px;
  line-height:1.55;
  color:#8d7f68;
}

/* checkout bottom bar */
.checkout-bar{
  position:fixed;
  z-index:40;
  left:50%;
  bottom:0;
  transform:translateX(-50%);
  width:min(430px,100%);
  display:flex;
  align-items:center;
  gap:12px;
  padding:10px 14px calc(10px + env(safe-area-inset-bottom));
  background:var(--paper);
  border-top:1px solid rgba(20,60,47,.1);
  box-shadow:0 -8px 22px rgba(20,45,35,.08);
}
.checkout-bar-total{flex:1;}
.checkout-bar-total > span{
  display:block;
  font-size:9px;
  color:#9a8b73;
}
.checkout-bar-total b{
  display:block;
  margin-top:1px;
  font-family:var(--serif);
  font-size:24px;
  line-height:1;
  color:var(--green);
}
.submit-btn{
  flex:0 0 auto;
  padding:12px 16px;
  border-radius:11px;
  background:var(--green);
  color:var(--paper);
  font-size:12px;
  font-weight:700;
  letter-spacing:.02em;
  box-shadow:0 5px 12px rgba(20,45,35,.18);
}

/* ============ SUCCESS ============ */
.success-view{
  padding:28px 2px 40px;
  text-align:center;
}
.success-icon{
  width:53px;height:53px;
  margin:0 auto 12px;
  display:flex;align-items:center;justify-content:center;
  border-radius:50%;
  background:var(--green);
  color:var(--gold-soft);
  box-shadow:0 8px 18px rgba(20,45,35,.18);
}
.success-icon svg{width:27px;height:27px;}
.success-title{
  margin-top:5px;
  font-family:var(--serif);
  font-size:27px;
  line-height:1.15;
  font-weight:900;
  letter-spacing:.06em;
  color:var(--green);
}
.success-sub{
  margin:7px auto 16px;
  max-width:280px;
  font-size:10px;
  line-height:1.6;
  color:#8d7f68;
}
.order-card{
  padding:13px;
  border:1px solid rgba(20,60,47,.13);
  border-radius:15px;
  background:var(--paper);
  box-shadow:0 5px 13px rgba(20,45,35,.06);
  text-align:left;
}
.order-card-head{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:10px;
  padding-bottom:8px;
  border-bottom:1px dashed rgba(20,60,47,.13);
}
.order-card-head span:first-child{
  font-family:"Helvetica Neue",Arial,sans-serif;
  font-size:10px;
  letter-spacing:.12em;
  color:#9b8b71;
}
.order-card-head span:last-child{
  font-family:var(--serif);
  font-size:16px;
  font-weight:800;
  color:var(--green);
}
.order-card-head span.cur{
  font-family:var(--sans);
  font-size:10px;
  font-weight:500;
  color:#5d7065;
}
.order-text{
  max-height:150px;
  overflow-y:auto;
  cursor:text;
  padding:9px 0;
  font-family:var(--sans);
  font-size:11px;
  line-height:1.7;
  color:#4e5e51;
  word-break:break-all;
  white-space:pre-wrap;
}
.copy-btn{
  width:100%;
  height:39px;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  border-radius:9px;
  background:var(--green);
  color:var(--paper);
  font-size:11px;
  font-weight:600;
  letter-spacing:.02em;
}
.copy-btn svg{width:15px;height:15px;}
.copy-btn.copied{background:var(--gold);color:var(--green);}
.steps{
  display:flex;
  justify-content:space-between;
  gap:8px;
  margin:19px 4px 0;
}
.step-item{
  flex:1;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:5px;
}
.step-item span{
  width:19px;height:19px;
  display:flex;align-items:center;justify-content:center;
  border-radius:50%;
  background:#e9dfcc;
  color:#7f6c4f;
  font-family:var(--serif);
  font-size:11px;
  font-weight:800;
}
.step-item p{
  font-size:9px;
  line-height:1.4;
  color:#887a63;
}
.success-tip{
  margin-top:16px;
  font-size:9px;
  color:#9b8b71;
}
.ghost-btn{
  margin-top:10px;
  padding:9px 17px;
  border:1px solid rgba(20,60,47,.2);
  border-radius:9px;
  color:var(--green);
  font-size:10px;
  font-weight:600;
}

/* ============ SHEETS ============ */
.sheet-backdrop{
  position:fixed;
  z-index:60;
  inset:0;
  background:rgba(9,29,22,.48);
  backdrop-filter:blur(2px);
  animation:fadeIn .2s ease;
}
@keyframes fadeIn{from{opacity:0;}to{opacity:1;}}
.sheet{
  position:fixed;
  z-index:70;
  left:50%;
  bottom:0;
  transform:translateX(-50%);
  width:min(430px,100%);
  max-height:92vh;
  display:flex;
  flex-direction:column;
  border-radius:23px 23px 0 0;
  background:var(--paper);
  box-shadow:0 -12px 40px rgba(7,25,18,.25);
  animation:slideUp .24s cubic-bezier(.2,.8,.2,1);
}
@keyframes slideUp{from{transform:translate(-50%,100%);}to{transform:translate(-50%,0);}}
.sheet-head{
  position:relative;
  flex:0 0 auto;
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:13px 17px 9px;
}
.sheet-head h3{
  font-family:var(--serif);
  font-size:19px;
  font-weight:900;
  letter-spacing:.06em;
  color:var(--green);
}
.sheet-close{
  width:28px;height:28px;
  display:flex;align-items:center;justify-content:center;
  border-radius:50%;
  background:#eee5d5;
  color:#5f6a5b;
  font-size:18px;
  line-height:1;
}
.sheet-body{
  overflow-y:auto;
  overscroll-behavior:contain;
  padding:0 17px 18px;
}
.item-hero{
  height:138px;
  margin:-2px -17px 0;
  display:flex;
  align-items:center;
  justify-content:center;
  background:var(--paper);
}
.item-hero img{
  width:100%;
  height:100%;
  object-fit:contain;
  filter:drop-shadow(0 10px 7px rgba(20,45,35,.16));
}
.item-title-row{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:10px;
  padding-top:2px;
}
.item-sheet-name{
  font-family:var(--serif);
  font-size:24px;
  line-height:1.25;
  font-weight:900;
  letter-spacing:.03em;
  color:var(--green);
}
.item-sheet-price{
  flex:0 0 auto;
  font-family:var(--serif);
  font-size:22px;
  line-height:1.3;
  font-weight:800;
  color:var(--green);
}
.item-sheet-price i{font-style:normal;font-size:12px;font-weight:500;}
.item-sheet-sub{
  margin-top:4px;
  font-size:9px;
  color:#a09278;
}
.option-group{margin-top:15px;}
.option-label{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  margin-bottom:7px;
  font-size:11px;
  font-weight:600;
  color:#586656;
}
.option-label small{
  font-size:8px;
  color:#a2937a;
  font-weight:400;
}
.chips{display:flex;flex-wrap:wrap;gap:7px;}
.chip{
  padding:7px 11px;
  border:1px solid rgba(20,60,47,.14);
  border-radius:8px;
  background:rgba(255,250,240,.8);
  color:#68715f;
  font-size:11px;
  line-height:1.2;
}
.chip.selected{
  border-color:var(--green);
  background:var(--green);
  color:var(--paper);
}
.chip .chip-price{margin-left:4px;font-size:9px;opacity:.7;}
.qty-row{
  display:flex;
  align-items:center;
  justify-content:space-between;
  margin-top:16px;
  padding-top:13px;
  border-top:1px dashed rgba(20,60,47,.13);
}
.qty-label{font-size:11px;font-weight:600;color:#586656;}
.stepper{
  display:flex;
  align-items:center;
  gap:11px;
}
.stepper button{
  width:26px;height:26px;
  display:flex;align-items:center;justify-content:center;
  border-radius:50%;
  background:#eee5d5;
  color:var(--green);
  font-size:17px;
  line-height:1;
}
.stepper span{
  min-width:18px;
  text-align:center;
  font-size:13px;
  font-weight:700;
  color:var(--green);
}
.sheet-footer{
  flex:0 0 auto;
  padding:10px 17px calc(10px + env(safe-area-inset-bottom));
  border-top:1px solid rgba(20,60,47,.1);
  background:var(--paper);
}
.sheet-confirm{
  width:100%;
  height:43px;
  border-radius:11px;
  background:var(--green);
  color:var(--paper);
  font-size:13px;
  font-weight:700;
  letter-spacing:.03em;
  box-shadow:0 5px 12px rgba(20,45,35,.15);
}
.sheet-confirm:disabled{opacity:.5;}

/* cart sheet */
.cart-sheet{max-height:86vh;}
.cart-list{padding:0 17px;}
.cart-item{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:10px;
  padding:12px 0;
  border-bottom:1px dashed rgba(20,60,47,.13);
}
.cart-item-main{flex:1;min-width:0;}
.cart-item-name{
  font-family:var(--serif);
  font-size:15px;
  line-height:1.3;
  font-weight:800;
  color:var(--green);
}
.cart-item-name span{
  font-family:var(--sans);
  margin-left:4px;
  font-size:9px;
  font-weight:400;
  color:#94866f;
}
.cart-item-opts{
  margin-top:3px;
  font-size:9px;
  line-height:1.5;
  color:#8d7f68;
}
.cart-item-edit{
  margin-top:3px;
  padding:0;
  color:#a38962;
  font-size:9px;
  text-decoration:underline;
  text-underline-offset:2px;
}
.cart-item-side{
  flex:0 0 auto;
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  gap:7px;
}
.cart-item-price{
  font-family:var(--serif);
  font-size:15px;
  font-weight:800;
  color:var(--green);
}
.cart-item-price .cur,
.summary-price .cur{
  font-family:var(--sans);
  font-size:10px;
  font-weight:500;
  color:#5d7065;
  margin-right:1px;
}
.cart-item-side .stepper{gap:8px;}
.cart-item-side .stepper button{width:23px;height:23px;font-size:15px;}
.cart-empty{
  padding:32px 10px 34px;
  text-align:center;
  color:#95866e;
  font-size:11px;
  line-height:1.6;
}
.cart-empty b{
  display:block;
  margin-bottom:5px;
  font-family:var(--serif);
  font-size:19px;
  color:var(--green);
}
.cart-summary-box{
  margin:12px 17px 0;
  padding:12px 0 0;
  border-top:1px solid rgba(20,60,47,.12);
}
.cart-summary-line{
  display:flex;align-items:baseline;justify-content:space-between;
  font-size:10px;color:#8d7f68;
}
.cart-summary-line b{
  font-family:var(--serif);
  font-size:23px;
  color:var(--green);
}
.cart-summary-hint{
  margin-top:4px;
  font-size:9px;
  color:#a09278;
}
.cart-summary-hint.warn{color:var(--red);}
.cart-sheet-footer{
  display:flex;
  gap:9px;
  padding:10px 17px calc(10px + env(safe-area-inset-bottom));
  border-top:1px solid rgba(20,60,47,.1);
  background:var(--paper);
}
.cart-clear{
  flex:0 0 66px;
  height:43px;
  border:1px solid rgba(20,60,47,.16);
  border-radius:11px;
  color:#7b6c55;
  font-size:10px;
}
.cart-checkout{
  flex:1;
  height:43px;
  border-radius:11px;
  background:var(--green);
  color:var(--paper);
  font-size:12px;
  font-weight:700;
}
.cart-checkout:disabled{opacity:.5;}

/* ============ TOAST ============ */
.toast{
  position:fixed;
  z-index:120;
  left:50%;
  bottom:91px;
  transform:translate(-50%,12px);
  max-width:calc(100% - 36px);
  padding:9px 14px;
  border-radius:20px;
  background:rgba(15,45,35,.94);
  color:#fbf4e5;
  font-size:10px;
  line-height:1.4;
  text-align:center;
  opacity:0;
  pointer-events:none;
  transition:opacity .2s ease,transform .2s ease;
  box-shadow:0 5px 16px rgba(0,0,0,.18);
}
.toast.show{opacity:1;transform:translate(-50%,0);}

@media(max-width:360px){
  .brand-title{font-size:31px;}
  .item-media{height:112px;}
  .item-name{font-size:15px;}
  .menu-grid{gap:8px;}
  #main{padding-left:13px;padding-right:13px;}
  .form-row{grid-template-columns:1fr 1fr;}
  .slot-chip{font-size:9px;}
  .checkout-bar .submit-btn{padding-left:12px;padding-right:12px;font-size:11px;}
}

/* state helpers */
.no-scroll{overflow:hidden;}
.add-btn.has{background:var(--gold);color:var(--green);}
.sheet-body{flex:1 1 auto;min-height:0;}
.cart-list{padding:0;}
.cart-summary-box{margin:12px 0 0;}
.cart-item-links{display:flex;gap:10px;margin-top:4px;}
.cart-item-links button{
  padding:0;
  color:#a38962;
  font-size:9px;
  line-height:1.4;
  text-decoration:underline;
  text-underline-offset:2px;
}
.cart-clear:disabled,.cart-checkout:disabled{opacity:.45;}

/* ============ CAMPUS V2 ============ */
.topbar{position:relative;}
.category-nav{
  position:sticky;
  top:0;
  z-index:28;
  display:flex;
  gap:6px;
  margin:0 -16px 4px;
  padding:8px 16px;
  background:rgba(247,240,225,.95);
  backdrop-filter:blur(12px);
  border-bottom:1px solid rgba(20,60,47,.09);
}
.cat-tab{
  flex:1;
  height:34px;
  border-radius:8px;
  color:#81745e;
  font-size:12px;
  font-weight:600;
  letter-spacing:.02em;
  transition:background .15s ease,color .15s ease;
}
.cat-tab.active{
  background:var(--green);
  color:var(--paper);
  box-shadow:0 4px 10px rgba(20,45,35,.14);
}
.section-num{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width:27px;
  height:22px;
  padding:0 5px;
  border-radius:6px;
  background:#e9e2d2;
  color:#70806b;
  font-family:var(--sans);
  font-size:10px;
  font-weight:700;
  letter-spacing:0;
}
.section-combo{
  margin:22px -16px 0;
  padding:15px 16px 17px;
  background:linear-gradient(180deg,#edf3e7,#f5f8f0);
  border-radius:20px;
}
.section-extra{
  margin:22px -16px 0;
  padding:15px 16px 17px;
  background:linear-gradient(180deg,#fbf2e1,#fdf8ee);
  border-radius:20px;
}
.section-combo .section-num{background:#eadfc8;color:#8a6b34;}
.section-extra .section-num{background:#f3ded4;color:#a8432c;}
.section-combo .item-card{border-color:rgba(130,100,50,.14);}
.section-extra .compact-card{border-color:rgba(130,100,50,.14);background:#fffdf8;}
.section-extra .compact-row{padding-top:17px;padding-bottom:17px;}

.name-phone{grid-template-columns:1.35fr .65fr;}
.label-hint{
  margin-left:3px;
  font-size:8px;
  font-weight:400;
  color:#a5967e;
  letter-spacing:0;
}
.field-help{
  margin-top:4px;
  font-size:8px;
  line-height:1.4;
  color:#a3947c;
}
.delivery-options{display:flex;flex-direction:column;gap:7px;}
.delivery-option{
  width:100%;
  display:flex;
  align-items:center;
  gap:10px;
  padding:11px 12px;
  border:1px solid rgba(20,60,47,.14);
  border-radius:10px;
  background:rgba(255,250,240,.7);
  text-align:left;
}
.delivery-option.selected{
  border-color:var(--green);
  background:#f1f5eb;
}
.delivery-dot{
  position:relative;
  flex:0 0 auto;
  width:15px;
  height:15px;
  border:1px solid #b7a98d;
  border-radius:50%;
}
.delivery-option.selected .delivery-dot{border-color:var(--green);}
.delivery-option.selected .delivery-dot::after{
  content:"";
  position:absolute;
  inset:3px;
  border-radius:50%;
  background:var(--green);
}
.delivery-copy{display:flex;flex-direction:column;gap:2px;min-width:0;}
.delivery-copy b{font-size:12px;font-weight:600;color:#4e5e51;}
.delivery-copy em{font-style:normal;font-size:9px;line-height:1.35;color:#9a8b73;}
.delivery-option.selected .delivery-copy em{color:#6f7d65;}
.delivery-tip{
  margin-top:8px;
  padding:9px 11px;
  border-radius:8px;
  background:#f3f7ed;
  color:#687b62;
  font-size:10px;
  line-height:1.5;
}
#deliveryExtra .form-section{margin-top:9px;}
.chip.excluded{
  border-color:#d98568;
  background:#fbe7df;
  color:#a8432c;
}
.chip.excluded em{
  margin-left:4px;
  font-style:normal;
  font-size:8px;
  opacity:.82;
}

.cart-total-row .cur,
.checkout-bar-total .cur{
  font-family:var(--sans);
  font-size:11px;
  font-weight:500;
  color:#c9bea6;
  margin-right:1px;
}
.checkout-bar-total .cur{font-size:12px;color:#7d7059;}

/* ============ CAMPUS V3: DUCK, LOGIN, FEES ============ */
.cat-tab{font-size:11px;}
.profile-line{
  padding:0;
  color:#9a6c39;
  font-size:9px;
  line-height:1.4;
  text-decoration:underline;
  text-underline-offset:3px;
}
.section-duck{
  margin:22px -16px 0;
  padding:15px 16px 17px;
  background:linear-gradient(180deg,#f7e7d7,#fbf3ea);
  border-radius:20px;
}
.section-veg{
  margin:22px -16px 0;
  padding:15px 16px 17px;
  background:linear-gradient(180deg,#eef3df,#f8faef);
  border-radius:20px;
}
.section-duck .section-num{background:#f3d9cc;color:#a8432c;}
.section-veg .section-num{background:#e2ead4;color:#5d764a;}
.section-duck .section-rule{background:linear-gradient(90deg,rgba(168,67,44,.25),rgba(168,67,44,.03));}
.section-veg .section-rule{background:linear-gradient(90deg,rgba(93,118,74,.25),rgba(93,118,74,.03));}

.price-groups{display:flex;flex-direction:column;gap:15px;}
.price-group-head{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:8px;
  margin:0 2px 7px;
}
.price-group-title{
  font-family:var(--serif);
  font-size:16px;
  line-height:1.2;
  font-weight:900;
  letter-spacing:.04em;
  color:var(--green);
}
.price-group-sub{
  font-size:9px;
  color:#9d8c72;
  white-space:nowrap;
}
.price-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:7px;
}
.price-chip{
  position:relative;
  min-width:0;
  min-height:40px;
  display:flex;
  align-items:center;
  gap:5px;
  padding:8px 9px;
  border:1px solid rgba(20,60,47,.12);
  border-radius:10px;
  background:rgba(255,253,248,.86);
  text-align:left;
}
.price-chip-name{
  flex:1;
  min-width:0;
  font-size:12px;
  font-weight:600;
  line-height:1.2;
  color:#4e5e51;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.price-chip-price{
  flex:0 0 auto;
  font-family:var(--serif);
  font-size:17px;
  line-height:1;
  font-weight:800;
  color:var(--green);
}
.price-chip-price i{
  font-style:normal;
  font-family:var(--sans);
  font-size:9px;
  font-weight:500;
  color:#78836f;
  margin-right:1px;
}
.price-chip-plus{
  flex:0 0 auto;
  width:21px;height:21px;
  display:flex;align-items:center;justify-content:center;
  border-radius:50%;
  background:var(--green);
  color:var(--paper);
  font-size:15px;
  line-height:1;
}
.price-chip:active .price-chip-plus{background:var(--gold);color:var(--green);}
.price-chip .count-bubble{
  top:3px;right:3px;
  min-width:15px;height:15px;
  font-size:8px;
}
.bundle-tile{
  position:relative;
  width:100%;
  display:flex;
  align-items:center;
  gap:10px;
  padding:12px 13px;
  border:1px solid rgba(168,67,44,.26);
  border-radius:12px;
  background:linear-gradient(120deg,#fff8ef,#fbeadc);
  text-align:left;
}
.bundle-tile-main{flex:1;min-width:0;}
.bundle-tile-title{
  font-family:var(--serif);
  font-size:16px;
  font-weight:900;
  color:#8f3f2d;
}
.bundle-tile-desc{
  margin-top:2px;
  font-size:9px;
  line-height:1.4;
  color:#a27764;
}
.bundle-tile-price{
  flex:0 0 auto;
  display:flex;
  align-items:baseline;
  color:#a8432c;
}
.bundle-tile-price i{font-style:normal;font-family:var(--sans);font-size:10px;margin-right:1px;}
.bundle-tile-price b{font-family:var(--serif);font-size:22px;line-height:1;}
.bundle-tile-arrow{
  flex:0 0 auto;
  width:23px;height:23px;
  display:flex;align-items:center;justify-content:center;
  border-radius:50%;
  background:#a8432c;
  color:#fff8ef;
  font-size:15px;
}
.bundle-options{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
  margin-top:10px;
}
.bundle-option{
  min-height:39px;
  padding:8px 9px;
  border:1px solid rgba(20,60,47,.14);
  border-radius:9px;
  background:rgba(255,250,240,.8);
  color:#5c6958;
  font-size:11px;
  text-align:center;
}
.bundle-option.selected{
  border-color:var(--gold);
  background:#f7ecd9;
  color:#8a6a31;
  font-weight:600;
}
.bundle-counter{
  margin-top:10px;
  padding:8px 10px;
  border-radius:8px;
  background:#f8f2e6;
  color:#8c7c64;
  font-size:9px;
  text-align:center;
}

/* delivery fee in summary */
.summary-fee-row{
  display:flex;
  justify-content:space-between;
  gap:10px;
  margin-top:7px;
  font-size:9px;
  color:#8d7f68;
}
.summary-fee-row b{font-weight:600;color:var(--green);}
.summary-total{margin-top:7px;}

/* ============ LOGIN ============ */
.login-view{
  position:fixed;
  z-index:95;
  top:0;
  bottom:0;
  left:50%;
  transform:translateX(-50%);
  width:min(430px,100%);
  overflow-y:auto;
  padding:0 18px calc(24px + env(safe-area-inset-bottom));
  background:var(--cream);
  background-image:radial-gradient(rgba(20,60,47,.035) .55px, transparent .8px);
  background-size:6px 6px;
}
.login-hero{
  position:relative;
  margin:0 -18px;
  padding:34px 24px 43px;
  color:var(--cream);
  background:
    radial-gradient(circle at 88% 2%,rgba(217,188,132,.2),transparent 36%),
    linear-gradient(120deg,var(--green-2),var(--green) 56%,var(--green-3));
  border-radius:0 0 24px 24px;
  overflow:hidden;
}
.login-hero::after{
  content:"";
  position:absolute;
  left:0;right:0;bottom:0;
  height:2px;
  background:linear-gradient(90deg,transparent,var(--gold),var(--gold-soft),transparent);
}
.login-kicker{font-size:9px;letter-spacing:.22em;color:var(--gold-soft);}
.login-hero h1{
  margin-top:5px;
  font-family:var(--serif);
  font-size:38px;
  line-height:1.08;
  font-weight:900;
  letter-spacing:.06em;
  color:#fbf4e5;
}
.login-hero p{margin-top:5px;font-size:10px;letter-spacing:.12em;color:rgba(247,240,225,.66);}
.login-card{
  position:relative;
  margin:-22px auto 0;
  padding:20px 16px 17px;
  border:1px solid rgba(20,60,47,.12);
  border-radius:17px;
  background:var(--paper);
  box-shadow:0 9px 24px rgba(20,45,35,.1);
}
.login-card h2{
  margin-top:5px;
  font-family:var(--serif);
  font-size:24px;
  line-height:1.2;
  font-weight:900;
  letter-spacing:.05em;
  color:var(--green);
}
.login-sub{margin-top:5px;font-size:10px;line-height:1.55;color:#8d7f68;}
.login-field{margin-top:13px;}
.login-field label{display:block;margin-bottom:6px;font-size:11px;font-weight:600;color:#586656;}
.login-btn{
  width:100%;
  height:43px;
  margin-top:17px;
  border-radius:10px;
  background:var(--green);
  color:var(--paper);
  font-size:13px;
  font-weight:700;
  letter-spacing:.03em;
}
.login-close{
  width:100%;
  margin-top:10px;
  padding:7px;
  color:#9a8b73;
  font-size:9px;
  text-decoration:underline;
  text-underline-offset:3px;
}
.login-note{
  margin-top:10px;
  font-size:8px;
  line-height:1.5;
  color:#aa9a81;
  text-align:center;
}

.cur{display:inline;white-space:nowrap;}
.bundle-tile-title,.bundle-tile-desc{display:block;}
.text-input:focus,.text-input:focus-visible{outline:none !important;}

.bundle-tile-arrow.has-count{
  background:#a8432c;
  color:#fff8ef;
  font-family:var(--sans);
  font-size:11px;
  font-weight:700;
}

/* ============ FOOD LAB BRAND / STALLS ============ */
.brand-title em{
  font-family:var(--sans);
  font-style:normal;
  font-size:18px;
  font-weight:600;
  letter-spacing:.045em;
  color:var(--gold-soft);
  margin-left:4px;
  vertical-align:2px;
}
.login-hero h1 em{
  font-family:var(--sans);
  font-style:normal;
  font-size:20px;
  font-weight:600;
  letter-spacing:.04em;
  color:var(--gold-soft);
  margin-left:4px;
}
.lab-note{
  display:flex;
  align-items:flex-start;
  gap:8px;
  margin:0 2px 2px;
  padding:9px 10px;
  border:1px dashed rgba(201,161,92,.42);
  border-radius:10px;
  background:rgba(255,250,240,.62);
}
.lab-note-tag{
  flex:0 0 auto;
  margin-top:1px;
  padding:3px 5px;
  border:1px solid rgba(163,125,68,.35);
  border-radius:4px;
  color:#9b7440;
  font-size:7px;
  line-height:1;
  letter-spacing:.12em;
}
.lab-note p{
  font-size:9px;
  line-height:1.55;
  color:#8b7a60;
}
.section-fuding{
  margin:18px -16px 0;
  padding:15px 16px 17px;
  border-radius:20px;
  background:linear-gradient(180deg,#fbf5e9,#fffaf0);
}
.section-fuding .section-num{background:#eadfc8;color:#8a6b34;}
.shop-group + .shop-group{
  margin-top:17px;
  padding-top:14px;
  border-top:1px dashed rgba(130,100,50,.18);
}
.shop-group-head{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:8px;
  margin:0 2px 8px;
}
.shop-group-head h3{
  font-family:var(--serif);
  font-size:16px;
  line-height:1.2;
  font-weight:900;
  letter-spacing:.05em;
  color:var(--green);
}
.shop-group-head span{
  font-size:9px;
  color:#9d8c72;
  white-space:nowrap;
}

/* ============ SHOP / SUB MENU ============ */
.cat-tab{
  font-size:13px;
}
.sub-nav{
  position:sticky;
  top:50px;
  z-index:27;
  display:flex;
  gap:6px;
  margin:0 -16px 4px;
  padding:7px 16px 8px;
  overflow-x:auto;
  background:rgba(247,240,225,.94);
  backdrop-filter:blur(12px);
  border-bottom:1px solid rgba(20,60,47,.08);
  scrollbar-width:none;
}
.sub-nav::-webkit-scrollbar{display:none;}
.sub-tab{
  flex:0 0 auto;
  height:27px;
  padding:0 10px;
  border:1px solid rgba(20,60,47,.14);
  border-radius:999px;
  background:rgba(255,250,240,.7);
  color:#8b7b62;
  font-size:10px;
  font-weight:600;
  white-space:nowrap;
}
.sub-tab.active{
  border-color:var(--green);
  background:var(--green);
  color:var(--paper);
  box-shadow:0 3px 8px rgba(20,45,35,.12);
}
.shop-group .compact-card{margin-top:0;}

/* ============ MENU LEAD / FOOD LAB TAG ============ */
.menu-lead-main{
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  min-width:0;
}
.menu-lab-tag{
  display:inline-flex;
  align-items:center;
  height:17px;
  margin-bottom:8px;
  padding:0 6px;
  border:1px solid rgba(163,125,68,.35);
  border-radius:3px;
  background:rgba(255,250,240,.62);
  color:#9b7440;
  font-size:7px;
  line-height:1;
  letter-spacing:.14em;
}

/* 顶部 Food Lab 作为品牌装饰字，不参与菜单标识 */
.brand-title em,
.login-hero h1 em{
  padding-bottom:2px;
  border-bottom:1px solid rgba(217,188,132,.42);
}

/* ============ TIME PICKER ============ */
.time-field{
  position:relative;
  margin-top:2px;
}
.time-select{
  width:100%;
  height:46px;
  padding:0 40px 0 40px;
  border:1px solid rgba(20,60,47,.18);
  border-radius:10px;
  background:rgba(255,250,240,.8);
  color:var(--green);
  font-size:14px;
  font-weight:600;
  font-variant-numeric:tabular-nums;
  appearance:none;
  -webkit-appearance:none;
  cursor:pointer;
}
.time-select:focus{
  outline:none;
  border-color:rgba(20,60,47,.42);
  box-shadow:0 0 0 3px rgba(20,60,47,.06);
}
.time-icon{
  position:absolute;
  z-index:1;
  left:14px;
  top:50%;
  width:16px;
  height:16px;
  transform:translateY(-50%);
  color:#8d7f68;
  pointer-events:none;
}
.time-field::after{
  content:"";
  position:absolute;
  right:16px;
  top:50%;
  width:7px;
  height:7px;
  border-right:1.5px solid #8d7f68;
  border-bottom:1.5px solid #8d7f68;
  transform:translateY(-65%) rotate(45deg);
  pointer-events:none;
}
