:root{--cork-1:#e8dcc0;--cork-2:#ddcfac;--cork-3:#f0e5cb;--cork-shadow:#3c28142e;--paper:#fff;--paper-2:#f7f3ea;--paper-edge:#785a322e;--ink:#2a2218;--ink-soft:#5a4528;--ink-faint:#8a7150;--tape:#f7e6a8c7;--tape-edge:#b4965059;--pin-red:#c2362f;--pin-red-2:#8d2520;--pin-blue:#2e548f;--pin-yellow:#d6a418;--pin-green:#4a7a3e;--accent:#b8401a;--danger:#a02922;--f-title:var(--font-special-elite), "Courier New", monospace;--f-hand:var(--font-caveat), cursive;--f-body:var(--font-sora), system-ui, sans-serif;--r-sm:2px;--r-md:4px;--r-lg:8px;--density-pad:22px;--density-gap:28px}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{min-height:100vh;font-family:var(--f-body);color:var(--ink);overscroll-behavior-y:none;margin:0;padding:0}body{background-color:var(--cork-1);background-image:radial-gradient(circle at 1px 1px,#50371424 1px,#0000 0);background-size:10px 10px}.app-root{justify-content:center;min-height:100vh;display:flex}.app-shell{flex-direction:column;width:100%;max-width:1180px;min-height:100vh;padding:0;display:flex;position:relative}.topbar{z-index:20;-webkit-backdrop-filter:blur(8px);background:linear-gradient(#e8dcc0a6 0%,#e8dcc000 100%);justify-content:space-between;align-items:flex-end;padding:18px 18px 14px;display:flex;position:sticky;top:0}.tb-title{font-family:var(--f-title);letter-spacing:.02em;color:#2a1d10;text-shadow:0 1px #fff0c840;align-items:baseline;gap:10px;margin:0;font-size:30px;line-height:1;display:flex}.tb-title .sub{font-family:var(--f-hand);color:#2a1d10b3;font-size:20px;font-weight:600;transform:rotate(-3deg)translateY(-2px)}.tb-actions{gap:6px;display:flex}.icon-btn{-webkit-appearance:none;appearance:none;color:var(--ink);cursor:pointer;background:#fbf5e399;border:1px solid #5032142e;border-radius:50%;justify-content:center;align-items:center;width:36px;height:36px;font-size:16px;text-decoration:none;transition:transform .12s,background .12s;display:inline-flex;box-shadow:inset 0 1px #fff6,0 2px 4px #0000001f}.icon-btn:hover{background:#fbf5e3d9}.icon-btn:active{transform:scale(.94)}.icon-btn.is-active{background:var(--ink);color:var(--paper);border-color:var(--ink)}.tab-strip{gap:8px;padding:0 18px 8px;display:flex}.tab{-webkit-appearance:none;appearance:none;font-family:var(--f-body);color:var(--ink-soft);cursor:pointer;letter-spacing:.01em;background:#fbf5e399;border:1px solid #5032142e;border-radius:999px;padding:7px 14px;font-size:13px;font-weight:600}.tab.is-active{background:var(--ink);color:var(--paper);border-color:var(--ink)}.tab .count{opacity:.65;margin-left:4px;font-weight:400}.feed{gap:var(--density-gap);padding:8px var(--density-pad) 140px;grid-template-columns:1fr;align-items:start;display:grid}.feed .masonry-cols{gap:calc(var(--density-gap) * .7);align-items:start;display:flex}.feed .masonry-col{gap:var(--density-gap);flex-direction:column;flex:1;min-width:0;display:flex}.feed .card-title h3,.feed .card-meta{font-size:14px}.feed .card.featured .card-title h3{font-size:17px}@media (max-width:380px){.feed .masonry-cols{flex-direction:column}}.card{background:var(--paper);border-radius:var(--r-md);box-shadow:0 1px 0 #ffffff80 inset, 0 0 0 .5px var(--paper-edge), 0 12px 24px -8px var(--cork-shadow), 0 6px 8px -4px #26160840;transform-origin:top;background-image:radial-gradient(circle at 20% 30%,#b48c3c0d 0 1px,#0000 2px),radial-gradient(circle at 78% 70%,#b48c3c0a 0 1px,#0000 2px),linear-gradient(#fff0 0%,#b48c3c0a 100%);background-size:14px 14px,18px 18px,auto;padding:14px 14px 16px;transition:transform .18s,box-shadow .18s;position:relative}.card.featured{box-shadow:0 0 0 .5px var(--paper-edge), 0 0 0 3px #c2362f00, 0 18px 30px -10px var(--cork-shadow), 0 8px 10px -4px #2616084d}.card:active{transform:scale(.985)}.pin{background:radial-gradient(circle at 35% 30%, #ff6056 0%, var(--pin-red) 55%, var(--pin-red-2) 100%);z-index:2;border-radius:50%;width:22px;height:22px;position:absolute;top:-10px;left:50%;transform:translate(-50%);box-shadow:inset 0 1px #fff6,0 2px 4px #0006,0 0 0 2px #00000014}.pin.blue{background:radial-gradient(circle at 35% 30%, #5d8edc 0%, var(--pin-blue) 55%, #1d3d6e 100%)}.pin.yellow{background:radial-gradient(circle at 35% 30%, #ffd560 0%, var(--pin-yellow) 55%, #9c7715 100%)}.pin.green{background:radial-gradient(circle at 35% 30%, #82b572 0%, var(--pin-green) 55%, #2f5028 100%)}.tape{background:var(--tape);border-left:1px dashed var(--tape-edge);border-right:1px dashed var(--tape-edge);z-index:2;width:86px;height:24px;position:absolute;top:-14px;box-shadow:0 2px 4px #00000026}.tape.tl{left:-8px;transform:rotate(-22deg)}.tape.tr{right:-8px;transform:rotate(22deg)}.tape.tc{left:50%;transform:translate(-50%)rotate(-3deg)}.card-img-wrap{border-radius:var(--r-sm);background:var(--paper-2);cursor:zoom-in;border:0;width:100%;padding:0;display:block;position:relative;overflow:hidden;box-shadow:inset 0 0 0 1px #50321414}.card-img-wrap img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;width:100%;height:auto;display:block}.card-img-empty{min-height:160px;color:var(--ink-faint);font-family:var(--f-hand);background:var(--paper-2);justify-content:center;align-items:center;font-size:18px;display:flex}.card-img-count{color:#fffbe6;font-family:var(--f-body);letter-spacing:.02em;pointer-events:none;background:#140e06c7;border-radius:999px;align-items:center;gap:4px;padding:3px 7px;font-size:11px;font-weight:600;display:inline-flex;position:absolute;bottom:6px;right:6px;box-shadow:0 1px 3px #0000004d}.card-title{justify-content:space-between;align-items:flex-start;gap:8px;margin-top:12px;display:flex}.card-title h3{font-family:var(--f-title);color:var(--ink);letter-spacing:.005em;flex:1;margin:0;font-size:16px;font-weight:400;line-height:1.25}.card-meta{font-family:var(--f-hand);color:var(--ink-faint);white-space:nowrap;margin-top:2px;font-size:16px}.card-admin{z-index:3;gap:4px;display:flex;position:absolute;top:6px;right:6px}.chip-btn{-webkit-appearance:none;appearance:none;color:var(--ink);cursor:pointer;background:#fbf5e3eb;border:1px solid #5032142e;border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-size:13px;display:inline-flex;box-shadow:0 2px 4px #00000026}.chip-btn:active{transform:scale(.92)}.chip-btn:disabled{opacity:.4;cursor:not-allowed}.chip-btn.danger{color:var(--danger)}.chip-btn.featured{background:var(--pin-yellow);color:#4a3a08;border-color:#0003}.chip-btn.drag-handle{cursor:grab;touch-action:none;color:var(--ink-soft)}.chip-btn.drag-handle:active,.card.is-dragging{cursor:grabbing}.fbadge{background:var(--pin-red);color:#fffbe6;font-family:var(--f-title);letter-spacing:.12em;text-transform:uppercase;z-index:2;border-radius:1px;padding:4px 8px 3px;font-size:10px;position:absolute;top:8px;left:-8px;transform:rotate(-4deg);box-shadow:0 2px 4px #00000040}.fbadge:before{content:"";border-style:solid;border-width:4px 4px 0 0;border-color:var(--pin-red-2) transparent transparent transparent;position:absolute;bottom:-4px;left:0}.card.archived{opacity:.65;filter:saturate(.7)}.card.archived .card-img-wrap{filter:grayscale(.4)}.arch-stamp{font-family:var(--f-title);color:#a0292280;letter-spacing:.1em;pointer-events:none;z-index:4;background:#fbf5e326;border:4px double #a0292280;padding:4px 14px;font-size:38px;position:absolute;top:40%;left:50%;transform:translate(-50%,-50%)rotate(-12deg)}.empty{text-align:center;font-family:var(--f-hand);color:#2a1d108c;white-space:pre-line;grid-column:1/-1;padding:60px 24px;font-size:22px}.fab{background:var(--ink);width:60px;height:60px;color:var(--paper);border:2px solid var(--paper);cursor:pointer;z-index:30;border-radius:50%;justify-content:center;align-items:center;font-size:30px;line-height:1;transition:transform .15s;display:inline-flex;position:fixed;bottom:22px;right:22px;box-shadow:0 6px 20px #00000059,inset 0 1px #fff3}.fab:hover{transform:scale(1.05)}.fab:active{transform:scale(.96)}@media (max-width:540px){.app-root{justify-content:stretch}.fab{bottom:24px;right:18px}}.modal-backdrop{-webkit-backdrop-filter:blur(6px);z-index:100;background:#140c04b3;justify-content:center;align-items:center;padding:20px;animation:.18s fadein;display:flex;position:fixed;inset:0}@keyframes fadein{0%{opacity:0}to{opacity:1}}.modal{background:var(--paper);border-radius:6px;width:100%;max-width:380px;padding:24px;animation:.22s cubic-bezier(.2,.8,.2,1) rise;position:relative;box-shadow:0 20px 60px #00000080}@keyframes rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}.modal h2{font-family:var(--f-title);margin:0 0 6px;font-size:22px;font-weight:400}.modal p.sub{color:var(--ink-soft);margin:0 0 18px;font-size:13px}.modal label{color:var(--ink-soft);text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px;font-size:12px;font-weight:600;display:block}.modal input[type=text],.modal input[type=password],.modal input[type=email],.modal textarea{width:100%;font-family:var(--f-body);color:var(--ink);background:#fff9;border:1px solid #50321440;border-radius:4px;margin-bottom:12px;padding:10px 12px;font-size:14px}.modal input:focus,.modal textarea:focus{border-color:var(--ink);outline:none}.modal textarea{resize:vertical;min-height:60px}.btn{-webkit-appearance:none;appearance:none;font-family:var(--f-body);cursor:pointer;letter-spacing:.01em;border:0;border-radius:4px;padding:10px 16px;font-size:14px;font-weight:600}.btn-primary{background:var(--ink);color:var(--paper)}.btn-primary:hover{background:#000}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-ghost{color:var(--ink-soft);background:0 0}.btn-ghost:hover{color:var(--ink)}.btn-danger{background:var(--danger);color:#fff}.btn-row{justify-content:flex-end;gap:8px;margin-top:8px;display:flex}.err{color:var(--danger);margin:-4px 0 10px;font-size:12px;font-weight:500}.dropzone{text-align:center;cursor:pointer;background:#ffffff4d;border:2px dashed #5032144d;border-radius:6px;margin-bottom:14px;padding:28px 14px;transition:background .12s}.img-grid{grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px;margin-bottom:14px;display:grid}.img-grid-cell{aspect-ratio:1;background:var(--paper-2);border:1px solid #50321426;border-radius:4px;position:relative;overflow:hidden}.img-grid-cell img{object-fit:cover;width:100%;height:100%;display:block}.img-grid-cell.pending{border-style:dashed;border-color:#50321459}.img-grid-cell.sortable{touch-action:none}.img-grid-cell.is-dragging{box-shadow:0 8px 20px #00000040}.img-grid-main,.img-grid-pending{font-family:var(--f-body);letter-spacing:.06em;text-transform:uppercase;border-radius:2px;padding:3px 6px;font-size:9px;font-weight:700;position:absolute;bottom:4px;left:4px}.img-grid-main{background:var(--pin-yellow);color:#4a3a08}.img-grid-pending{color:#e8f3e0;background:#285028d9}.img-grid-x{-webkit-appearance:none;appearance:none;color:#fffbe6;cursor:pointer;background:#140e06c7;border:0;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;padding:0;display:inline-flex;position:absolute;top:4px;right:4px}.img-grid-x:hover{background:#140e06f2}.img-grid-x:disabled{opacity:.5;cursor:wait}.img-grid-star{-webkit-appearance:none;appearance:none;background:var(--pin-yellow);color:#4a3a08;cursor:pointer;border:0;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;padding:0;display:inline-flex;position:absolute;top:4px;left:4px;box-shadow:0 1px 3px #00000040}.img-grid-star:hover{background:#e0ad1d}.img-grid-star:disabled{opacity:.5;cursor:wait}.dropzone:hover,.dropzone.drag-over{border-color:var(--ink);background:#fff9}.dropzone .ico{opacity:.5;margin-bottom:6px;font-size:28px}.dropzone .t{font-size:14px;font-weight:600}.dropzone .s{color:var(--ink-soft);margin-top:2px;font-size:12px}.dropzone img.preview{border-radius:3px;max-width:100%;max-height:140px;margin:0 auto;display:block}.viewer{z-index:200;touch-action:none;background:#0a0804f2;justify-content:center;align-items:center;animation:.15s fadein;display:flex;position:fixed;inset:0;overflow:hidden}.viewer img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;transform-origin:50%;will-change:transform;touch-action:none;max-width:100%;max-height:100%;transition:transform 50ms ease-out}.viewer-bar{color:#fff;z-index:2;background:linear-gradient(#0009 0%,#0000 100%);justify-content:space-between;align-items:center;padding:14px 16px;display:flex;position:absolute;top:0;left:0;right:0}.viewer-bar .v-title{font-family:var(--f-title);flex:1;margin-right:12px;font-size:16px}.viewer-bar button{-webkit-appearance:none;appearance:none;color:#fff;cursor:pointer;background:#ffffff26;border:0;border-radius:50%;justify-content:center;align-items:center;width:38px;height:38px;font-size:18px;display:inline-flex}.viewer-bar button:hover{background:#ffffff40}.viewer-bar .v-counter{font-family:var(--f-hand);opacity:.7;font-size:14px}.viewer-nav{color:#fff;cursor:pointer;z-index:3;background:#00000059;border:0;border-radius:50%;justify-content:center;align-items:center;width:48px;height:48px;transition:background .12s,opacity .12s;display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}.viewer-nav:hover{background:#0000008c}.viewer-nav:disabled{opacity:.25;cursor:not-allowed}.viewer-nav.prev{left:14px}.viewer-nav.next{right:14px}@media (max-width:540px){.viewer-nav{width:40px;height:40px}.viewer-nav.prev{left:8px}.viewer-nav.next{right:8px}}.viewer-dots{z-index:3;gap:7px;display:flex;position:absolute;bottom:18px;left:50%;transform:translate(-50%)}.viewer-dot{cursor:pointer;background:#ffffff59;border:0;border-radius:50%;width:8px;height:8px;padding:0;transition:background .15s,transform .15s}.viewer-dot:hover{background:#fff9}.viewer-dot.is-active{background:#fff;transform:scale(1.2)}.viewer-hint{color:#fff;pointer-events:none;background:#00000080;border-radius:999px;padding:8px 14px;font-size:12px;animation:.3s fadein;position:absolute;bottom:24px;left:50%;transform:translate(-50%)}.login-hint{border-left:3px solid var(--pin-yellow);color:var(--ink-soft);font-size:12px;font-family:var(--f-body);background:#d6a4182e;border-radius:2px;margin-top:4px;padding:10px 12px}.login-hint code{background:#00000014;border-radius:2px;padding:1px 5px;font-size:11px}.admin-strip{color:var(--ink-soft);align-items:center;gap:8px;padding:0 18px 6px;font-size:12px;display:flex}.admin-strip .who{font-family:var(--f-hand);color:var(--ink);font-size:18px}.admin-strip .spacer{flex:1}.linkbtn{-webkit-appearance:none;appearance:none;color:var(--ink-soft);font-family:var(--f-body);cursor:pointer;background:0 0;border:0;padding:4px 6px;font-size:12px;text-decoration:underline}.linkbtn:hover{color:var(--ink)}
