:root{color-scheme:dark;--bg:#101619;--surface:#192125;--line:#303a3e;--text:#ecf0e9;--muted:#99a7a8;--accent:#d7ea90}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:15px/1.6 "Segoe UI","Microsoft YaHei",sans-serif}button,input,select,textarea{font:inherit}button,a.button{cursor:pointer;border:1px solid var(--line);border-radius:7px;background:var(--surface);color:var(--text);padding:8px 14px;text-decoration:none;display:inline-block}button:hover,a.button:hover{border-color:var(--accent)}button:disabled{opacity:.35;cursor:default}.primary{background:var(--accent)!important;color:#172011!important;border-color:var(--accent)!important;font-weight:600}a{color:var(--accent)}header{display:flex;justify-content:space-between;align-items:center;padding:22px 4vw;border-bottom:1px solid var(--line)}.brand{text-decoration:none;color:var(--text);font-size:26px;font-weight:800;letter-spacing:1px}.brand span{color:var(--accent)}.brand small{display:block;color:var(--muted);font-size:9px;letter-spacing:3px}nav{display:flex;gap:10px}main{max-width:1600px;margin:auto;padding:0 4vw 40px}.intro{display:flex;justify-content:space-between;align-items:center;gap:30px;padding:46px 0 32px}.eyebrow{font-size:10px;letter-spacing:2px;color:var(--accent);font-weight:700}h1{font-size:38px;letter-spacing:-1px;line-height:1.3;margin:10px 0}h2{line-height:1.4}.muted{color:var(--muted)}.intro p{margin-bottom:0}.stats{display:flex;gap:38px}.stats strong{display:block;font-size:32px;font-weight:500}.stats span{color:var(--muted);font-size:12px}.toolbar{display:flex;gap:14px;flex-wrap:wrap;padding:20px;background:var(--surface);border:1px solid var(--line);border-radius:10px;align-items:end}.toolbar label{font-size:12px;color:var(--muted)}input,select,textarea{background:#11191c;color:var(--text);border:1px solid #3b464a;border-radius:5px;padding:8px;display:block;max-width:100%}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:1px}.search{flex:1;min-width:180px}.search input{width:100%}.check{display:flex;align-items:center;gap:6px;padding-bottom:9px}.check input{accent-color:var(--accent)}.list-heading{display:flex;justify-content:space-between;margin:26px 0 16px;font-size:13px}.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:20px}.card{background:var(--surface);border:1px solid var(--line);border-radius:10px;overflow:hidden}.card-image{border:0;border-radius:0;padding:0;width:100%;height:190px;background:#252f32;display:flex;align-items:center;justify-content:center;color:var(--muted)}.card-image img{width:100%;height:100%;object-fit:cover}.card-body{padding:16px}.card h3{font-size:15px;line-height:1.5;margin:0 0 9px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:45px}.byline{font-size:12px;color:var(--muted);overflow-wrap:anywhere}.card-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:12px;font-size:12px;color:var(--muted)}.star{padding:3px 10px;font-size:20px}.star.active{color:var(--accent)}.empty{text-align:center;padding:65px 20px;border:1px dashed var(--line);border-radius:12px}.empty-icon{font-size:48px;color:var(--accent)}.empty p{color:var(--muted)}[hidden]{display:none!important}.pagination{display:flex;gap:20px;justify-content:center;align-items:center;margin-top:30px}dialog{background:var(--surface);color:var(--text);border:1px solid var(--line);border-radius:14px;max-width:min(900px,94vw);width:800px;max-height:90vh;padding:32px;overflow:auto}dialog::backdrop{background:#000b}.close{float:right;padding:0 10px;font-size:26px}.detail-image{width:100%;max-height:460px;object-fit:contain;background:#11191c;border-radius:6px}.description{white-space:pre-wrap;overflow-wrap:anywhere;font-size:14px}.tags{display:flex;flex-wrap:wrap;gap:6px;margin:15px 0}.tag{background:#283633;border-radius:4px;padding:2px 8px;color:var(--accent);font-size:12px}textarea{width:100%;min-height:90px}.detail-actions{display:flex;gap:10px;margin:20px 0}#error{background:#502b2c;padding:14px;border-radius:6px;margin-bottom:15px}#toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);background:var(--accent);color:#142015;padding:10px 22px;border-radius:6px;z-index:100}ol{padding-left:22px}li{margin-bottom:10px}@media(max-width:850px){.intro{display:block}.stats{margin-top:25px}h1{font-size:30px}header{align-items:flex-start}nav{flex-wrap:wrap;justify-content:flex-end;max-width:70%}nav button,nav a.button{font-size:12px}.toolbar{gap:10px}.toolbar>label:not(.check){flex:1;min-width:130px}.gallery{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}dialog{padding:20px}}
/* Management controls and consistent square close buttons. */
dialog{padding-top:76px}.close{position:absolute;top:18px;right:18px;float:none;width:44px;height:44px;min-width:44px;padding:0;display:grid;place-items:center;font-size:0;line-height:1}.close::before,.close::after{content:"";position:absolute;width:22px;height:2px;background:currentColor;border-radius:1px;transform:rotate(45deg)}.close::after{transform:rotate(-45deg)}.manage-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 20px;padding:12px 16px;border:1px solid var(--line);border-radius:8px}.manage-bar label{display:flex;align-items:center;gap:8px}.manage-bar .danger:last-child{margin-left:auto}.danger{color:#ffb6ae;border-color:#87534c}.card{position:relative}.card.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.card-select{position:absolute;top:10px;left:10px;z-index:1;display:flex;align-items:center;gap:6px;background:#101619eb;padding:5px 9px;border-radius:5px;cursor:pointer}.card-select input,.manage-bar input{width:18px;height:18px;accent-color:var(--accent);margin:0}#delete-confirm{width:540px}#delete-error{color:#ffb6ae}button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}@media(max-width:850px){dialog{padding-top:76px}}
.collector-panel{border:1px solid var(--line);border-radius:10px;padding:18px;margin-bottom:24px}.collector-panel summary{cursor:pointer;color:var(--accent);font-weight:600}.collector-panel input{width:145px}

#install-progress-panel{position:sticky;top:0;z-index:100;background:#192327;border-bottom:1px solid #586450;padding:10px 4vw;color:#e8eddf;box-shadow:0 3px 12px #0003}
#install-progress-panel>div:first-child{display:flex;gap:20px;justify-content:space-between;align-items:center}
#install-current{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
#install-count{white-space:nowrap;color:#d9e99b;font-size:13px}
#install-progress{display:block;width:100%;height:8px;margin:7px 0;accent-color:#d9e99b}
#install-status{font-size:13px;overflow-wrap:anywhere;max-height:3em;overflow:auto}
#install-home{scroll-margin-top:140px}#install-home h2{font-size:20px;margin-top:0}
.install-record{border-top:1px solid #394448;overflow-wrap:anywhere}#install-queue{max-height:200px;overflow:auto}#install-history{max-height:300px;overflow:auto}

#local-gallery details{margin:14px 0;overflow-wrap:anywhere}#local-gallery .card-image img{object-fit:contain}#local-gallery .card-body>.danger{margin-top:10px}
/* Shared image presentation, spacing and paging. */
.card{display:flex;flex-direction:column}.card-image{height:auto;min-height:100px;position:relative;flex-shrink:0;background:var(--surface);overflow:hidden}
.card-image img,#local-gallery .card-image img{display:block;width:100%;height:auto;object-fit:initial;mask-image:linear-gradient(to bottom,#000 calc(100% - 24px),transparent);-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 24px),transparent)}
.card-image img.portrait{mask-image:linear-gradient(to bottom,#000 calc(100% - 54px),transparent);-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 54px),transparent)}
.card-body{padding:16px 18px 18px;display:flex;flex-direction:column;gap:12px;flex:1}.card h3{margin:0;min-height:0}.card .byline{margin:0;line-height:1.6}.card-actions,.detail-actions{display:flex;flex-wrap:wrap;gap:10px}.card-foot{margin-top:auto;padding-top:4px}.card-actions button{padding:8px 12px}.gallery{align-items:start;gap:24px}
body:not(.editing) .card-select{display:none}.list-heading{align-items:center;gap:14px}.list-heading>button{margin-left:auto}
#detail{padding:0 0 28px}#detail-content> :not(.detail-image){margin-left:28px;margin-right:28px}#detail-content>h2{margin-top:22px;line-height:1.5}#detail .close{z-index:2;background:#192327d9;backdrop-filter:blur(8px)}
#detail .detail-image{display:block;width:100%;height:auto;max-height:none;object-fit:initial;background:transparent;border-radius:0;mask-image:linear-gradient(to bottom,#000 calc(100% - 40px),transparent);-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 40px),transparent)}
#detail .detail-image.portrait{mask-image:linear-gradient(to bottom,#000 calc(100% - 100px),transparent);-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 100px),transparent)}
#detail-content>label{display:block}#detail-content>p{line-height:1.8}
#install-progress-panel{display:flex;flex-direction:column;padding:12px 4vw;gap:5px}#install-progress{order:-1;height:14px;margin:0 0 4px}#install-progress-panel>div:first-child{font-size:13px}
.pagination{flex-wrap:wrap;gap:12px;margin:32px 0}.pagination label{display:flex;align-items:center;gap:8px}.pagination input{width:80px}.pagination select{min-width:72px}
@media(max-width:600px){#detail-content> :not(.detail-image){margin-left:18px;margin-right:18px}.card-body{padding:14px}.pagination{gap:8px}.list-heading{flex-wrap:wrap}}
/* Continuous columns keep the gap below every card identical. */
.gallery{display:block;columns:250px;column-gap:24px}
.gallery>.card{display:flex;width:100%;vertical-align:top;break-inside:avoid;page-break-inside:avoid;margin:0 0 24px}
.card-body{gap:12px;padding:16px}.card .byline{line-height:1.5}.card-foot{padding:0;margin:0;min-height:20px}
.card-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:0;padding-top:12px;border-top:1px solid var(--line);min-height:53px}
.icon-button,.card-actions .icon-button{display:inline-grid;place-items:center;flex:0 0 40px;width:40px;height:40px;min-width:40px;padding:0;border-radius:10px;line-height:1;font-size:0}
.icon-button svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.icon-button.star.active svg{fill:currentColor}
body:not(.editing) .edit-only{display:none!important}
#local-gallery .card-body>details{margin:0}#local-gallery .card-actions{margin-top:auto}
@media(max-width:850px){.gallery{columns:220px;column-gap:24px}}

/* Fixed column membership: image loading never rebalances other columns. */
.gallery{display:grid;columns:auto;gap:24px;align-items:start}.stable-column{display:flex;flex-direction:column;gap:24px;min-width:0}.stable-column>.card{width:100%;margin:0;flex:none}
