:root{--ink:#3c3159;--text:#fdf7f6;--night:#3e5c7d;--blue:#88a9c7;--fog:#d9e6f3;--cream:#f7edf4;--soft:#fff8f4;--mauve:#68547d;--rose:#9d4363;--ribbon:#c35175;--gold:#efdcbb;--muted:#bfcfdd;--shadow:0 18px 45px rgba(38,53,87,.17);font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif;font-synthesis:none}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%;background:#24334d;color:var(--text)}
body{display:flex;justify-content:center;align-items:start}
#app{width:100%;max-width:440px}
button,input,select,textarea{font:inherit}
button{cursor:pointer}
a{color:inherit;text-decoration:none}
button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid #d8bad4;outline-offset:3px}
.phone{position:relative;isolation:isolate;width:min(100%,440px);min-height:100dvh;overflow-x:hidden;background:linear-gradient(163deg,#344e72 0%,#688aa9 44%,#a8c3dc 78%,#e0e9f2 100%);box-shadow:0 12px 50px #10172b40}
.phone::before{content:"";position:absolute;top:15%;right:-12%;width:70%;height:31rem;background:radial-gradient(ellipse at center,rgba(230,241,255,.42),transparent 70%);z-index:-2;pointer-events:none}
.phone::after{content:"";position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:min(100%,440px);height:20vh;background:linear-gradient(0deg,rgba(240,246,254,.37),transparent);pointer-events:none;z-index:0}
#snow{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:8;width:min(100%,440px);left:50%;transform:translateX(-50%)}
.snowflake{position:absolute;top:-15%;display:block;width:var(--size);height:var(--size);border-radius:50%;background:rgba(255,255,255,var(--alpha));filter:blur(var(--blur));animation:fall var(--dur) linear infinite;animation-delay:var(--delay);will-change:transform}
@keyframes fall{to{transform:translate3d(var(--wind),125vh,0)}}
.fog-bank{position:absolute;bottom:0;width:100%;height:200px;background:radial-gradient(80% 60% at 20% 106%,#e8f1faaa,transparent 84%),radial-gradient(90% 45% at 90% 105%,#e7eefbbb,transparent 90%);pointer-events:none;z-index:0}
.page-content{position:relative;z-index:2;padding-bottom:112px;min-height:100vh}
.topbar{height:77px;display:flex;align-items:center;gap:13px;padding:15px 20px;background:rgba(53,76,106,.92);position:relative;z-index:5}
.topbar .titlepack{flex:1;min-width:0}.topbar h1{font-size:22px;margin:0;line-height:1.18;font-weight:730;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar .overline{font-size:10px;font-weight:700;letter-spacing:1px;color:var(--gold);margin-top:6px}
.iconbtn{border:none;background:transparent;color:var(--text);display:flex;align-items:center;justify-content:center;width:36px;height:40px;font-size:27px;flex-shrink:0}
.iconbtn svg{width:25px;height:25px}.bag-button{position:relative;width:46px;height:43px}.count-badge{position:absolute;right:-2px;top:-5px;min-width:21px;height:21px;border-radius:50%;background:var(--rose);font-size:11px;font-weight:700;color:white;display:grid;place-items:center;border:1.5px solid #fff5fb}
.bottom-nav{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:min(100%,440px);z-index:6;display:flex;align-items:stretch;justify-content:space-around;gap:8px;background:rgba(55,80,108,.98);min-height:70px;padding:5px 15px max(8px,env(safe-area-inset-bottom));box-shadow:0 -7px 25px #192d4030}
.bottom-nav a{position:relative;flex:1;text-align:center;font-size:12px;color:#c4d2df;padding:15px 0 9px;white-space:nowrap}.bottom-nav a.active{color:white;font-weight:700}.bottom-nav a.active::before{content:"";position:absolute;top:0;left:15%;right:15%;height:2px;background:var(--rose)}
.container{padding:20px 19px}
.section-title{font-size:21px;margin:11px 0 16px;font-weight:730}.small-en{font-size:10px;letter-spacing:1.5px;font-weight:730;color:var(--gold)}
.row{display:flex;align-items:center;gap:12px}.between{justify-content:space-between}.muted{color:#d4e0ec}.caption{font-size:12px;color:#d4e0ec;line-height:1.6}.strong{font-weight:730}.rose{color:var(--rose)}.right{text-align:right}
.panel{background:var(--cream);color:var(--ink);border-radius:21px;box-shadow:0 2px 0 #ffffff12}
.glass{border-radius:19px;background:rgba(61,86,115,.86);border:1px solid rgba(240,222,234,.52)}
.divider{height:1px;background:#decbd9;margin:16px 0}
.btn{border:0;display:flex;align-items:center;justify-content:center;gap:9px;border-radius:25px;min-height:52px;padding:12px 20px;background:var(--cream);color:var(--ink);font-size:16px;font-weight:720;text-align:center;width:100%;box-shadow:inset 0 0 0 1px rgba(226,193,204,.6)}
.btn.dark{background:rgba(57,81,110,.92);color:white;border:1px solid #bccde0}.btn.danger{background:#eed0da;color:#843451}.btn.disabled,.btn:disabled{cursor:not-allowed;opacity:.54}.btn.small{min-height:35px;font-size:12px;padding:7px 14px;width:auto;border-radius:20px}
.btnrow{display:flex;gap:10px}.btnrow>.btn{flex:1}
.input,.select,.textarea{width:100%;border:1px solid #e7cbd6;outline:none;border-radius:15px;background:var(--cream);color:var(--ink);min-height:54px;padding:15px 16px;font-size:15px}.input::placeholder,.textarea::placeholder{color:#8f7b9a}.field-label{display:block;font-size:14px;font-weight:720;margin:13px 0 8px}.textarea{resize:vertical;min-height:80px}.hint{font-size:12px;color:#d7e4f0;margin-top:8px;line-height:1.6}
.price{font-size:20px;font-weight:800;color:var(--rose)}
.chip{display:inline-flex;align-items:center;padding:7px 12px;border-radius:20px;background:#efcbd9;color:#5f3658;font-weight:700;font-size:11px;white-space:nowrap}.chip.paid{background:#c8e5df;color:#30695c}.chip.completed{background:#d0e3f4;color:#456a8a}.chip.cancelled,.chip.expired{background:#ddd4dd;color:#6e5e70}
.moon{position:absolute;top:92px;right:25px;width:68px;height:68px;border-radius:50%;background:radial-gradient(circle at 45% 45%,#f8fcffcc 0 35%,#e5f0fb33 37% 62%,transparent 70%);filter:drop-shadow(0 0 20px #e9f8ff5e);z-index:0}
/* Homepage */
.home-hero{min-height:65vh;position:relative;background-image:linear-gradient(180deg,rgba(22,38,70,.12),rgba(24,35,57,.12) 68%,rgba(35,58,86,.72)),url('/assets/hero-reference.jpg');background-position:center 33%;background-size:cover;}
.home-top{height:75px;background:rgba(45,64,89,.53);display:flex;align-items:center;justify-content:space-between;padding:0 24px;font-size:12px;font-weight:700;letter-spacing:1px}
.home-caption{position:absolute;bottom:0;left:0;right:0;background:rgba(66,91,122,.73);padding:17px 24px 25px;backdrop-filter:blur(2px)}.home-caption h1{font-size:31px;margin:15px 0 10px;line-height:1.23}.home-caption p{font-size:13px;margin:0 0 15px;color:#efd6e6}.home-caption .sub-note{font-size:11px;color:#ecdfec}
.hero-note{background:rgba(41,61,92,.72);border-radius:0 0 14px 14px;padding:9px 18px;color:#e7e5ee;font-size:11px;line-height:1.6;text-align:center}
.home-footer{padding:28px 21px 16px;text-align:center}.home-footer .footnote{margin-top:19px;font-size:11px;color:#344563}.merchant-link{font-size:12px;color:#344563;text-decoration:underline;text-decoration-style:dotted;display:inline-block;margin-top:18px}
/* Catalogue */
.promo{border-radius:23px;height:174px;position:relative;overflow:hidden;background:radial-gradient(circle at 83% 30%,#d8bace 0 18%,transparent 19%),radial-gradient(circle at 68% 115%,#362b5e 0 46%,transparent 48%),linear-gradient(125deg,#182d5c,#685180)}
.promo::before{content:"";position:absolute;inset:0;background:radial-gradient(2px 2px at 12% 19%,white 98%,transparent),radial-gradient(3px 3px at 38% 31%,white 98%,transparent),radial-gradient(2px 2px at 75% 16%,white 98%,transparent);opacity:.7}.promo-content{position:absolute;bottom:0;width:100%;background:rgba(55,77,109,.76);padding:12px 15px;color:#fff}.promo-content h2{font-size:19px;line-height:1.1;margin:5px 0}.promo-content .tiny{font-size:11px;color:#ffdfef}
.product-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}.product-card{background:var(--soft);color:var(--ink);border-radius:19px;padding:7px;min-width:0;overflow:hidden;box-shadow:var(--shadow)}.product-art{aspect-ratio:1.08/1;border-radius:13px;display:flex;flex-direction:column;gap:12px;align-items:center;justify-content:center;color:#fff;overflow:hidden;position:relative}.product-art.lavender{background:#675180}.product-art.blue{background:#6988b2}.product-art.violet{background:#927baa}.product-art.rose{background:#a06d89}.product-art img{display:block;width:100%;height:100%;object-fit:cover}.product-art .symbol{font-size:40px}.product-art .placeholder{font-size:10px;opacity:.85}.product-card h3{font-size:13px;line-height:1.35;min-height:37px;margin:10px 4px 2px}.product-card-bottom{display:flex;align-items:center;justify-content:space-between;padding:0 3px 3px}.round-add{border:0;width:30px;height:30px;border-radius:50%;background:var(--rose);color:white;font-size:24px;line-height:1;display:grid;place-items:center}.round-add:disabled{background:#ae9cac}.sold-out{background:#e3d5e1;color:#76586f;border-radius:10px;font-size:11px;padding:4px 9px}.tiny-stock{font-size:10px;color:#806d83;margin-top:4px}
/* Checkout */
.line-item{padding:12px;display:flex;gap:13px;margin-bottom:12px;align-items:center}.mini-art{flex:0 0 99px;height:99px;border-radius:13px;display:flex;justify-content:center;align-items:center;color:#fff;font-size:37px;overflow:hidden}.mini-art img{height:100%;width:100%;object-fit:cover}.mini-art.lavender{background:#675180}.mini-art.blue{background:#6988b2}.mini-art.violet{background:#927baa}.mini-art.rose{background:#a06d89}.item-meta{flex:1;min-width:0}.item-meta h3{font-size:15px;margin:0 0 8px}.item-meta p{color:#7f6d8b;font-size:12px;margin:0 0 8px}.qty{display:inline-flex;align-items:center;gap:14px;background:#fffcfa;border-radius:25px;padding:3px 8px}.qty button{border:0;background:none;color:var(--ink);font-size:18px;width:24px;height:24px}.qty span{min-width:13px;font-size:14px;font-weight:700;color:var(--ink)}.summary{padding:18px 19px;margin:22px 0}.summary .total-price{font-size:28px;color:#f2b9cf;font-weight:800}.summary .caption{margin-top:11px}.summary-line{display:flex;justify-content:space-between;align-items:center;padding:15px 16px;color:var(--ink);font-size:14px}.summary-line.total{border-top:1px solid #dfceda;font-weight:700;font-size:17px}.summary-line.total .price{font-size:24px}.callout{padding:15px 18px;font-size:13px;line-height:1.8;color:#ecedf7;margin-top:22px}.callout strong{display:block;color:#eed0df;font-size:15px}.callout p{margin:5px 0 0}.checkout-sticky{margin:22px 0}.empty{text-align:center;padding:47px 20px;border-radius:22px;background:#f7edf4;color:#5b4e72}.empty .emblem{font-size:41px;color:#ac6989}.empty h2{margin:12px 0}.empty p{font-size:13px;line-height:1.7}
/* Pillow receipt: original sketch is intentionally a replaceable illustration layer */
.receipt-scene{position:relative;width:100%;height:640px;overflow:hidden}.receipt-sketch{position:absolute;inset:2% 0 0;width:100%;height:100%;object-fit:fill;filter:contrast(.85) saturate(.25);opacity:.30;mix-blend-mode:multiply}.receipt-toptext{position:absolute;left:7%;top:15px;color:white;font-weight:700;font-size:17px;z-index:3}.receipt-toptext .small-en{display:block;margin-bottom:8px}.pillow{position:absolute;top:81px;right:6%;width:76%;min-height:250px;transform:rotate(-5deg);background:linear-gradient(130deg,#fff9f1,#f3dceb 85%);border:5px solid #e6c4d6;box-shadow:inset 0 0 0 1px #fffaf2,0 17px 35px #2d3f6540;border-radius:14px 14px 40px 30px;z-index:2;color:#694562;padding:22px 18px 18px;clip-path:polygon(0 3%,94% 0,96% 71%,100% 94%,79% 98%,4% 100%,1% 90%)}.pillow h2{font-size:16px;margin:4px 0 11px;line-height:1.55;font-weight:800}.pillow-info{font-size:12px;line-height:2;color:#614c65}.pillow-info strong{color:#933b5a;font-size:17px}.stamp{position:absolute;right:14px;bottom:15px;border-radius:50%;height:48px;width:48px;color:#fff9f7;font-size:11px;display:grid;place-items:center;background:#b04461;box-shadow:inset 0 0 0 2px #e7bdcd}.receipt-poem{margin:0 25px;text-align:center;color:#344b65;font-size:13px;font-weight:600;line-height:2}.receipt-hint{margin:12px 20px 0;color:#344b65;text-align:center;font-size:12px}.receipt-actions{padding:24px 20px 15px}.receipt-pill{display:inline-flex;padding:7px 12px;background:#f2d7df;color:#86455d;border-radius:13px;font-size:12px;font-weight:700}
/* Admin */
.stats{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:12px 0 23px}.stat{padding:18px;border-radius:20px;background:var(--cream);color:var(--ink)}.stat span{font-size:13px;color:#73617c}.stat strong{display:block;font-size:32px;color:var(--rose);margin-top:7px}.order-list{display:flex;flex-direction:column;gap:12px}.order-card{padding:16px 17px}.order-card h3{margin:0;font-size:17px}.order-card p{font-size:12px;color:#735f83;margin:12px 0 10px}.order-card .money{font-size:19px;color:var(--rose);font-weight:800}.text-link{border:0;background:transparent;color:var(--ink);font-size:12px;font-weight:700;padding:8px 0}.admin-subnav{display:flex;background:rgba(56,79,107,.97);padding:7px 9px;border-radius:20px;gap:6px;margin:26px 0}.admin-subnav a{flex:1;text-align:center;padding:12px 2px;font-size:12px;color:#ccd8e3}.admin-subnav .active{color:white;font-weight:750;text-decoration:underline;text-decoration-color:#f2bace;text-decoration-thickness:2px;text-underline-offset:8px}.status-note{padding:12px;font-size:12px;color:#eef2fb}
.admin-product{display:flex;gap:13px;padding:12px;margin-bottom:12px;min-width:0}.admin-product .mini-art{flex-basis:102px;height:105px}.admin-product-main{min-width:0;flex:1}.admin-product h3{font-size:14px;margin:3px 0 7px}.admin-product p{font-size:12px;color:#72617b;margin:0 0 7px}.admin-product .btn.small{margin-top:7px;width:100%}.stock-row{padding:15px;margin-bottom:12px}.stock-row h3{font-size:15px;margin:0}.stock-row .stock-desc{display:flex;align-items:center;justify-content:space-between;margin-top:13px}.inventory-control{display:flex;gap:7px;align-items:center;background:white;border-radius:18px;padding:5px 8px}.inventory-control button{border:0;background:none;min-width:26px;font-size:18px;color:#4d3b60}.inventory-control span{font-size:12px;min-width:32px;text-align:center;font-weight:700}
.detail-section{padding:16px;margin-top:13px}.detail-line{display:flex;justify-content:space-between;align-items:center;padding:12px 0}.detail-line + .detail-line{border-top:1px solid #decbd8}.detail-line .name{font-size:15px;font-weight:700;color:var(--ink)}.detail-line small{display:block;color:#7b678b;margin-top:6px}.detail-bottom{padding:20px 0}.blocked{opacity:.55}
/* Login and modal */
.login-card{max-width:380px;margin:72px 19px;padding:26px 21px;text-align:center}.login-card .emblem{color:#8a5674;font-size:40px}.login-card h2{margin:8px 0 4px}.login-card p{color:#725d80;font-size:13px;line-height:1.7}.login-card label{text-align:left}
.modal-backdrop{position:fixed;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;background:#1b2639ad;padding:16px}.modal{width:min(100%,430px);max-height:88dvh;overflow-y:auto;padding:20px;background:#f7edf4;border-radius:23px;color:var(--ink)}.modal h2{font-size:20px;margin:0 0 14px}.modal label{color:#4b395b;font-size:13px;font-weight:700;display:block;margin:12px 0 6px}.modal .input,.modal .textarea,.modal .select{background:#fff9f7;border-color:#e8cddd}.modal .btn{margin-top:16px}.modal .btnrow{margin-top:16px}.modal .btnrow .btn{margin:0}.modal-preview{width:100px;height:100px;object-fit:cover;border-radius:15px;margin-top:8px}
.toast{position:fixed;bottom:88px;left:50%;transform:translateX(-50%);z-index:40;background:#2e415f;color:#fff6f5;box-shadow:0 10px 30px #14223c88;border:1px solid #b9b9d2;border-radius:15px;padding:12px 16px;max-width:min(92%,390px);text-align:center;font-size:13px;animation:rise .25s ease-out}@keyframes rise{from{transform:translate(-50%,10px);opacity:0}to{transform:translate(-50%,0);opacity:1}}
.loading-center{min-height:75vh;display:grid;place-items:center;text-align:center;font-size:14px;color:#f7dfe9}.spinner{display:inline-block;width:17px;height:17px;border-radius:50%;border:2px solid #f6dfe6;border-top-color:#8b5379;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
.footer-info{padding:15px 20px 80px;text-align:center;font-size:11px;color:#3f5470;line-height:1.75}
@media (min-width:500px){body{padding:24px 0}.phone{border-radius:24px;min-height:844px;overflow:hidden}.phone::after{border-radius:0 0 24px 24px}.bottom-nav{border-radius:0 0 24px 24px}.page-content{min-height:844px}}
@media (prefers-reduced-motion:reduce){.snowflake{animation:none!important;opacity:.36}.toast{animation:none}}

/* 漫展场次管理：保留雪夜视觉；风险操作用二次确认 */
.admin-subnav a{min-width:0;flex:1;font-size:11px;padding:12px 1px}
.event-context{font-size:13px;color:#f4eaf6;line-height:1.8;margin:10px 0 18px}
.event-context a{color:#fff8f6;text-decoration:underline;margin-left:7px}
.convention-intro{padding:17px 18px;margin-top:15px;font-size:13px;line-height:1.8;color:#eff2fa}
.convention-intro strong{display:block;color:#f8dbe5;font-size:16px}.convention-intro p{margin:7px 0 0}
.convention-card{padding:16px;margin:0 0 13px}.convention-card h3{font-size:17px;margin:0 8px 0 0;line-height:1.5}
.convention-meta{font-size:12px;color:#665575;line-height:1.7;margin-top:8px;overflow-wrap:anywhere}
.convention-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:14px}
.convention-actions button{border:1px solid #e5ccd8;background:#fff9f7;border-radius:12px;padding:11px 7px;font-size:12px;font-weight:700;color:#61415d;min-height:39px}
.convention-actions button.warning-action{background:#fbebed;color:#993d58;border-color:#e8bdcd}
.pillow h2{font-size:clamp(12px,3.8vw,16px);overflow-wrap:anywhere;line-height:1.5}

/* Souvenir-ticket PNG preview. Kept apart from the app's animated snow. */
.receipt-save-btn{position:absolute;right:13px;top:10px;z-index:10;border:1px solid #e9c7d8;background:#f8eaf3;color:#654866;border-radius:24px;padding:9px 14px;font-size:13px;font-weight:700;box-shadow:0 4px 13px #27365538;white-space:nowrap}
.receipt-save-btn:focus-visible{outline:3px solid #eac9da;outline-offset:3px}
.ticket-preview-open{overflow:hidden}
.ticket-image-preview{position:fixed;inset:0;z-index:1400;display:flex;flex-direction:column;align-items:center;background:#1b2942;color:#fff9f5}
.ticket-preview-head{height:68px;width:100%;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 24px;background:#263b58}
.ticket-preview-head strong{font-size:20px}
.ticket-preview-head button{background:transparent;border:0;color:#fff9f5;font-size:32px;min-width:44px;height:44px;display:grid;place-items:center}
.ticket-preview-scroller{min-height:0;flex:1;width:100%;overflow:auto;padding:14px 20px;display:flex;justify-content:center;align-items:flex-start}
.ticket-preview-image{width:auto;max-width:100%;height:auto;max-height:100%;object-fit:contain;border:5px solid #f9e9f4;border-radius:14px;box-shadow:0 12px 32px #03091260;display:block;-webkit-user-select:auto;user-select:auto;-webkit-touch-callout:default;touch-action:pan-y;}
.ticket-preview-foot{flex-shrink:0;width:100%;padding:12px 20px max(14px,env(safe-area-inset-bottom));background:#f8eaf3;color:#342b59;text-align:center;font-size:14px;font-weight:700}
.ticket-preview-foot small{display:block;margin:4px 0;color:#73577b;font-size:11px;font-weight:400}
.ticket-preview-fallback{display:inline-block;font-size:11px;color:#984a6d;text-decoration:underline;margin-top:4px;padding:3px}
.ticket-preview-loading{position:fixed;inset:0;z-index:1401;display:flex;align-items:center;justify-content:center;text-align:center;background:#223553dc;color:#fff9f6;font-size:15px;}
@media (max-height:700px){.ticket-preview-head{height:54px}.ticket-preview-scroller{padding:9px 20px}.ticket-preview-foot{padding-top:9px;padding-bottom:9px}}
