:root{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;color:#182230;background:#f5f7fa;font-size:14px;--blue:#8038ed;--line:#e1e6ef;--muted:#667085}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer;min-height:40px;border:1px solid var(--line);border-radius:8px;padding:9px 14px;background:#fff;color:inherit}button:disabled{cursor:default;opacity:.5}button:hover:not(:disabled){border-color:#bd9ae9}button:focus-visible,input:focus,select:focus,textarea:focus{outline:3px solid #8038ed2b;outline-offset:1px}.primary{background:var(--blue);color:white;border-color:var(--blue);font-weight:600}.quiet{background:transparent;border-color:transparent;color:var(--muted)}.danger{color:#b42318}.icon-button{width:44px;height:44px;padding:0;font-size:24px}input,select,textarea{width:100%;border:1px solid #d5dde9;border-radius:8px;background:white;color:inherit;padding:11px 12px;min-height:44px}textarea{min-height:130px;resize:vertical}label{display:block;font-weight:500;margin-bottom:18px}label input,label select,label textarea{margin-top:8px;font-weight:400}label small{display:block;font-weight:400;color:var(--muted);line-height:1.7;margin-top:6px}h1,h2,p{margin:0}h1{font-size:28px;letter-spacing:-.7px}h2{font-size:20px}p{line-height:1.7;color:var(--muted)}[hidden]{display:none!important}.brand-symbol{display:block;object-fit:cover;background:white;width:56px;height:42px;border-radius:8px;flex:none}.login{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:400px;max-width:100%;background:#fff;border:1px solid var(--line);border-radius:18px;padding:36px}.login-card h1{margin-top:24px;font-size:24px}.login-card p{margin:8px 0 28px}.login-card button{width:100%;min-height:46px}.error{color:#b42318;line-height:1.7;margin:8px 0 14px}.sidebar{width:220px;position:fixed;inset:0 auto 0 0;background:white;border-right:1px solid var(--line);padding:28px 16px;display:flex;flex-direction:column}.brand{color:inherit;text-decoration:none;display:flex;gap:8px;align-items:center;padding:0 4px 32px;font-weight:650;font-size:17px}.brand small{display:block;font-weight:400;font-size:12px;color:var(--muted);margin-top:3px}nav{display:flex;flex-direction:column;gap:6px}nav button{display:flex;text-align:left;align-items:center;border-color:transparent;background:transparent;min-height:46px;padding-left:16px;font-size:15px}nav button.active{background:#f3edff;color:#6826cf;font-weight:600}.sidebar-foot{margin-top:auto;padding:18px 10px 0;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:10px}.sidebar-foot span{font-size:13px;color:var(--muted)}main{margin-left:220px}.topbar{height:72px;display:flex;align-items:center;justify-content:space-between;padding:0 36px;background:white;border-bottom:1px solid var(--line)}.topbar select{max-width:270px;border:0;font-weight:600;font-size:15px}.topbar>span{color:var(--muted);font-size:13px}.page{padding:32px 36px 48px;max-width:1600px;margin:auto}.page-title{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:28px}.page-title p:first-child{font-size:12px;margin-bottom:6px}.page-title h1+p{margin-top:8px}.actions{display:flex;gap:10px;flex-shrink:0}.toolbar{display:flex;align-items:center;gap:12px;margin-bottom:20px}.toolbar .search{max-width:360px}.toolbar select{width:180px}.toolbar .count{margin-left:auto;color:var(--muted);white-space:nowrap}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:20px}.card{border:1px solid var(--line);background:white;border-radius:12px;overflow:hidden}.card-image{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;background:#eceef2;cursor:zoom-in}.card-info{padding:16px}.card-code{font-size:16px;font-weight:650;overflow-wrap:anywhere}.card-name{margin-top:5px;color:var(--muted);line-height:1.5}.card-meta{display:flex;justify-content:space-between;align-items:center;margin-top:14px;font-size:12px;color:var(--muted);gap:8px}.pill{display:inline-flex;padding:4px 7px;border-radius:5px;background:#f0f3f8;color:#526071;font-size:12px;white-space:nowrap}.pill.good{color:#067647;background:#eaf8ef}.pill.bad{color:#b42318;background:#fff0ed}.card-foot{border-top:1px solid var(--line);display:flex;padding:7px 12px;gap:8px;justify-content:space-between}.card-foot button{border:0;padding:6px 4px;color:var(--blue);background:transparent}.panel{border:1px solid var(--line);background:white;border-radius:12px;overflow:hidden}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%;min-width:650px;text-align:left}th{font-size:12px;color:var(--muted);background:#fafbfc;font-weight:500}td,th{padding:15px 20px;border-bottom:1px solid var(--line);white-space:nowrap}td .muted{display:block;font-size:12px;margin-top:5px}tr:last-child td{border-bottom:0}.muted{color:var(--muted)}.empty{padding:80px 24px;text-align:center;border:1px dashed #d5dde9;border-radius:12px}.empty h2{font-size:18px;margin-bottom:8px}.empty button{margin-top:22px}.notice{background:#f6f0ff;border:1px solid #e8d9ff;border-radius:10px;padding:14px 18px;color:#6935a6;line-height:1.7;margin-bottom:22px}.pager{margin-top:24px;display:flex;gap:14px;align-items:center;justify-content:flex-end;color:var(--muted)}dialog{width:580px;max-width:calc(100vw - 32px);max-height:90vh;border:1px solid var(--line);border-radius:16px;padding:0;box-shadow:0 24px 80px #18223033}dialog::backdrop{background:#18223066}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--line);position:sticky;top:0;background:white;z-index:1}#modal-body{padding:24px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-foot{display:flex;justify-content:flex-end;gap:12px;padding-top:8px}.check-label{display:flex;align-items:center;gap:10px;font-weight:400}.check-label input{width:18px;height:18px;min-height:18px;margin:0}.upload-zone{border:1px dashed #bcc8df;border-radius:10px;padding:18px;background:#fcf9ff;margin-bottom:20px}.upload-zone img{width:100%;height:180px;object-fit:contain;margin-top:12px}.full-image{width:100%;height:auto;display:block}.image-dialog{width:900px}.image-caption{margin-top:14px;color:var(--muted);line-height:1.7}.summary-row{display:flex;align-items:center;gap:14px;border-bottom:1px solid var(--line);padding:14px 0}.summary-row img{width:70px;height:54px;object-fit:cover;border-radius:7px}.summary-row strong{display:block}.summary-row small{color:var(--muted)}.result-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:20px}.result-grid img{width:100%;aspect-ratio:3/4;object-fit:contain;background:#f0f3f8;border-radius:8px}.result-state{padding:36px 12px;text-align:center;background:#f5f7fa;border-radius:8px;min-height:160px;display:grid;place-content:center}.result-grid h3{font-size:14px;margin:12px 0 6px}.result-grid p{font-size:12px}.token-box{display:block;padding:16px;background:#f5f7fa;border:1px solid var(--line);border-radius:8px;word-break:break-all;line-height:1.8;margin:18px 0;font-size:13px}#toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);padding:13px 22px;background:#182230;color:white;border-radius:10px;max-width:90vw;z-index:50}.section-title{font-size:18px;margin:28px 0 16px}.section-title:first-child{margin-top:0}.preview-table{max-height:280px;overflow:auto;margin:20px 0}.help{font-size:13px;line-height:1.8;color:var(--muted);margin:10px 0 18px}.checkbox-cell{min-width:50px}.loading{padding:64px;color:var(--muted);text-align:center}.wide-dialog{width:920px}.inline-warning{font-size:12px;color:#b42318}.menu-mobile{display:none}@media(min-width:1440px){.card-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(max-width:1000px){.sidebar{width:180px;padding:24px 12px}.brand{padding-left:6px;font-size:15px}main{margin-left:180px}.page{padding:24px}.topbar{padding:0 24px}.page-title{align-items:flex-start}.card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.actions{flex-wrap:wrap;justify-content:flex-end;max-width:220px}}@media(max-width:680px){.sidebar{position:static;width:100%;padding:14px 16px;border-bottom:1px solid var(--line)}.brand{padding:0 0 14px}.brand small{display:none}nav{flex-direction:row;overflow:auto}nav button{flex-shrink:0;min-height:44px;padding:8px 12px;font-size:14px}.sidebar-foot{display:none}main{margin:0}.topbar{height:58px;padding:0 16px}.page{padding:24px 16px}.page-title{display:block;margin-bottom:22px}.page-title h1{font-size:25px}.actions{margin-top:18px;justify-content:flex-start;max-width:none}.toolbar{flex-wrap:wrap;gap:10px}.toolbar .search{max-width:none;flex:1;min-width:160px}.toolbar select{width:130px}.toolbar .count{margin:0;width:100%}.card-grid{gap:12px;grid-template-columns:repeat(2,minmax(0,1fr))}.card-info{padding:12px}.card-code{font-size:14px}.card-meta{display:block}.card-meta .pill{margin-top:6px}.card-foot{padding:5px 10px}.card-foot button{font-size:13px;min-height:44px}.form-row{grid-template-columns:1fr;gap:0}#modal-body{padding:20px}.modal-head{padding:12px 20px}.result-grid{grid-template-columns:1fr}.login-card{padding:28px}}

button{min-height:44px}.mobile-logout{display:none}@media(max-width:680px){.mobile-logout{display:block}.topbar{gap:8px}.topbar #role-name{display:none}.card-foot{flex-wrap:wrap}.card-foot button{padding:8px 4px}}

.category-tabs{display:flex;gap:8px;overflow-x:auto;margin:0 0 20px;padding-bottom:4px}.category-tabs button{flex-shrink:0;min-height:44px;padding:8px 16px;border-color:transparent;background:transparent}.category-tabs button.active{background:#efe6ff;color:#6826cf;font-weight:600}.toolbar:has(+.category-tabs){margin-bottom:12px}

.category-tabs{flex-wrap:wrap;overflow:visible;gap:4px;margin-bottom:10px}.category-tabs button{padding:8px 12px}
.fabric-controls{position:sticky;top:0;z-index:3;background:#f5f7fa;padding:10px 0 8px;border-bottom:1px solid var(--line);margin-bottom:12px}
.fabric-controls .toolbar{flex-wrap:wrap;gap:8px;margin-bottom:8px}.fabric-controls .search{min-width:180px;flex:1}.fabric-controls .count{font-size:14px;width:auto;margin:0}
.view-switch{display:flex;gap:2px}.view-switch button{padding:8px 10px}.view-switch button[aria-pressed=true],.page-current{color:#6826cf;background:#efe6ff;border-color:#bbc9fa}
.fabric-pager{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:4px;margin:8px 0}.fabric-pager>span:first-child{margin-right:auto;color:var(--muted)}.fabric-pager button{min-width:44px;padding:8px}
.batch-bar{display:flex;align-items:center;flex-wrap:wrap;gap:8px;min-height:44px}.select-page,.item-check{display:flex;align-items:center;gap:6px;margin:0;font-weight:400;min-height:44px;cursor:pointer}.select-page input,.item-check input{width:18px;height:18px;min-height:0;margin:0;accent-color:var(--blue)}.item-check{width:44px;flex:none;justify-content:center}#selection-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap}#selection-actions button{padding:8px 10px}
.fabric-list{background:white;border:1px solid var(--line);border-radius:10px;overflow:hidden}.fabric-row{display:flex;align-items:center;gap:12px;padding:10px 14px 10px 0;border-bottom:1px solid var(--line);min-height:88px}.fabric-row:last-child{border-bottom:0}.fabric-row>img{width:64px;height:56px;object-fit:cover;border-radius:6px;cursor:pointer;flex:none}.row-copy{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.row-copy strong{font-size:15px;overflow-wrap:anywhere}.row-copy span,.row-copy small{font-size:14px;color:var(--muted)}.row-selected{background:#f6f0ff}.selectable-card{position:relative}.selectable-card .item-check{position:absolute;top:8px;left:8px;border-radius:8px;background:#ffffffed;z-index:1}
#map-filenames{align-self:center} @media(max-width:680px){.fabric-row{gap:8px;padding-right:8px}.fabric-row>img{width:48px;height:48px}.fabric-controls .search{width:100%;flex-basis:100%}.fabric-controls .count{margin-right:auto}.fabric-controls{position:relative}.row-copy small{line-height:1.4}}

.finished-open{display:block;width:100%;padding:0;border:0;background:#f8f6fb}.finished-image{object-fit:contain!important;height:280px}.finished-detail{max-height:65vh;object-fit:contain}.gallery-check{padding:10px 16px;display:flex;align-items:center;gap:8px;min-height:44px}.gallery-more summary{cursor:pointer;padding:14px;font-weight:600}.gallery-more .toolbar{flex-wrap:wrap}

.gallery-check input{width:20px;height:20px;min-height:20px;margin:0}.finished-image{aspect-ratio:3/4;height:auto;max-height:360px}.finished-open{border-radius:0}

/* The fabric library leads with identifiers, not photography. */
.fabric-row .row-copy{order:1}.fabric-row .material-thumb{order:2}.fabric-row>[data-edit-fabric]{order:3}
.fabric-row .row-copy strong{font-size:17px}.fabric-row .row-copy span{line-height:1.5}
.material-thumb{width:48px;height:48px;min-width:48px;flex:none;padding:0;border:1px solid var(--line);border-radius:7px;overflow:hidden;background:#f1f3f6}
.material-thumb img{width:100%;height:100%;display:block;object-fit:cover}
.material-admin-card{display:grid;grid-template-columns:1fr 48px;column-gap:12px;align-items:center;padding:16px}
.material-admin-card .item-check{position:static;grid-column:1/-1;justify-self:start;margin:0 0 8px;padding:0;min-height:44px}
.material-admin-card>.card-image{grid-column:2;grid-row:2;width:48px;height:48px;aspect-ratio:auto;border-radius:7px;border:1px solid var(--line)}
.material-admin-card>.card-info{grid-column:1;grid-row:2;padding:0;min-width:0}
.material-admin-card .card-code{font-size:17px;overflow-wrap:anywhere}.material-admin-card .card-meta{flex-wrap:wrap}
.material-admin-card>.card-foot{grid-column:1/-1;margin-top:12px;padding:10px 0 0;gap:8px;flex-wrap:wrap}
.summary-row img{width:40px;height:40px}.summary-row strong{font-size:16px}
