.poster-workspace,.poster-workspace *,.poster-canvas,.poster-canvas *{box-sizing:border-box}.poster-workspace{display:grid;grid-template-columns:minmax(360px,520px) minmax(360px,1fr);gap:24px;align-items:start}.poster-workspace .card{background:#fff;border-radius:12px;border:1px solid #d7ded9}.poster-workspace .card-body{padding:24px}.poster-workspace .btn{display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:7px 14px;border:1px solid #198754;border-radius:7px;background:#198754;color:#fff;text-decoration:none;cursor:pointer}.poster-workspace .btn-outline-secondary{border-color:#6c757d;background:#fff;color:#495057}.poster-workspace .btn-outline-danger{border-color:#dc3545;background:#fff;color:#dc3545}.poster-workspace .form-control,.poster-workspace .form-select{width:100%;min-height:38px;padding:7px 10px;border:1px solid #aeb8b1;border-radius:6px;background:#fff}.poster-workspace .input-group{display:flex}.poster-workspace .input-group .form-control{border-radius:6px 0 0 6px}.poster-workspace .input-group .btn{border-radius:0 6px 6px 0}.poster-workspace .list-group-item{display:flex;width:100%;padding:10px 12px;border:1px solid #d7ded9;background:#fff;text-align:left;cursor:pointer}.poster-workspace .alert{padding:10px 12px;border-radius:6px;background:#f8d7da;color:#842029}.poster-controls{position:sticky;top:16px}.selected-item{display:grid;grid-template-columns:72px 1fr 105px 90px 38px;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid #dee2e6}.selected-item img{width:72px;height:62px;object-fit:contain;background:#fff;border-radius:8px}.selected-name{font-weight:600}.selected-id{font-size:12px;color:#6c757d}.preview-column{min-width:0}.preview-stage{width:100%;max-width:540px;aspect-ratio:9/16;position:relative;overflow:hidden;margin:auto;box-shadow:0 10px 32px rgba(0,0,0,.18);background:#f4f0e6}.poster-canvas{position:absolute;width:1080px;height:1920px;transform-origin:top left;transform:scale(.5);overflow:hidden;padding:58px 58px 42px;color:#173f32;background:radial-gradient(circle at 92% 5%,rgba(185,203,162,.34),transparent 18%),radial-gradient(circle at 0 68%,rgba(238,191,122,.18),transparent 22%),#f4f0e6;font-family:"PingFang SC","Microsoft YaHei",sans-serif}.poster-topline{display:flex;align-items:center;justify-content:space-between}.poster-brand{display:flex;align-items:center;gap:16px;font-size:22px;letter-spacing:3px;color:#617368}.poster-logo{width:56px;height:56px;border:2px solid #83958a;border-radius:50%;display:grid;place-items:center;font-size:16px;letter-spacing:0}.poster-date{border:1px solid #9aab9e;border-radius:999px;padding:11px 22px;font-size:20px;color:#52675b}.poster-hero{margin-top:25px;display:flex;align-items:end;justify-content:space-between}.poster-hero h2{margin:0;font-family:"Songti SC","STSong",serif;font-size:82px;line-height:1;letter-spacing:5px;font-weight:700}.poster-hero p{margin:0;padding-bottom:7px;text-align:right;color:#66766b;font-size:20px;line-height:1.55;letter-spacing:2px}.poster-rule{height:1px;margin:30px 0 28px;background:#9eaa9f;position:relative}.poster-rule span{position:absolute;right:0;top:-11px;padding-left:18px;background:#f4f0e6;color:#7b897e;font-size:16px;letter-spacing:4px}.poster-grid{display:grid;grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(4,1fr);gap:22px;height:1450px}.poster-product{min-width:0;overflow:hidden;border:1px solid #d4d5c9;border-radius:26px;background:rgba(255,255,255,.58);position:relative;display:grid;grid-template-rows:210px 1fr;padding:14px 20px 18px}.poster-product:before{content:attr(data-index);position:absolute;top:18px;left:20px;color:#89968e;font-size:15px;letter-spacing:2px}.poster-photo{width:100%;height:100%;object-fit:contain;padding:8px 12px 0;filter:drop-shadow(0 13px 10px rgba(35,49,39,.1))}.poster-info{border-top:1px solid #dde0d7;padding-top:12px;min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px}.poster-name{min-width:0;height:72px;display:flex;align-items:center;font-size:31px;line-height:1.18;font-weight:600;letter-spacing:1px;overflow:hidden}.poster-price{white-space:nowrap;color:#d95f3c;display:flex;align-items:baseline;line-height:1}.poster-currency{font-size:23px;font-weight:700}.poster-number{font-family:Arial,sans-serif;font-size:55px;font-weight:800;letter-spacing:-2px}.poster-unit{margin-left:4px;font-size:18px;font-weight:600;color:#845d4e}.poster-footer{position:absolute;bottom:13px;left:58px;right:58px;display:flex;justify-content:space-between;color:#78847c;font-size:15px;letter-spacing:1px}@media(max-width:1100px){.poster-workspace{grid-template-columns:1fr}.poster-controls{position:static}}@media(max-width:600px){.selected-item{grid-template-columns:58px 1fr 80px}.selected-item select,.selected-item .remove-item{grid-column:auto}.preview-stage{max-width:100%}}
/* Keep arbitrary source-image dimensions inside a dedicated 210px image zone. */
.poster-product{grid-template-rows:210px minmax(0,1fr)}
.poster-product:before{z-index:2}
.poster-photo{position:absolute;top:14px;left:20px;width:calc(100% - 40px);height:210px;max-width:calc(100% - 40px);max-height:210px;display:block;object-fit:contain;overflow:hidden}
.poster-info{grid-row:2}
.poster-admin{display:block}.admin-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.batch-picker{display:grid;grid-template-columns:1fr auto auto;gap:10px;margin-top:20px}.batch-summary{margin:12px 0}.batch-progress{height:8px;border-radius:99px;background:#e3e8e4;overflow:hidden}.batch-progress>div{height:100%;width:0;background:#198754;transition:width .2s}.batch-table-wrap{max-height:620px;overflow:auto;margin-top:16px}.batch-table{width:100%;border-collapse:collapse}.batch-table th,.batch-table td{padding:10px;border-bottom:1px solid #d7ded9;vertical-align:middle}.batch-thumb{width:72px;height:64px;object-fit:contain;background:#f7f7f3}.batch-candidate{min-width:330px}.candidate-search{display:flex;margin-top:6px}.candidate-search input{border-radius:6px 0 0 6px}.candidate-search button{border-radius:0 6px 6px 0}.status-matched{color:#198754}.status-ambiguous{color:#9a6700}.status-unmatched{color:#b02a37}.manual-form{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;align-items:end}.manual-form label{font-size:14px}.manual-image{grid-column:span 3}.asset-groups{display:grid;gap:18px}.asset-group{border:1px solid #d7ded9;border-radius:12px;padding:16px}.asset-group-head{display:flex;justify-content:space-between;gap:12px}.asset-group-head strong{font-size:20px}.asset-group-head div span{display:block;color:#6c757d;margin-top:4px}.asset-gallery{display:flex;gap:10px;overflow-x:auto;padding:14px 0}.asset-preview-button{position:relative;flex:0 0 auto}.asset-preview-button small{position:absolute;right:4px;bottom:4px;padding:2px 5px;border-radius:4px;background:rgba(0,0,0,.65);color:#fff}.asset-edit{display:grid;grid-template-columns:minmax(160px,1fr) 120px auto;gap:10px}.poster-search-product{padding:12px;border:1px solid #d7ded9;background:#fff}.poster-search-title{display:flex;justify-content:space-between;gap:10px}.poster-search-title span{color:#6c757d}.poster-search-images{display:flex;gap:8px;margin-top:10px;overflow-x:auto}.poster-search-images button{position:relative;padding:3px;border:2px solid transparent;border-radius:8px;background:#f5f5f0;cursor:pointer}.poster-search-images button:hover{border-color:#198754}.poster-search-images img{display:block;width:92px;height:74px;object-fit:contain}.poster-search-images small{position:absolute;right:3px;bottom:3px;background:rgba(0,0,0,.65);color:#fff;padding:1px 4px;border-radius:3px}.selected-item-multi{grid-template-columns:64px minmax(100px,1fr) 100px 90px 86px 38px}@media(max-width:800px){.batch-picker{grid-template-columns:1fr}.manual-form{grid-template-columns:1fr}.manual-image{grid-column:auto}.asset-edit{grid-template-columns:1fr}.selected-item-multi{grid-template-columns:58px 1fr 90px}.admin-heading{flex-direction:column}}
.asset-thumbnail{width:120px;height:96px;display:block;object-fit:contain;background:#f7f7f3}.asset-preview-button{padding:0;border:1px solid #d7ded9;border-radius:8px;overflow:hidden;background:#fff;cursor:zoom-in}.asset-preview-dialog{max-width:min(900px,92vw);border:0;border-radius:14px;padding:24px;box-shadow:0 18px 60px rgba(0,0,0,.28)}.asset-preview-dialog::backdrop{background:rgba(0,0,0,.55)}.asset-preview-dialog img{display:block;max-width:82vw;max-height:72vh;object-fit:contain}.asset-preview-dialog p{text-align:center;font-size:20px;font-weight:600;margin:14px 0 0}.asset-preview-close{position:absolute;right:10px;top:8px;width:36px;height:36px;border:0;border-radius:50%;font-size:28px;line-height:1;background:#fff;cursor:pointer}.asset-row td{vertical-align:middle}.asset-row .asset-save{white-space:nowrap}
.selected-name-editor{min-width:0}.selected-name-editor .name-input{font-weight:600}.selected-name-editor .selected-id{margin-top:3px}
/* Fixed poster layouts selected only by product count: 1, 2-3, and 4-8. */
.poster-grid.layout-single{grid-template-columns:1fr;grid-template-rows:1fr;gap:0}
.layout-single .poster-product{grid-template-rows:1080px minmax(0,1fr);padding:28px 48px 34px;border-radius:36px}
.layout-single .poster-photo{top:34px;left:48px;width:calc(100% - 96px);max-width:calc(100% - 96px);height:1030px;max-height:1030px;padding:18px 30px}
.layout-single .poster-info{padding:34px 24px 0;gap:28px}
.layout-single .poster-name{height:150px;font-size:96px;line-height:1.1;--poster-name-min:48px}
.layout-single .poster-number{font-size:128px}.layout-single .poster-currency{font-size:48px}.layout-single .poster-unit{font-size:32px}

.poster-grid.layout-list{grid-template-columns:1fr;grid-template-rows:repeat(var(--poster-rows),minmax(0,1fr));gap:28px}
.layout-list .poster-product{grid-template-columns:46% minmax(0,54%);grid-template-rows:1fr;padding:24px 30px}
.layout-list .poster-photo{position:relative;top:auto;left:auto;grid-column:1;grid-row:1;width:100%;max-width:100%;height:100%;max-height:100%;padding:14px 28px}
.layout-list .poster-info{grid-column:2;grid-row:1;border-top:0;border-left:1px solid #dde0d7;padding:28px 12px 28px 34px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:28px}
.layout-list .poster-name{height:auto;max-height:130px;font-size:82px;line-height:1.12;--poster-name-min:42px}
.layout-list .poster-number{font-size:92px}.layout-list .poster-currency{font-size:36px}.layout-list .poster-unit{font-size:26px}

.poster-grid.layout-grid{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(var(--poster-rows),minmax(0,1fr))}
.layout-grid .poster-product{grid-template-rows:var(--grid-image-height) minmax(0,1fr)}
.layout-grid .poster-photo{height:var(--grid-image-height);max-height:var(--grid-image-height)}
.layout-grid .poster-name{font-size:var(--grid-name-size);--poster-name-min:var(--grid-name-min)}
.layout-grid .poster-product-wide{grid-column:1 / -1;grid-template-columns:46% minmax(0,54%);grid-template-rows:1fr;padding:18px 28px}
.layout-grid .poster-product-wide .poster-photo{position:relative;top:auto;left:auto;grid-column:1;grid-row:1;width:100%;max-width:100%;height:100%;max-height:100%;padding:8px 25px}
.layout-grid .poster-product-wide .poster-info{grid-column:2;grid-row:1;border-top:0;border-left:1px solid #dde0d7;padding:18px 12px 18px 30px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:16px}
.layout-grid .poster-product-wide .poster-name{height:auto;max-height:92px;font-size:58px;--poster-name-min:34px}
.layout-grid .poster-product-wide .poster-number{font-size:76px}.layout-grid .poster-product-wide .poster-currency{font-size:30px}.layout-grid .poster-product-wide .poster-unit{font-size:23px}

/* Green Guest Fresh brand system, rebuilt from the supplied reference without its watermark. */
.poster-canvas{padding:58px 72px 118px;color:#087957;background:#079586;font-family:"PingFang SC","Microsoft YaHei",sans-serif}
.poster-canvas:after{content:"";position:absolute;z-index:0;inset:34px 34px 82px;background:#fff;border-radius:2px;box-shadow:0 0 0 1px rgba(0,102,86,.08)}
.poster-header,.poster-grid,.poster-footer{position:relative;z-index:2}
.poster-topline{height:112px;align-items:center;padding:0 8px}
.poster-brand-logo{display:block;width:390px;height:130px;object-fit:contain;object-position:left center}
.poster-meta{display:flex;flex-direction:column;align-items:flex-end;gap:10px;color:#087957}
.poster-meta strong{font-size:30px;letter-spacing:3px}
.poster-date{border:1px solid #36a57b;background:#effaf4;color:#087957;font-size:19px;padding:9px 20px}
.poster-hero{margin-top:14px;padding:0 8px;align-items:end}
.poster-kicker{display:block;margin-bottom:5px;color:#39a66f;font-size:17px;font-weight:600;letter-spacing:5px}
.poster-hero h2{font-family:"PingFang SC","Microsoft YaHei",sans-serif;font-size:76px;line-height:1;font-weight:800;letter-spacing:7px;color:#07885f}
.poster-hero p{color:#559b7d;font-size:19px;font-weight:500}
.poster-rule{margin:22px 0 24px;background:#79c5a4}
.poster-rule span{background:#fff;color:#46a97c}
.poster-grid{height:1450px}
.poster-product{border-color:#b8dfc9;background:#fff;box-shadow:0 8px 22px rgba(0,112,87,.08)}
.poster-product:before{color:#38a678;font-weight:700}
.poster-info{border-color:#cbe8d6}.poster-name{color:#087957}
.poster-price{color:#ef6a2e}.poster-unit{color:#b45f36}
.poster-footer{z-index:3;bottom:72px;color:#207e63;font-weight:600}
.poster-waves{position:absolute;z-index:2;left:0;right:0;bottom:0;width:100%;height:170px;pointer-events:none}
.poster-waves .wave-light{fill:#79cf4b}.poster-waves .wave-dark{fill:#078f80}

/* The frame owns layout dimensions; the inner image always preserves its natural aspect ratio. */
.poster-grid{height:1360px}
.poster-product:before{display:none;content:none}
.poster-photo-frame{position:absolute;top:14px;left:20px;width:calc(100% - 40px);height:210px;padding:8px 12px 0;overflow:hidden}
.poster-photo-frame .poster-photo{position:static!important;display:block!important;top:auto!important;left:auto!important;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;padding:0!important;object-fit:contain!important;object-position:center center!important}
.layout-single .poster-photo-frame{top:34px;left:48px;width:calc(100% - 96px);height:1030px;padding:18px 30px}
.layout-list .poster-photo-frame{position:relative;top:auto;left:auto;grid-column:1;grid-row:1;width:100%;height:100%;padding:14px 28px}
.layout-grid .poster-photo-frame{height:var(--grid-image-height)}
.layout-grid .poster-product-wide .poster-photo-frame{position:relative;top:auto;left:auto;grid-column:1;grid-row:1;width:100%;height:100%;padding:8px 25px}
.poster-footer{left:58px;right:58px;bottom:28px;color:#fff;font-size:16px;font-weight:600;text-shadow:0 1px 2px rgba(0,83,72,.25)}

/* Export-safe layers: avoid pseudo-element and object-fit differences in html2canvas. */
.poster-canvas:after{display:none;content:none}
.poster-paper{position:absolute;z-index:0;inset:34px 34px 82px;background:#fff;border-radius:2px;box-shadow:0 0 0 1px rgba(0,102,86,.08)}
.poster-photo-frame{display:flex;align-items:center;justify-content:center;background:#fff}
.poster-photo-frame .poster-photo{width:auto!important;height:auto!important;max-width:100%!important;max-height:100%!important;object-fit:unset!important;flex:0 0 auto}
.poster-export-host{position:fixed;left:0;top:0;width:1080px;height:1920px;z-index:-9999;pointer-events:none;overflow:visible}
.poster-export-canvas{position:relative!important;left:0!important;top:0!important;transform:none!important;width:1080px!important;height:1920px!important}
.poster-product,.poster-info{background:#fff}
.poster-grid{height:1530px}
.poster-waves{z-index:1}
.selected-price-controls{display:grid;grid-template-columns:1fr;gap:6px}.quantity-input{text-align:center;padding-left:4px!important;padding-right:4px!important}
