:root{--bg:#121212;--panel:#1c1c1c;--line:#2c2c2c;--text:#ececec;--muted:#9a9a9a;--accent:#e8a959;--pink:#ff0084;--blue:#0063dc;--gap:4px;color-scheme:dark;font:15px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;color:var(--text);background:var(--bg)}
*{box-sizing:border-box}body{margin:0;min-height:100vh}a{color:inherit;text-decoration:none}button,input,textarea{font:inherit;color:inherit}button{cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.bar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:22px;padding:0 20px;height:56px;background:rgba(18,18,18,.92);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:1.05rem;white-space:nowrap}
.dots{display:inline-flex}.dots i{width:12px;height:12px;border-radius:50%;background:var(--blue)}.dots i+i{background:var(--pink);margin-left:-2px}
.nav{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}.nav::-webkit-scrollbar{display:none}
.nav a{padding:7px 11px;border-radius:6px;color:var(--muted);white-space:nowrap;font-weight:500}.nav a:hover{color:var(--text);background:#1f1f1f}.nav a.on{color:var(--text);background:#262626}
.nav b{font-weight:600;color:var(--accent);font-size:.8rem;margin-left:2px}
.search{margin-left:auto}.search input{width:260px;background:#1f1f1f;border:1px solid var(--line);border-radius:6px;padding:7px 11px;outline:none}.search input:focus{border-color:#555}
main{padding:20px 20px 60px;max-width:1920px;margin:0 auto;outline:none}
.loading,.empty{color:var(--muted);padding:40px 0;text-align:center}
.head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin:6px 0 18px}
.head h1{margin:0;font-size:1.7rem;font-weight:700;letter-spacing:-.01em}.head p{margin:4px 0 0;color:var(--muted)}
.head .actions{display:flex;gap:8px;flex-wrap:wrap}
.btn{background:#262626;border:1px solid #333;border-radius:6px;padding:7px 12px;font-weight:600;font-size:.85rem}.btn:hover{background:#303030}.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}
.chips{display:flex;flex-wrap:wrap;gap:6px}.chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;background:#242424;border:1px solid #333;color:#cfcfcf;font-size:.8rem}.chip:hover{border-color:#555;color:#fff}.chip img{width:20px;height:20px;border-radius:50%;margin-left:-6px}
.section{margin:26px 0 8px;display:flex;align-items:baseline;gap:12px}.section h2{margin:0;font-size:1.05rem;font-weight:650}.section a:hover h2{text-decoration:underline}.section span{color:var(--muted);font-size:.85rem}
.justified{width:100%}.row{display:flex;gap:var(--gap);margin-bottom:var(--gap);content-visibility:auto;contain-intrinsic-size:auto 240px}
.tile{position:relative;display:block;flex:none;overflow:hidden;background:#222}.tile img{display:block;width:100%;height:100%;object-fit:cover;transition:opacity .25s}.tile img[data-loading]{opacity:0}
.tile .meta{position:absolute;inset:auto 0 0 0;padding:22px 8px 6px;background:linear-gradient(transparent,rgba(0,0,0,.7));font-size:.75rem;opacity:0;transition:opacity .15s;display:flex;justify-content:space-between;gap:6px;white-space:nowrap}
.tile:hover .meta,.tile:focus-visible .meta{opacity:1}.tile .dot{position:absolute;top:7px;right:7px;width:9px;height:9px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px rgba(0,0,0,.4)}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:18px}
.card{display:block}.card .cover{aspect-ratio:4/3;border-radius:4px;overflow:hidden;background:#222}.card .cover img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .3s}.card:hover .cover img{transform:scale(1.03)}
.card h3{margin:8px 0 1px;font-size:.95rem;font-weight:600}.card p{margin:0;color:var(--muted);font-size:.82rem}
.faces{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:22px 14px}
.face{text-align:center}.face img{width:100%;aspect-ratio:1;border-radius:50%;object-fit:cover;background:#222;display:block;transition:transform .2s}.face:hover img{transform:scale(1.04)}.face b{display:block;margin-top:8px;font-weight:600}.face small{color:var(--muted)}
.person-head{display:flex;gap:18px;align-items:center}.person-head img{width:96px;height:96px;border-radius:50%;object-fit:cover}
.name-form{display:flex;gap:8px;margin-top:8px}.name-form input{background:#1f1f1f;border:1px solid var(--line);border-radius:6px;padding:6px 10px;width:220px}
.note{color:var(--muted);font-size:.82rem;margin:0 0 16px;max-width:760px}
.tagcloud{display:flex;flex-wrap:wrap;gap:8px}.tagcloud .chip{font-size:.9rem;padding:5px 12px}.tagcloud small{color:var(--muted)}
/* lightbox */
.lightbox{position:fixed;inset:0;z-index:50;background:#000;display:grid;grid-template-columns:1fr 360px}
.lightbox[hidden]{display:none}
.stage{position:relative;display:flex;align-items:center;justify-content:center;min-width:0;min-height:0;user-select:none;padding:52px 68px 24px}
.stage figure{position:relative;margin:0;max-width:100%;max-height:100%;display:flex}
.stage img{width:auto;height:auto;max-width:calc(100vw - 360px - 136px);max-height:calc(100vh - 76px);display:block;background:var(--c,#111)}
.stage .boxes{position:absolute;inset:0;pointer-events:none}.stage .boxes a{position:absolute;border:2px solid rgba(255,255,255,.85);border-radius:4px;box-shadow:0 0 0 1px rgba(0,0,0,.4);pointer-events:auto}
.stage .boxes a span{position:absolute;top:100%;left:-2px;margin-top:3px;background:rgba(0,0,0,.75);font-size:.72rem;padding:1px 6px;border-radius:3px;white-space:nowrap}
.stage .boxes a.unknown{border-style:dashed;border-color:rgba(255,255,255,.4)}
.navbtn{position:absolute;top:50%;transform:translateY(-50%);width:52px;height:86px;border:0;background:rgba(255,255,255,.04);font-size:1.8rem;color:#ddd;border-radius:6px}.navbtn:hover{background:rgba(255,255,255,.12)}.navbtn[disabled]{visibility:hidden}.prev{left:8px}.next{right:8px}
.close{position:absolute;top:10px;left:12px;border:0;background:rgba(255,255,255,.08);border-radius:6px;padding:6px 12px;font-weight:600;z-index:2}.close:hover{background:rgba(255,255,255,.18)}
.counter{position:absolute;top:14px;right:16px;color:#aaa;font-size:.82rem}
.info{background:var(--panel);border-left:1px solid var(--line);overflow-y:auto;padding:22px 20px 30px;display:flex;flex-direction:column;gap:16px}
.info h2{margin:0;font-size:1.15rem;overflow-wrap:anywhere}.info .sub{color:var(--muted);font-size:.85rem;margin-top:2px}
.info dl{display:grid;grid-template-columns:auto 1fr;gap:5px 12px;margin:0;font-size:.85rem}.info dt{color:var(--muted)}.info dd{margin:0;overflow-wrap:anywhere}
.info h3{margin:0 0 7px;font-size:.72rem;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);font-weight:700}
.info textarea{width:100%;min-height:150px;resize:vertical;background:#141414;border:1px solid #333;border-radius:6px;padding:10px 12px;line-height:1.5}
.info textarea:focus{border-color:#666;outline:none}.saved{font-size:.75rem;color:var(--muted);margin-top:5px}.saved.err{color:#ff6b6b}
.info .dl{display:flex;flex-wrap:wrap;gap:8px}.caption{font-size:.88rem;color:#cfcfcf;margin:0}.caption small{display:block;color:var(--muted);font-size:.72rem;margin-top:3px}
.toggle{display:flex;align-items:center;gap:7px;font-size:.82rem;color:#cfcfcf}
@media (max-width:900px){
  .lightbox{grid-template-columns:1fr;grid-template-rows:auto 1fr;overflow-y:auto}
  .stage{min-height:62vh;padding:48px 0 8px}.stage img{max-width:100vw;max-height:60vh}
  .navbtn{width:40px;height:64px;font-size:1.4rem;background:rgba(0,0,0,.35)}.prev{left:2px}.next{right:2px}
  .info{border-left:0;border-top:1px solid var(--line)}
}
@media (max-width:760px){
  .bar{flex-wrap:wrap;height:auto;padding:10px 12px 0;gap:8px 12px}.brand{font-size:1rem}
  .search{order:2;margin-left:auto}.search input{width:150px;padding:5px 9px}
  .nav{order:3;width:100%;padding-bottom:6px}
  main{padding:14px 8px 50px}.head h1{font-size:1.35rem}.cards{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}
  .faces{grid-template-columns:repeat(auto-fill,minmax(92px,1fr))}.tile .meta{display:none}
}
