:root{--cream: #ece2cc;--cream-2: #f1e9d6;--paper: #f6efdf;--ink: #191510;--charcoal: #2b241b;--muted: #6b6252;--line: #191510;--line-soft: rgba(25, 21, 16, .22);--ok: #4f6b4d;--ok-bg: rgba(79, 107, 77, .14);--warn: #8a6326;--warn-bg: rgba(138, 99, 38, .15);--danger: #8c3d34;--danger-bg: rgba(140, 61, 52, .14);--radius: 4px;--radius-img: 2px;--nav-h: 64px;--shell: 1180px;--sans: "Helvetica Neue", "Segoe UI", system-ui, -apple-system, Arial, sans-serif;--serif: "Hoefler Text", Georgia, "Times New Roman", serif;color-scheme:light}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}body{font-family:var(--sans);background:var(--cream);color:var(--ink);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}.app-shell{max-width:var(--shell);margin:0 auto;min-height:100vh;display:flex;flex-direction:column;background:var(--cream);position:relative}.site-header{position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:center;padding:18px 20px;padding-top:max(18px,env(safe-area-inset-top));background:var(--cream);border-bottom:1.5px solid var(--ink)}.site-logo{height:70px;width:auto;display:block;object-fit:contain}.site-logo--sm{height:38px}.site-header .switch-role{position:absolute;right:20px;top:50%;transform:translateY(-50%)}.site-header--admin{justify-content:space-between}.site-header--admin .switch-role{position:static;transform:none}.site-header__brand{display:flex;align-items:center;gap:12px}.site-header__eyebrow{font-size:11px;letter-spacing:.28em;text-transform:uppercase;color:var(--muted)}.site-header__title{margin:2px 0 0;font-size:20px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--ink)}.switch-role{border:1.5px solid var(--ink);background:transparent;color:var(--ink);border-radius:var(--radius);padding:8px 16px;font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;cursor:pointer;transition:background .15s,color .15s}.switch-role:hover{background:var(--ink);color:var(--cream)}.switch-role:active{transform:translateY(-50%) scale(.97)}.site-header--admin .switch-role:active{transform:scale(.97)}.app-main{flex:1;padding-bottom:calc(var(--nav-h) + env(safe-area-inset-bottom) + 12px)}.app-main--flush{padding-bottom:calc(env(safe-area-inset-bottom) + 24px)}.shop{max-width:var(--shell);margin:0 auto;padding:28px 20px 48px}.shop__intro{text-align:center;max-width:560px;margin:0 auto 34px}.shop__tagline{margin:0 0 8px;font-family:var(--serif);font-style:italic;font-size:18px;letter-spacing:.14em;color:var(--charcoal)}.shop__lede{margin:0;font-size:14px;line-height:1.7;color:var(--muted)}.product-grid{display:grid;grid-template-columns:1fr;gap:32px}@media (min-width: 820px){.product-grid{grid-template-columns:repeat(3,1fr);gap:34px}}.product-card{display:flex;flex-direction:column;gap:14px}.product-card__media{position:relative;display:block;width:100%;padding:0;border:1.5px solid var(--ink);background:var(--cream-2);border-radius:var(--radius-img);cursor:pointer;overflow:hidden}.product-card__media:active{transform:scale(.995)}.product-card__status{position:absolute;top:10px;left:10px;background:var(--ink);color:var(--cream);font-size:10px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;padding:5px 10px;border-radius:var(--radius-img)}.product-card__status.is-soldout{background:var(--muted)}.product-card__body{display:flex;flex-direction:column;gap:6px}.product-card__name{margin:0;font-size:17px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--ink)}.product-card__meta{font-size:13px;color:var(--muted);letter-spacing:.02em}.product-card__meta--sizes{font-size:12px;letter-spacing:.08em;text-transform:uppercase}.product-card__body .btn{margin-top:8px}.detail{display:flex;flex-direction:column;gap:22px}.detail__media{display:flex;flex-direction:column;gap:12px}.face-tabs{display:flex;gap:10px;justify-content:center}.face-tab{min-width:92px;min-height:44px;padding:10px 18px;border:1.5px solid var(--ink);background:transparent;color:var(--ink);border-radius:var(--radius);font-size:13px;font-weight:700;letter-spacing:.1em;cursor:pointer;transition:background .15s,color .15s}.face-tab.is-active{background:var(--ink);color:var(--cream)}.detail__group{display:flex;flex-direction:column;gap:12px}.detail__label{font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--charcoal)}.detail__value{color:var(--muted);font-weight:600;letter-spacing:.04em;margin-left:6px}.swatches{display:flex;flex-wrap:wrap;gap:16px}.swatch{display:flex;flex-direction:column;align-items:center;gap:6px;border:none;background:none;padding:0;cursor:pointer}.swatch__dot{width:34px;height:34px;border-radius:50%;border:1.5px solid var(--ink);box-shadow:0 0 0 0 var(--cream),0 0 0 0 var(--ink);transition:box-shadow .15s}.swatch.is-active .swatch__dot{box-shadow:0 0 0 2px var(--cream),0 0 0 4px var(--ink)}.swatch__label{font-size:12px;color:var(--muted);letter-spacing:.04em}.swatch.is-active .swatch__label{color:var(--ink);font-weight:700}.sizes{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.size-btn{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:52px;padding:8px 4px;border:1.5px solid var(--ink);background:transparent;color:var(--ink);border-radius:var(--radius);cursor:pointer;transition:background .15s,color .15s}.size-btn__size{font-size:14px;font-weight:700;letter-spacing:.04em}.size-btn.is-active{background:var(--ink);color:var(--cream)}.size-btn.is-soldout{border-color:var(--line-soft);color:var(--muted);cursor:not-allowed;background:repeating-linear-gradient(-45deg,transparent,transparent 5px,rgba(25,21,16,.06) 5px,rgba(25,21,16,.06) 10px)}.size-btn__tag{font-size:9px;letter-spacing:.06em;color:var(--muted)}.success-text{font-size:15px;line-height:1.7;color:var(--ink);margin:0 0 18px}.page{max-width:760px;margin:0 auto;padding:20px 16px;display:flex;flex-direction:column;gap:22px}.bottom-nav{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:640px;height:calc(var(--nav-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);display:flex;background:var(--paper);border-top:1.5px solid var(--ink);z-index:20}.bottom-nav__item{flex:1;border:none;background:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--muted);font-size:11px;letter-spacing:.08em;cursor:pointer;transition:color .2s}.bottom-nav__item.is-active{color:var(--ink);font-weight:700}.bottom-nav__icon{font-size:19px;line-height:1;filter:grayscale(1)}.stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}@media (min-width: 620px){.stat-grid{grid-template-columns:repeat(3,1fr)}}.stat-card{background:var(--paper);border:1.5px solid var(--ink);border-radius:var(--radius);padding:16px}.stat-card--warn{border-left-width:5px;border-left-color:var(--warn)}.stat-card--danger{border-left-width:5px;border-left-color:var(--danger)}.stat-card--ink{border-left-width:5px;border-left-color:var(--ink)}.stat-card__value{font-size:28px;font-weight:800;color:var(--ink)}.stat-card__label{font-size:12px;letter-spacing:.04em;color:var(--muted);margin-top:2px}.section{display:flex;flex-direction:column;gap:12px}.section__title{margin:0;font-size:14px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}.empty-hint{color:var(--muted);font-size:14px;text-align:center;padding:24px 0}.quick-actions{display:flex;flex-direction:column;gap:10px}.quick-actions__btn{border:1.5px solid var(--ink);background:var(--paper);border-radius:var(--radius);padding:14px 16px;text-align:left;font-size:14px;letter-spacing:.02em;color:var(--ink);cursor:pointer;transition:background .15s}.quick-actions__btn:active{background:var(--cream-2)}.card-list{display:flex;flex-direction:column;gap:12px}.alert-card,.item-card,.order-card{background:var(--paper);border:1.5px solid var(--ink);border-radius:var(--radius);padding:16px}.alert-card{display:flex;align-items:center;justify-content:space-between;gap:12px}.alert-card__name{font-weight:700;color:var(--ink)}.alert-card__meta{font-size:13px;color:var(--muted)}.item-card__top{display:flex;gap:12px;align-items:flex-start}.item-card__top .item-card__head{flex:1}.item-card__head,.order-card__head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.item-card__name,.order-card__student{margin:0;font-size:16px;font-weight:700;letter-spacing:.02em;color:var(--ink)}.item-card__sub,.order-card__contact{font-size:13px;color:var(--muted);margin-top:2px}.item-card__stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0;padding:12px 0;border-top:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft)}.mini-stat{text-align:center}.mini-stat__value{font-size:18px;font-weight:800;color:var(--ink)}.mini-stat__label{font-size:11px;color:var(--muted)}.item-card__footer{display:flex;align-items:center;justify-content:space-between}.item-card__price{font-size:17px;font-weight:800;color:var(--ink)}.item-card__status{font-size:13px;color:var(--muted)}.item-card__note,.order-card__note{margin:10px 0 0;font-size:13px;color:var(--muted);font-style:italic}.item-card__actions,.order-card__actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.order-card__item{margin-top:10px;font-weight:600;letter-spacing:.02em;color:var(--ink)}.order-card__pickup{margin-top:8px;font-size:14px;font-weight:600;color:var(--charcoal)}.badge{display:inline-flex;align-items:center;padding:4px 10px;border:1px solid currentColor;border-radius:var(--radius-img);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}.badge--neutral{color:var(--muted);background:transparent}.badge--ok{color:var(--ok);background:var(--ok-bg)}.badge--low{color:var(--warn);background:var(--warn-bg)}.badge--soldout,.badge--error{color:var(--danger);background:var(--danger-bg)}.toolbar{display:flex;gap:10px}.toolbar__search{flex:1;border:1.5px solid var(--ink);border-radius:var(--radius);padding:11px 14px;font-size:15px;background:var(--paper);color:var(--ink)}.toolbar__search:focus{outline:none;background:#fff}.chips{display:flex;gap:8px;overflow-x:auto;padding-bottom:2px;-webkit-overflow-scrolling:touch}.chip{border:1.5px solid var(--ink);background:transparent;color:var(--ink);border-radius:var(--radius);padding:7px 14px;font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;cursor:pointer;transition:background .15s,color .15s}.chip.is-active{background:var(--ink);color:var(--cream)}.btn{border:1.5px solid var(--ink);border-radius:var(--radius);padding:13px 20px;font-size:13px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;cursor:pointer;transition:transform .12s,background .15s,color .15s}.btn:active{transform:scale(.98)}.btn--primary{background:var(--ink);color:var(--cream)}.btn--primary:hover{background:var(--charcoal)}.btn--ghost{background:transparent;color:var(--ink)}.btn--ghost:hover{background:var(--cream-2)}.btn--danger{background:transparent;color:var(--danger);border-color:var(--danger)}.btn--danger:hover{background:var(--danger-bg)}.btn--block{width:100%}.btn--sm{padding:10px 14px;font-size:12px}.btn--xs{padding:8px 12px;font-size:11px;letter-spacing:.06em}.form{display:flex;flex-direction:column;gap:16px}.login-hint{margin:0;font-size:14px;line-height:1.6;color:var(--muted)}.field{display:flex;flex-direction:column;gap:6px;flex:1}.field__label{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--charcoal)}.field__input{border:1.5px solid var(--ink);border-radius:var(--radius);padding:12px 13px;font-size:15px;background:var(--paper);color:var(--ink);font-family:inherit;width:100%}.field__input:focus{outline:none;background:#fff;box-shadow:0 0 0 2px var(--cream),0 0 0 3px var(--ink)}.field-row{display:flex;gap:12px}.form-error{margin:0;color:var(--danger);font-size:14px;font-weight:600}.form-actions{display:flex;gap:12px;margin-top:4px}.form-actions .btn{flex:1}.form-preview{display:flex;align-items:center;gap:12px;padding:10px;background:var(--cream-2);border:1px solid var(--line-soft);border-radius:var(--radius)}.form-preview__hint{font-size:13px;color:var(--muted)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#19151080;display:flex;align-items:flex-end;justify-content:center;z-index:50;animation:fade .2s ease}.modal-sheet{width:100%;max-width:560px;background:var(--cream);border:1.5px solid var(--ink);border-bottom:none;border-radius:10px 10px 0 0;max-height:94vh;overflow-y:auto;padding-bottom:env(safe-area-inset-bottom);animation:slide-up .25s ease}.modal-header{position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;padding:18px 20px 14px;background:var(--cream);border-bottom:1.5px solid var(--ink);z-index:2}.modal-title{margin:0;font-size:16px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--ink)}.modal-close{border:none;background:none;font-size:26px;line-height:1;color:var(--ink);cursor:pointer}.modal-body{padding:20px}@media (min-width: 620px){.modal-backdrop{align-items:center}.modal-sheet{border-bottom:1.5px solid var(--ink);border-radius:10px;animation:fade .2s ease}}@keyframes slide-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes fade{0%{opacity:0}to{opacity:1}}.product-image{position:relative;overflow:hidden;background:var(--cream-2);flex-shrink:0}.product-image__img{width:100%;height:100%;object-fit:cover;display:block}.product-image__placeholder{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.product-image--tall,.product-image--detail{width:100%;aspect-ratio:3 / 4}.product-image--detail{border:1.5px solid var(--ink);border-radius:var(--radius-img)}.product-image--cover{width:100%;aspect-ratio:4 / 3}.product-image--square{width:100%;aspect-ratio:1 / 1}.product-image--thumb{width:76px;height:76px;border:1px solid var(--line-soft);border-radius:var(--radius-img)}.reserve-intro{margin:0;font-size:13px;line-height:1.6;color:var(--muted)}.inv-product{background:var(--paper);border:1.5px solid var(--ink);border-radius:var(--radius);padding:16px;display:flex;flex-direction:column;gap:16px}.inv-product__head{display:flex;gap:12px;align-items:center}.inv-product__name{margin:0;font-size:16px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--ink)}.inv-product__meta{margin-top:2px;font-size:12px;color:var(--muted);letter-spacing:.02em}.inv-variant{display:flex;flex-direction:column;gap:10px;padding-top:14px;border-top:1px solid var(--line-soft)}.inv-variant__label{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:700;letter-spacing:.04em;color:var(--ink)}.swatch__dot--sm{width:18px;height:18px}.inv-sizes{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}@media (min-width: 620px){.inv-sizes{grid-template-columns:repeat(8,1fr)}}.inv-size{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 4px;border:1.5px solid var(--ink);border-radius:var(--radius);background:transparent}.inv-size.is-low{border-color:var(--warn)}.inv-size.is-soldout{border-color:var(--danger);background:var(--danger-bg)}.inv-size__size{font-size:12px;font-weight:700;letter-spacing:.04em;color:var(--ink)}.inv-size__qty{font-size:18px;font-weight:800;color:var(--ink);line-height:1}.inv-size__controls{display:flex;gap:4px}.stepper{width:26px;height:26px;display:flex;align-items:center;justify-content:center;border:1.5px solid var(--ink);border-radius:var(--radius-img);background:transparent;color:var(--ink);font-size:15px;line-height:1;cursor:pointer;transition:background .15s,color .15s}.stepper:hover{background:var(--ink);color:var(--cream)}.stepper:active{transform:scale(.94)}.product-card__price,.detail__price{font-family:var(--serif);font-weight:700;color:var(--ink);letter-spacing:.03em}.product-card__price{font-size:16px}.detail__price{font-size:22px}.field__note{font-size:12px;line-height:1.5;color:var(--muted);font-style:italic}select.field__input{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink) 50%),linear-gradient(135deg,var(--ink) 50%,transparent 50%);background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:34px}.size-btn.is-low:not(.is-soldout){border-color:var(--warn)}.size-btn.is-low:not(.is-soldout) .size-btn__tag{color:var(--warn)}.pay-popup{display:flex;flex-direction:column;gap:16px;align-items:center;text-align:center}.pay-popup__lead{margin:0;font-size:15px;line-height:1.6;color:var(--ink)}.pay-popup__summary{width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border:1.5px solid var(--ink);border-radius:var(--radius);background:var(--paper);font-weight:600;color:var(--ink);text-align:left}.pay-popup__amount{font-family:var(--serif);font-size:18px;font-weight:700;white-space:nowrap}.wechat-qr{width:220px;max-width:70%;aspect-ratio:1 / 1;border:1.5px solid var(--ink);border-radius:var(--radius);background:#fff;display:flex;align-items:center;justify-content:center;overflow:hidden}.wechat-qr__img{width:100%;height:100%;object-fit:contain;display:block}.wechat-qr--missing{padding:18px;font-size:13px;line-height:1.6;color:var(--muted);background:var(--cream-2)}.pay-popup__note{width:100%;padding:12px 14px;border:1px dashed var(--line-soft);border-radius:var(--radius);text-align:left;display:flex;flex-direction:column;gap:4px}.pay-popup__note-title{font-size:13px;font-weight:700;color:var(--charcoal)}.pay-popup__note-example{font-size:13px;color:var(--muted)}.pay-popup__note-mine{margin-top:4px;font-size:14px;font-weight:600;color:var(--ink)}.stat-card{text-align:left;width:100%;font:inherit;cursor:pointer}.stat-card--ok{border-left-width:5px;border-left-color:var(--ok)}.stat-card--highlight{background:var(--warn-bg);border-color:var(--warn)}.section__head{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.section__more{border:none;background:none;color:var(--muted);font-size:12px;letter-spacing:.04em;cursor:pointer}.section__more:hover{color:var(--ink)}.reminder-card{display:flex;align-items:center;justify-content:space-between;gap:12px;text-align:left;width:100%;font:inherit;cursor:pointer;background:var(--paper);border:1.5px solid var(--ink);border-left-width:5px;border-left-color:var(--warn);border-radius:var(--radius);padding:14px 16px}.reminder-card:active{transform:scale(.995)}.reminder-card__student{display:flex;align-items:baseline;gap:10px;font-size:15px;font-weight:700;color:var(--ink)}.reminder-card__amount{font-family:var(--serif);font-size:14px;font-weight:700;color:var(--charcoal)}.reminder-card__item{margin-top:3px;font-size:13px;color:var(--charcoal)}.reminder-card__time{margin-top:2px;font-size:12px;color:var(--muted)}.inv-product__headmain{flex:1}.inv-product__reservations{margin-top:4px;font-size:12px;color:var(--muted);letter-spacing:.02em}.inv-product__reservations strong{color:var(--ink);font-size:14px}.inv-product__availability{margin-top:8px;display:flex;align-items:center;gap:10px}.inv-price{display:flex;align-items:center;gap:10px;padding-top:14px;border-top:1px solid var(--line-soft)}.inv-price__label{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--charcoal)}.inv-price__field{display:inline-flex;align-items:center;gap:4px;border:1.5px solid var(--ink);border-radius:var(--radius);background:var(--paper);padding:6px 10px}.inv-price__symbol{font-family:var(--serif);font-weight:700;color:var(--ink)}.inv-price__input{width:88px;border:none;background:transparent;color:var(--ink);font-size:15px;font-family:inherit}.inv-price__input:focus{outline:none}.inv-price__preview{margin-left:auto;font-family:var(--serif);font-weight:700;color:var(--ink)}.inv-matrix-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.inv-matrix{border-collapse:collapse;width:100%;min-width:420px}.inv-matrix th,.inv-matrix td{padding:4px;text-align:center}.inv-matrix__corner{font-size:10px;font-weight:600;color:var(--muted);text-align:left;white-space:nowrap}.inv-matrix__size{font-size:11px;font-weight:700;letter-spacing:.02em;color:var(--charcoal)}.inv-matrix__color{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:var(--ink);white-space:nowrap;text-align:left;padding-right:8px}.inv-cell{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:1.5px solid var(--line-soft);border-radius:var(--radius-img);background:transparent;font-size:13px;font-weight:700;cursor:pointer;transition:transform .1s}.inv-cell:active{transform:scale(.9)}.inv-cell.is-available{color:var(--ok);border-color:var(--line-soft)}.inv-cell.is-low{color:var(--warn);border-color:var(--warn);background:var(--warn-bg)}.inv-cell.is-soldout{color:var(--danger);border-color:var(--danger);background:var(--danger-bg)}.inv-cell--mini{width:20px;height:20px;font-size:11px;cursor:default}.inv-legend{display:flex;flex-wrap:wrap;align-items:center;gap:14px;padding-top:12px;border-top:1px solid var(--line-soft)}.inv-legend__item{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}.inv-legend__reset{margin-left:auto}.order-card--new{border-left-width:5px;border-left-color:var(--warn)}.order-card__badges{display:flex;flex-direction:column;gap:6px;align-items:flex-end}.order-card__price{float:right;font-family:var(--serif);font-weight:700;color:var(--charcoal)}.order-card__actions--pay{padding-top:12px;margin-top:12px;border-top:1px solid var(--line-soft)}
