| * { box-sizing: border-box; margin: 0; padding: 0; } |
| :root { |
| --bg: #080808; |
| --panel: #121416; |
| --panel-2: #181b1e; |
| --line: #2a2f33; |
| --text: #e8ecef; |
| --muted: #89939b; |
| --dim: #5f6870; |
| --accent: #0af; |
| --accent-2: #07b; |
| --ok: #4d8; |
| --warn: #fb4; |
| --bad: #f66; |
| } |
| body { |
| min-height: 100vh; |
| background: var(--bg); |
| color: var(--text); |
| font-family: "Fira Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; |
| line-height: 1.5; |
| } |
| .topbar { |
| position: fixed; |
| inset: 0 0 auto; |
| z-index: 5; |
| height: 64px; |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| gap: 1rem; |
| padding: 0 4vw; |
| background: #080808ee; |
| backdrop-filter: blur(14px); |
| border-bottom: 1px solid var(--line); |
| } |
| .brand { |
| font-size: 1.3rem; |
| font-weight: 800; |
| letter-spacing: 0; |
| } |
| nav { |
| display: flex; |
| align-items: center; |
| gap: .35rem; |
| } |
| .tab { |
| height: 34px; |
| padding: 0 .8rem; |
| background: transparent; |
| border: 1px solid transparent; |
| border-radius: 6px; |
| color: var(--muted); |
| cursor: pointer; |
| font-size: .72rem; |
| font-weight: 700; |
| letter-spacing: .08rem; |
| text-transform: uppercase; |
| transition: background .15s, border-color .15s, color .15s; |
| } |
| .tab:hover { color: var(--text); border-color: var(--line); } |
| .tab.active { color: #00131c; background: var(--accent); border-color: var(--accent); } |
| #app { |
| width: min(1240px, 92vw); |
| margin: 0 auto; |
| padding: 96px 0 42px; |
| } |
| .panel { display: none; } |
| .panel.active { display: block; animation: enter .18s ease-out; } |
| .section-head { |
| display: flex; |
| align-items: end; |
| justify-content: space-between; |
| gap: 1rem; |
| margin-bottom: 1.2rem; |
| padding-bottom: .8rem; |
| border-bottom: 1px solid var(--line); |
| } |
| h1 { |
| font-size: clamp(2rem, 6vw, 4.5rem); |
| line-height: .9; |
| font-weight: 900; |
| letter-spacing: 0; |
| } |
| .section-head span { |
| color: var(--muted); |
| font-size: .72rem; |
| font-weight: 700; |
| letter-spacing: .08rem; |
| text-transform: uppercase; |
| } |
| .submit-grid { |
| display: grid; |
| grid-template-columns: minmax(18rem, 1fr) 8rem 10rem auto; |
| gap: .75rem; |
| align-items: end; |
| } |
| .form-group { min-width: 0; } |
| .form-group label { |
| display: block; |
| margin-bottom: .35rem; |
| color: var(--muted); |
| font-size: .72rem; |
| font-weight: 700; |
| letter-spacing: .08rem; |
| text-transform: uppercase; |
| } |
| input, select { |
| width: 100%; |
| height: 42px; |
| padding: 0 .75rem; |
| background: var(--panel); |
| border: 1px solid var(--line); |
| border-radius: 6px; |
| color: var(--text); |
| font-size: .92rem; |
| transition: border-color .15s, background .15s; |
| } |
| input::placeholder { color: var(--dim); } |
| input:focus, select:focus { outline: none; border-color: var(--accent); background: var(--panel-2); } |
| .btn-primary, .btn-secondary, .btn-icon { |
| height: 42px; |
| border-radius: 6px; |
| cursor: pointer; |
| font-weight: 800; |
| transition: background .15s, border-color .15s, color .15s, transform .15s; |
| } |
| .btn-primary { |
| min-width: 8rem; |
| padding: 0 1rem; |
| background: var(--accent); |
| color: #00131c; |
| border: 1px solid var(--accent); |
| } |
| .btn-primary:hover { background: var(--accent-2); border-color: var(--accent-2); } |
| .btn-primary:disabled, .btn-secondary:disabled { |
| opacity: .45; |
| cursor: not-allowed; |
| } |
| .btn-secondary { |
| padding: 0 .85rem; |
| background: var(--panel); |
| color: var(--text); |
| border: 1px solid var(--line); |
| text-decoration: none; |
| } |
| .btn-secondary:hover { color: var(--accent); border-color: var(--accent); } |
| .btn-icon { |
| width: 32px; |
| height: 32px; |
| background: transparent; |
| border: 1px solid var(--line); |
| color: var(--muted); |
| font-size: 1rem; |
| line-height: 1; |
| } |
| .btn-icon:hover { color: var(--accent); border-color: var(--accent); } |
| .btn-delete:hover { color: var(--bad); border-color: var(--bad); } |
| #submit-status { |
| min-height: 36px; |
| margin-top: 1rem; |
| padding: .55rem .75rem; |
| border-radius: 6px; |
| font-size: .9rem; |
| } |
| .status-ok { background: #10251d; color: var(--ok); border: 1px solid #284; } |
| .status-err { background: #261314; color: var(--bad); border: 1px solid #833; } |
| .hidden { display: none; } |
| #search-list { |
| display: grid; |
| gap: .5rem; |
| } |
| .search-item { |
| display: grid; |
| grid-template-columns: minmax(0, 1fr) auto auto; |
| align-items: center; |
| gap: .8rem; |
| min-height: 52px; |
| padding: .75rem .9rem; |
| background: var(--panel); |
| border: 1px solid var(--line); |
| border-radius: 6px; |
| transition: border-color .15s, transform .15s, background .15s; |
| } |
| .search-item:hover { border-color: var(--accent); background: var(--panel-2); transform: translateY(-1px); } |
| .search-item .id { |
| color: var(--accent); |
| font-family: Consolas, "SFMono-Regular", monospace; |
| font-size: .88rem; |
| cursor: pointer; |
| overflow: hidden; |
| text-overflow: ellipsis; |
| } |
| .search-item .time { |
| color: var(--muted); |
| font-size: .8rem; |
| white-space: nowrap; |
| } |
| .search-actions { |
| display: flex; |
| align-items: center; |
| gap: .3rem; |
| } |
| .active-task { border-color: #3a3222; } |
| .search-status { |
| display: inline-grid; |
| place-items: center; |
| width: 24px; |
| height: 24px; |
| border-radius: 999px; |
| font-size: .8rem; |
| font-weight: 900; |
| } |
| .active-mark { color: var(--warn); background: #2d2515; } |
| .done-mark { color: var(--ok); background: #13281d; } |
| .list-pager, #pager { |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| gap: .75rem; |
| margin: 1rem 0; |
| color: var(--muted); |
| font-size: .85rem; |
| } |
| .detail-header { |
| display: grid; |
| grid-template-columns: auto minmax(0, 1fr) auto; |
| align-items: start; |
| gap: .9rem; |
| margin-bottom: .75rem; |
| padding-bottom: .75rem; |
| border-bottom: 1px solid var(--line); |
| } |
| #detail-title { |
| color: var(--accent); |
| font-family: Consolas, "SFMono-Regular", monospace; |
| font-size: 1rem; |
| font-weight: 800; |
| overflow-wrap: anywhere; |
| } |
| #detail-stats { |
| color: var(--muted); |
| font-size: .82rem; |
| } |
| .check-row { |
| display: flex; |
| align-items: center; |
| gap: .45rem; |
| color: var(--muted); |
| font-size: .85rem; |
| white-space: nowrap; |
| } |
| .check-row input { |
| width: 16px; |
| height: 16px; |
| accent-color: var(--accent); |
| } |
| .exif-filters { |
| display: flex; |
| flex-wrap: wrap; |
| justify-content: end; |
| gap: .45rem .75rem; |
| max-width: 31rem; |
| } |
| #results-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); |
| gap: .8rem; |
| max-height: calc(100vh - 235px); |
| overflow-y: auto; |
| padding: .25rem .15rem 1rem; |
| } |
| .result-card { |
| min-width: 0; |
| padding: .55rem; |
| background: var(--panel); |
| border: 1px solid var(--line); |
| border-radius: 6px; |
| transition: border-color .15s, transform .15s, background .15s; |
| } |
| .result-card:hover { border-color: var(--accent); background: var(--panel-2); transform: translateY(-1px); } |
| .thumb { |
| width: 100%; |
| aspect-ratio: 1; |
| display: grid; |
| place-items: center; |
| margin-bottom: .55rem; |
| background: #050505; |
| border: 1px solid #1b1d20; |
| border-radius: 6px; |
| cursor: zoom-in; |
| overflow: hidden; |
| } |
| .thumb::after { |
| content: "loading"; |
| color: var(--dim); |
| font-size: .72rem; |
| letter-spacing: .08rem; |
| text-transform: uppercase; |
| } |
| .thumb-loaded::after { content: ""; } |
| .thumb-error::after { content: "no thumb"; } |
| .thumb img { |
| width: 100%; |
| height: 100%; |
| border-radius: 5px; |
| object-fit: contain; |
| image-rendering: auto; |
| } |
| .result-meta { |
| display: grid; |
| grid-template-columns: minmax(0, 1fr) auto; |
| align-items: center; |
| gap: .45rem; |
| min-height: 28px; |
| } |
| .result-link { |
| min-width: 0; |
| color: var(--accent); |
| cursor: pointer; |
| font-family: Consolas, "SFMono-Regular", monospace; |
| font-size: .82rem; |
| overflow: hidden; |
| text-overflow: ellipsis; |
| } |
| .result-link:hover { color: var(--accent-2); } |
| .download-link { |
| padding: .18rem .45rem; |
| border: 1px solid var(--line); |
| border-radius: 6px; |
| color: var(--text); |
| font-size: .72rem; |
| text-decoration: none; |
| } |
| .download-link:hover { color: var(--accent); border-color: var(--accent); } |
| .result-card .exif-badge, .not-scanned, .no-exif { |
| display: inline-block; |
| margin-top: .45rem; |
| padding: .12rem .45rem; |
| border-radius: 6px; |
| font-size: .7rem; |
| font-weight: 800; |
| letter-spacing: .06rem; |
| text-transform: uppercase; |
| } |
| .exif-1 { background: #18233a; color: #8bd; } |
| .exif-2 { background: #13281d; color: var(--ok); } |
| .exif-3 { background: #2d2515; color: var(--warn); } |
| .exif-4 { background: #122530; color: #7cf; } |
| .exif-5, .exif-6 { background: #232323; color: #aaa; } |
| .exif-7 { background: #2a172a; color: #d9a; } |
| .not-scanned, .no-exif { color: var(--dim); background: #181818; } |
| #viewer { |
| position: fixed; |
| inset: 0; |
| z-index: 10; |
| display: flex; |
| flex-direction: column; |
| background: #000e; |
| } |
| #viewer.hidden { display: none; } |
| .viewer-bar { |
| display: flex; |
| align-items: center; |
| justify-content: flex-end; |
| gap: .5rem; |
| min-height: 58px; |
| padding: .55rem 1rem; |
| background: #080808ee; |
| border-bottom: 1px solid var(--line); |
| } |
| #viewer-zoom { |
| min-width: 4rem; |
| text-align: center; |
| color: var(--muted); |
| font-size: .85rem; |
| } |
| #viewer-stage { |
| flex: 1; |
| display: flex; |
| align-items: flex-start; |
| justify-content: center; |
| overflow: auto; |
| padding: 1rem; |
| cursor: grab; |
| touch-action: none; |
| } |
| #viewer-stage.dragging { cursor: grabbing; } |
| #viewer-img { |
| max-width: none; |
| max-height: none; |
| transform-origin: top center; |
| transition: transform .08s ease; |
| user-select: none; |
| } |
| @keyframes enter { |
| from { opacity: 0; transform: translateY(8px); } |
| to { opacity: 1; transform: translateY(0); } |
| } |
| @media (max-width: 860px) { |
| .topbar { align-items: stretch; height: auto; min-height: 64px; padding: .7rem 4vw; flex-direction: column; } |
| nav { width: 100%; } |
| .tab { flex: 1; padding: 0 .45rem; } |
| #app { padding-top: 132px; } |
| .section-head { align-items: start; flex-direction: column; } |
| .submit-grid { grid-template-columns: 1fr; } |
| .btn-primary { width: 100%; } |
| .search-item { grid-template-columns: minmax(0, 1fr) auto; } |
| .search-actions { grid-column: 1 / -1; } |
| .detail-header { grid-template-columns: 1fr; } |
| .exif-filters { justify-content: start; max-width: none; } |
| #results-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); max-height: none; } |
| } |
|
|