:root{--paper:#f6f5f1;--ink:#292c28;--muted:#71736b;--line:#dcddd5;--dark:#2d3429;font-family:Inter,"Helvetica Neue","PingFang SC","Microsoft YaHei",sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none}
*{box-sizing:border-box}body{margin:0;min-width:800px}h1,h2,h3,p{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer;color:inherit;border:0}button:disabled{opacity:.5;cursor:wait}button,input,textarea{transition:background-color .15s,border-color .15s}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,canvas:focus-visible{outline:2px solid #657749;outline-offset:4px}a{color:inherit;text-decoration:none}svg{display:block;width:20px;height:20px}button svg{pointer-events:none}[hidden]{display:none!important}
.header{height:68px;padding:0 32px;display:flex;align-items:center;justify-content:space-between}.header h1{font-size:16px;letter-spacing:.3px;font-weight:550}.manage-button{background:transparent;border:1px solid #d2d5ca;border-radius:4px;padding:8px 13px;font-size:12px;color:#606951}.manage-button:hover{background:#e7ebdf}
main{padding:0 32px 32px}.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:22px}.work-card{display:block;width:100%;min-width:0;padding:0;background:transparent;text-align:left;border-radius:5px}.card-image{aspect-ratio:1;position:relative;overflow:hidden;border-radius:5px;background:#e7e9e1}.card-image>img,.card-preview img{display:block;width:100%;height:100%;object-fit:cover}.card-preview{position:absolute;inset:0}.card-title{display:block;font-size:12px;font-weight:500;padding:11px 2px 0;overflow-wrap:anywhere;color:#555e4b}.demo-label{position:absolute;top:12px;left:12px;font-size:10px;line-height:1.3;color:#5e6556;background:#ffffffad;border-radius:3px;padding:4px 7px}.card-expand{position:absolute;bottom:12px;right:12px;height:28px;width:28px;display:grid;place-items:center;background:#ffffffbd;border-radius:50%;opacity:0;transition:opacity .15s}.work-card:hover .card-expand,.work-card:focus-visible .card-expand{opacity:1}.loading-state,.empty-state{grid-column:1/-1;padding:110px 20px;text-align:center;font-size:13px;color:var(--muted)}.empty-state button{display:block;margin:20px auto 0;padding:10px 18px;border-radius:4px;background:var(--dark);color:white}.skip-link{position:fixed;left:20px;top:-100px;z-index:30;background:var(--dark);color:white;padding:12px}.skip-link:focus{top:10px}
dialog{padding:0;border:1px solid var(--line);border-radius:7px;color:var(--ink);background:var(--paper);max-height:90vh}dialog::backdrop{background:#252c22aa;backdrop-filter:blur(5px)}.viewer-dialog{position:fixed;inset:0;margin:0;width:100vw;height:100dvh;max-width:none;max-height:none;border:0;border-radius:0;overflow:hidden;outline:none}.viewer-main{position:relative;width:100%;height:100%;background:#e9ece3;overflow:hidden}.viewer-main:fullscreen{width:100vw;height:100dvh}.viewer-stage{position:absolute;inset:0}.viewer-stage canvas{display:block;width:100%;height:100%;cursor:grab}.viewer-stage canvas:active{cursor:grabbing}.viewer-top{position:absolute;top:24px;left:28px;right:24px;display:flex;align-items:center;justify-content:space-between;gap:20px;pointer-events:none}.viewer-top h2{font-size:14px;font-weight:500;color:#4a5540;padding:10px 12px;background:#f7f8f1b3;border-radius:4px;max-width:calc(100% - 70px);overflow-wrap:anywhere}.icon-button{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:38px;height:38px;background:#f6f8f1c9;border:1px solid #bcc5b1;border-radius:5px;pointer-events:auto}.icon-button:hover,.control-button:hover{background:#d9e2cc}.viewer-previous,.viewer-next{position:absolute;top:50%;transform:translateY(-50%);font-size:18px}.viewer-previous{left:24px}.viewer-next{right:24px}.viewer-bottom{position:absolute;bottom:24px;left:28px;right:24px;display:flex;align-items:center;justify-content:space-between;gap:15px;pointer-events:none}.viewer-bottom>span{color:#67715c;font-size:11px;letter-spacing:.2px}.control-button{border:1px solid #bcc5b1;background:#f6f8f1c9;border-radius:4px;padding:10px 13px;font-size:12px;pointer-events:auto}.viewer-status{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:13px;color:#5e6b4e;pointer-events:none;text-align:center;max-width:70%;background:#f4f6eee6;padding:15px 20px;border-radius:5px}.viewer-status:empty{display:none}.preview-error{position:absolute;inset:0;display:grid;place-content:center;text-align:center;color:#647156;font-size:12px;padding:24px}.eyebrow{font-size:10px;letter-spacing:1.5px;color:var(--muted)}
.admin-dialog{width:780px;max-width:90vw}.admin-header{display:flex;justify-content:space-between;align-items:center;padding:27px 32px 24px;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:2;background:var(--paper)}.admin-header h2{font-size:23px;font-weight:550;margin-top:4px}.admin-header .eyebrow{font-size:8px;color:var(--muted)}#admin-body{padding:26px 32px 32px}.login-intro{font-size:13px;color:var(--muted);margin-bottom:22px;line-height:1.8}.form-field{display:flex;flex-direction:column;gap:8px;font-size:12px;margin-bottom:20px;min-width:0}.form-field label{font-weight:550}.form-field input,.form-field textarea,.form-field select{width:100%;border:1px solid #cbd0c1;border-radius:4px;padding:11px 13px;background:#fcfcf8;color:var(--ink);font-size:12px}.form-field textarea{resize:vertical;min-height:85px;line-height:1.7}.form-field small{font-size:10px;line-height:1.7;color:var(--muted);font-weight:400}.form-field input[type=file]{padding:12px;cursor:pointer;background:#edf0e5;border-style:dashed}.form-field input::file-selector-button{font:inherit;border:0;background:#d6dfc9;border-radius:3px;padding:7px 10px;margin-right:12px;cursor:pointer}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:18px}.submit-button{border:1px solid var(--dark);background:var(--dark);color:#fff;padding:12px 22px;border-radius:4px;font-size:12px;display:inline-flex;align-items:center;gap:10px;justify-content:center}.submit-button:hover{background:#4c5d3b}.form-error{font-size:12px;color:#a53225;line-height:1.8;margin-bottom:15px;white-space:pre-line}.form-error:empty{display:none}.admin-tabs{display:flex;gap:6px;align-items:center;border-bottom:1px solid var(--line);padding-bottom:16px;margin-bottom:23px}.admin-tabs button{font-size:12px;background:none;padding:9px 13px;border-radius:3px;color:#667257}.admin-tabs button.active{background:#e0e8d2;color:#354329}.admin-tabs .logout{margin-left:auto;font-size:10px;padding-right:0;color:var(--muted)}.upload-intro{font-size:11px;color:var(--muted);line-height:1.9;margin-bottom:22px}.admin-work{display:flex;align-items:center;gap:15px;padding:16px 0;border-bottom:1px solid var(--line)}.admin-work-icon{height:42px;width:42px;background:#e1e7d6;display:grid;place-items:center;border-radius:4px;flex-shrink:0;color:#63784b}.admin-work-details{flex:1;min-width:0}.admin-work-details strong{display:block;font-size:13px;font-weight:550;overflow-wrap:anywhere}.admin-work-details small{font-size:10px;color:var(--muted);display:block;margin-top:6px}.admin-work button{font-size:11px;background:none;border:1px solid #c9d0bd;padding:7px 10px;border-radius:3px}.admin-work button.delete{color:#a53225;border-color:#dfc2bb}.admin-empty{padding:30px 0;color:var(--muted);font-size:12px;line-height:1.9}.settings-checkbox{display:flex;align-items:center;gap:9px;font-size:12px;margin:5px 0 25px}.settings-checkbox input{accent-color:#526c37;width:16px;height:16px}.form-actions{display:flex;gap:12px;align-items:center}.upload-progress{height:3px;background:#dce3d1;border-radius:3px;overflow:hidden;margin:12px 0}.upload-progress>div{height:100%;background:#526b37;transition:width .2s}
.toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,12px);z-index:30;background:#303c26;color:#f5f7ee;padding:12px 22px;border-radius:5px;font-size:12px;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s}.toast.show{opacity:1;transform:translate(-50%,0)}body:has(dialog[open]){overflow:hidden}
@media(min-width:1800px){.gallery{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}}
@media(max-width:1100px){.header{padding-inline:24px}main{padding:0 24px 24px}.gallery{gap:18px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
