:root{--bg: #000;--display: #fff;--key-num: #333333;--key-num-active: #737373;--key-fn: #a5a5a5;--key-fn-active: #d9d9d9;--key-op: #ff9f0a;--key-op-active: #fbc37d;--gallery-bg: #0a0a0a;--card: #1c1c1e;--text: #f2f2f7;--muted: #8e8e93;--accent: #0a84ff;--danger: #ff453a}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}html,body,#root{margin:0;height:100%;background:var(--bg);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--text)}.calc{height:100%;display:flex;flex-direction:column;justify-content:flex-end;background:var(--bg);padding:0 12px calc(env(safe-area-inset-bottom) + 16px);max-width:480px;margin:0 auto}.calc-display{color:var(--display);text-align:right;font-weight:300;font-size:clamp(64px,22vw,96px);line-height:1.1;padding:0 16px 12px;overflow:hidden;white-space:nowrap}.calc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.key{border:none;border-radius:50%;aspect-ratio:1 / 1;font-size:clamp(28px,8vw,36px);color:#fff;background:var(--key-num);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .08s ease;touch-action:manipulation}.key:active{background:var(--key-num-active)}.key.fn{background:var(--key-fn);color:#000}.key.fn:active{background:var(--key-fn-active)}.key.op{background:var(--key-op)}.key.op:active{background:var(--key-op-active)}.key.op.selected{background:#fff;color:var(--key-op)}.key.zero{grid-column:span 2;aspect-ratio:auto;border-radius:40px;justify-content:flex-start;padding-left:12%}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000d9;display:flex;align-items:center;justify-content:center;padding:24px;z-index:50}.sheet{background:var(--card);border-radius:20px;padding:24px;width:100%;max-width:360px}.sheet h2{margin:0 0 8px;font-size:20px}.sheet p{margin:0 0 16px;color:var(--muted);font-size:14px;line-height:1.4}.sheet input{width:100%;padding:12px 14px;border-radius:12px;border:1px solid #3a3a3c;background:#2c2c2e;color:#fff;font-size:16px;margin-bottom:12px}.btn{width:100%;padding:12px;border-radius:12px;border:none;background:var(--accent);color:#fff;font-size:16px;font-weight:600;cursor:pointer}.btn.secondary{background:#3a3a3c}.btn.danger{background:var(--danger)}.btn:disabled{opacity:.4}.err{color:var(--danger);font-size:13px;margin:-4px 0 12px}.gallery{height:100%;display:flex;flex-direction:column;background:var(--gallery-bg)}.gallery-top{display:flex;align-items:center;gap:12px;padding:calc(env(safe-area-inset-top) + 12px) 16px 12px}.gallery-top h1{font-size:20px;margin:0;flex:1}.icon-btn{border:none;background:var(--card);color:var(--text);border-radius:10px;padding:8px 12px;font-size:15px;cursor:pointer}.icon-btn.accent{background:var(--accent)}.tagbar{display:flex;gap:8px;padding:4px 16px 12px;overflow-x:auto;align-items:center;scrollbar-width:none}.tagbar::-webkit-scrollbar{display:none}.mediabar{padding-bottom:8px}.chip-wrap{position:relative;display:inline-flex;flex:none}.chip{display:inline-flex;align-items:center;gap:6px;border:1px solid #3a3a3c;background:#1c1c1e;color:var(--text);border-radius:999px;padding:7px 14px;font-size:14px;white-space:nowrap;cursor:pointer;flex:none;transition:background .12s ease,border-color .12s ease}.chip.active{background:var(--accent);border-color:var(--accent);color:#fff}.chip .count{font-size:12px;font-weight:600;color:var(--muted);background:#ffffff14;border-radius:999px;padding:1px 7px;min-width:18px;text-align:center}.chip.active .count{color:#fff;background:#ffffff40}.chip-del{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;border:2px solid var(--gallery-bg);background:var(--danger);color:#fff;font-size:11px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0}.chip-edit{border:none;background:transparent;color:var(--accent);font-size:14px;padding:7px 10px;cursor:pointer;flex:none}.chip-edit.on{color:var(--danger)}.matchbar{display:flex;align-items:center;gap:10px;padding:0 16px 12px}.matchlabel{color:var(--muted);font-size:13px}.seg{display:inline-flex;background:#1c1c1e;border:1px solid #3a3a3c;border-radius:8px;overflow:hidden}.seg-btn{border:none;background:transparent;color:var(--text);font-size:13px;padding:6px 14px;cursor:pointer}.seg-btn.on{background:var(--accent);color:#fff}.grid{flex:1;overflow-y:auto;display:grid;grid-template-columns:repeat(3,1fr);gap:3px;padding:0 3px 3px;align-content:start}.thumb-wrap{position:relative;aspect-ratio:1 / 1;cursor:pointer}.thumb{aspect-ratio:1 / 1;width:100%;height:100%;object-fit:cover;background:#1c1c1e;display:block;transition:transform .1s ease,filter .1s ease}.thumb-wrap.picked .thumb{transform:scale(.88);filter:brightness(.7);border-radius:8px}.thumb-check{position:absolute;top:7px;right:7px;width:24px;height:24px;border-radius:50%;border:2px solid #fff;background:#00000059;display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:700}.thumb-wrap.picked .thumb-check{background:var(--accent)}.thumb-badge{position:absolute;bottom:6px;left:6px;font-size:11px;color:#fff;background:#0000008c;border-radius:999px;width:22px;height:22px;display:flex;align-items:center;justify-content:center;padding-left:2px;pointer-events:none}.selbar{display:flex;gap:8px;padding:10px 16px calc(env(safe-area-inset-bottom) + 10px);background:#0009;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-top:1px solid #1c1c1e}.selbar .icon-btn{flex:1;text-align:center;font-size:16px;padding:12px}.empty{color:var(--muted);text-align:center;padding:48px 24px}.grid-sentinel{grid-column:1 / -1;height:1px}.grid-header{grid-column:1 / -1;display:flex;align-items:baseline;gap:8px;padding:16px 6px 6px;font-size:15px;font-weight:600;color:var(--text);position:sticky;top:0;background:var(--gallery-bg);z-index:1}.grid-header .count{color:var(--muted);font-weight:500;font-size:13px;background:none;padding:0}.secrow{display:flex;align-items:center;gap:8px;border-bottom:1px solid #2c2c2e}.secrow-main{flex:1;display:flex;align-items:center;gap:10px;background:transparent;border:none;color:var(--text);font-size:16px;text-align:left;padding:13px 8px;cursor:pointer}.secrow-actions{display:flex;align-items:center;gap:4px}.secbtn{background:#2c2c2e;border:none;color:var(--text);border-radius:8px;padding:7px 9px;font-size:13px;cursor:pointer}.secbtn:disabled{opacity:.35}.sec-badge{margin-left:8px;font-size:11px;color:var(--accent);border:1px solid var(--accent);border-radius:999px;padding:1px 7px}.dupview{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--gallery-bg);z-index:45;display:flex;flex-direction:column}.dup-scroll{flex:1;overflow-y:auto;padding-bottom:12px;-webkit-overflow-scrolling:touch}.dup-group{padding:4px 0 14px}.dup-group-head{padding:12px 12px 8px;color:var(--muted);font-size:14px}.dup-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:3px;padding:0 3px}.grid,.dup-scroll,.tagsheet-list{scrollbar-width:thin;scrollbar-color:#48484a transparent}.grid::-webkit-scrollbar,.dup-scroll::-webkit-scrollbar,.tagsheet-list::-webkit-scrollbar{width:10px}.grid::-webkit-scrollbar-thumb,.dup-scroll::-webkit-scrollbar-thumb,.tagsheet-list::-webkit-scrollbar-thumb{background:#48484a;border-radius:8px;border:3px solid transparent;background-clip:content-box}.grid::-webkit-scrollbar-thumb:hover,.dup-scroll::-webkit-scrollbar-thumb:hover,.tagsheet-list::-webkit-scrollbar-thumb:hover{background:#6b6b6f;background-clip:content-box}@media (hover: hover){.key:hover,.icon-btn:hover,.btn:hover,.chip:hover,.seg-btn:hover,.secbtn:hover,.vbtn:hover{filter:brightness(1.15)}.thumb-wrap:hover .thumb{filter:brightness(1.08)}.tag:hover,.tagrow:hover,.secrow-main:hover{background:#ffffff0f}}@media (min-width: 640px){.gallery,.viewer,.dupview{max-width:1100px;margin:0 auto}.grid,.dup-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px;padding:0 8px 8px}.calc{max-width:380px;justify-content:center;padding-bottom:24px}.calc-display{font-size:72px}.overlay.bottom{align-items:center}.sheet.tagsheet{border-radius:16px;max-height:72vh}}.thumb-uploading{position:relative;background:#1c1c1e;overflow:hidden}.thumb-uploading:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.08),transparent);animation:shimmer 1.1s infinite}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.progress{padding:8px 16px;color:var(--muted);font-size:14px}.viewer{position:fixed;top:0;right:0;bottom:0;left:0;background:#000;z-index:40;overflow:hidden}.viewer-stage{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;overflow:hidden;touch-action:none}.viewer-img{max-width:100%;max-height:100%;object-fit:contain;will-change:transform;-webkit-user-drag:none}.viewer-loading{color:var(--muted);font-size:15px}.viewer-top-bar,.viewer-bottom-bar{position:absolute;left:0;right:0;display:flex;align-items:center;gap:8px;background:#0000008c;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:opacity .2s ease;z-index:2}.viewer-top-bar{top:0;padding:calc(env(safe-area-inset-top) + 8px) 12px 10px}.viewer-top-bar .counter{flex:1;text-align:center;font-size:15px;color:#fff}.viewer-top-bar .spacer{width:72px}.viewer-bottom-bar{bottom:0;flex-wrap:wrap;padding:10px 12px calc(env(safe-area-inset-bottom) + 10px)}.viewer-bottom-bar .tags{flex:1 1 100%;display:flex;gap:6px;flex-wrap:wrap;margin-bottom:6px;align-items:center}.viewer-bottom-bar .tags.suggest{margin-bottom:8px}.tags-empty{color:var(--muted);font-size:13px}.tag{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:5px 11px;font-size:13px;cursor:pointer;white-space:nowrap;background:#2c2c2e}.tag.on{background:var(--accent);color:#fff}.tag.on .tag-x{opacity:.85;font-size:10px}.tag.add{background:transparent;color:var(--text);border:1px dashed #48484a}.tag-row{display:flex;gap:8px;align-items:center;flex:1 1 100%}.vctrl{flex:1 1 100%;display:flex;align-items:center;gap:12px;margin-bottom:8px;padding:4px 2px}.vbtn{width:40px;height:40px;border-radius:50%;background:#ffffff29;border:none;cursor:pointer;flex:none;display:flex;align-items:center;justify-content:center}.vbtn:before{content:"";display:block;width:0;height:0;border-style:solid;border-width:7px 0 7px 12px;border-color:transparent transparent transparent #fff;margin-left:3px}.vbtn.playing:before{width:12px;height:14px;margin-left:0;border:none;background:linear-gradient(to right,#fff 0 4px,transparent 4px 8px,#fff 8px 12px)}.scrub{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex:1;height:6px;border-radius:3px;background:#48484a;outline:none}.scrub::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #00000080;cursor:pointer}.scrub::-moz-range-thumb{width:18px;height:18px;border:none;border-radius:50%;background:#fff}.vtime{color:var(--muted);font-size:12px;min-width:82px;text-align:right;font-variant-numeric:tabular-nums}.overlay.bottom{align-items:flex-end;padding:0}.sheet.tagsheet{width:100%;max-width:520px;margin:0 auto;border-radius:20px 20px 0 0;max-height:82vh;display:flex;flex-direction:column;padding:16px 16px calc(env(safe-area-inset-bottom) + 12px)}.tagsheet-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}.tagsheet-head h2{flex:1;margin:0;font-size:18px}.tagsheet-list{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;margin-top:12px}.tagrow{display:flex;align-items:center;gap:10px;width:100%;padding:13px 8px;background:transparent;border:none;border-bottom:1px solid #2c2c2e;color:var(--text);font-size:16px;text-align:left;cursor:pointer}.tagrow-name{flex:1}.tagrow .count{color:var(--muted);font-size:13px;background:none;padding:0}.tagrow-check{color:var(--accent);font-weight:700}.tagrow-del{padding:2px 6px;font-size:15px}.tagrow.create .tagrow-name{color:var(--accent)}.tagsheet-foot{display:flex;gap:8px;margin-top:12px}.tagsheet-foot .btn{flex:1}.filterbar .chip-x{opacity:.8;margin-left:2px}.chip.filter-btn{border-style:dashed;color:var(--accent);background:transparent}.tags-summary{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--muted);font-size:13px;padding:8px 0}.tag-input{background:#2c2c2e;border:none;border-radius:8px;padding:8px 10px;color:#fff;font-size:16px;flex:1;min-width:90px}.viewer.immersive .viewer-top-bar,.viewer.immersive .viewer-bottom-bar{opacity:0;pointer-events:none}
