:root{--bg: #0f1115;--bg-elevated: #181b22;--border: #2a2e38;--text: #e8eaed;--text-dim: #9aa0ab;--accent: #4f8cff;--danger: #ff5c5c;--radius: 10px}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}button{font-family:inherit;cursor:pointer}.app-header{display:flex;align-items:center;gap:24px;padding:12px 20px;background:var(--bg-elevated);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:20}.app-header__brand{font-weight:600;font-size:1.1rem}.app-header__nav{display:flex;gap:16px;flex:1}.app-header__nav a{color:var(--text-dim);text-decoration:none;padding:6px 0;border-bottom:2px solid transparent}.app-header__nav a.active{color:var(--text);border-bottom-color:var(--accent)}.app-header__actions{display:flex;align-items:center;gap:12px}.logout-button,.login-button{background:transparent;border:1px solid var(--border);color:var(--text);padding:6px 14px;border-radius:var(--radius)}.logout-button:hover,.login-button:hover{border-color:var(--accent)}.login-page{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;gap:12px;text-align:center}.login-button{padding:10px 28px;font-size:1rem}.auth-callback{display:flex;align-items:center;justify-content:center;height:100vh;color:var(--text-dim)}.edit-switch{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.edit-switch input{display:none}.edit-switch__track{width:36px;height:20px;background:var(--border);border-radius:999px;position:relative;transition:background .15s}.edit-switch input:checked+.edit-switch__track{background:var(--accent)}.edit-switch__thumb{position:absolute;top:2px;left:2px;width:16px;height:16px;background:#fff;border-radius:50%;transition:transform .15s}.edit-switch input:checked+.edit-switch__track .edit-switch__thumb{transform:translate(16px)}.edit-switch__label{font-size:.85rem;color:var(--text-dim)}.tag-bar{display:flex;flex-wrap:wrap;gap:8px;padding:16px 20px}.tag-chip{display:inline-flex;align-items:center;gap:6px;background:var(--bg-elevated);border:1px solid var(--border);color:var(--text-dim);padding:5px 12px;border-radius:999px;font-size:.85rem}.tag-chip--active{background:var(--accent);color:#fff;border-color:var(--accent)}.tag-chip__count{opacity:.6;font-size:.75rem}.tag-chip--clear{color:var(--danger);border-color:var(--danger)}.tag-chip--editable .tag-chip__remove{background:none;border:none;color:inherit;margin-left:4px;font-size:1rem;line-height:1}.gallery-page{padding-bottom:80px}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px;padding:0 20px}.thumb{position:relative;aspect-ratio:1;overflow:hidden;border-radius:6px;cursor:pointer;background:var(--bg-elevated)}.thumb img{width:100%;height:100%;object-fit:cover;display:block}.thumb--selected{outline:3px solid var(--accent)}.thumb__video-badge{position:absolute;bottom:6px;right:6px;background:#000000a6;color:#fff;font-size:.7rem;padding:2px 6px;border-radius:4px}.thumb__checkbox{position:absolute;top:8px;left:8px;width:20px;height:20px;border:2px solid white;border-radius:4px;background:#0000004d}.thumb__checkbox--checked{background:var(--accent);border-color:var(--accent)}.thumb__status-badge{position:absolute;top:6px;right:6px;background:#0009;padding:2px 5px;border-radius:4px;font-size:.8rem}.gallery-empty,.gallery-loading{padding:60px 20px;text-align:center;color:var(--text-dim)}.gallery-sentinel{height:1px}.bulk-toolbar{position:fixed;bottom:20px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:10px;background:var(--bg-elevated);border:1px solid var(--border);padding:10px 16px;border-radius:var(--radius);box-shadow:0 8px 24px #0006;z-index:30}.bulk-toolbar input{background:var(--bg);border:1px solid var(--border);color:var(--text);padding:6px 10px;border-radius:6px}.bulk-toolbar button{background:var(--accent);border:none;color:#fff;padding:6px 12px;border-radius:6px}.bulk-toolbar__clear{background:transparent;color:var(--text-dim)}.bulk-toolbar__count{color:var(--text-dim);font-size:.85rem}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000d9;display:flex;align-items:center;justify-content:center;z-index:50}.modal-content{position:relative;max-width:90vw;max-height:90vh;display:flex;flex-direction:column;background:var(--bg-elevated);border-radius:var(--radius);overflow:hidden}.modal-media{display:flex;align-items:center;justify-content:center;background:#000}.modal-media img,.modal-media video{max-width:90vw;max-height:70vh}.modal-meta{padding:14px 18px;display:flex;flex-direction:column;gap:10px}.modal-meta__date{color:var(--text-dim);font-size:.85rem}.modal-meta__tags{display:flex;flex-wrap:wrap;gap:6px}.modal-close,.modal-nav{position:absolute;background:#00000080;color:#fff;border:none;border-radius:50%;width:36px;height:36px;font-size:1.3rem;display:flex;align-items:center;justify-content:center;z-index:5}.modal-close{top:10px;right:10px}.modal-nav--prev{left:10px;top:50%;transform:translateY(-50%)}.modal-nav--next{right:10px;top:50%;transform:translateY(-50%)}.tag-editor__current{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.tag-editor__input-row{display:flex;gap:8px}.tag-editor__input-row input{flex:1;background:var(--bg);border:1px solid var(--border);color:var(--text);padding:6px 10px;border-radius:6px}.tag-editor__input-row button{background:var(--accent);border:none;color:#fff;padding:6px 14px;border-radius:6px}.tag-editor__suggestions{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.tag-chip--suggestion{background:transparent;border:1px dashed var(--border)}.upload-button{position:relative}.upload-button button{background:var(--accent);border:none;color:#fff;padding:6px 14px;border-radius:var(--radius)}.upload-progress{position:absolute;top:110%;right:0;background:var(--bg-elevated);border:1px solid var(--border);border-radius:8px;padding:10px;min-width:220px;z-index:25}.upload-progress__row{display:flex;flex-direction:column;gap:2px;margin-bottom:6px;font-size:.8rem}.upload-progress__row progress{width:100%}
