@font-face{font-family:Inter;src:url('assets/inter-regular.ttf') format('truetype');font-weight:400;font-display:swap}
@font-face{font-family:Inter;src:url('assets/inter-medium.ttf') format('truetype');font-weight:500;font-display:swap}
@font-face{font-family:'IBM Plex Mono';src:url('assets/plex-mono-regular.ttf') format('truetype');font-weight:400;font-display:swap}
@font-face{font-family:'IBM Plex Mono';src:url('assets/plex-mono-medium.ttf') format('truetype');font-weight:500;font-display:swap}
:root{color-scheme:dark;--page:#0e0e0e;--panel:#000;--surface:#161616;--muted:rgba(255,255,255,.5);--font:Inter,Arial,sans-serif;--mono:'IBM Plex Mono',monospace}
*{box-sizing:border-box}
body{margin:0;background:var(--page);color:#fff;font:14px var(--font);letter-spacing:-.14px}
button,input,select{font:inherit}
button,a,input,select{-webkit-tap-highlight-color:transparent}
button{cursor:pointer;color:inherit}
button{border:0;background:none}
button:disabled{cursor:wait;opacity:.5}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid #b9b9b9;outline-offset:4px}
[hidden]{display:none!important}
.app{display:grid;grid-template-columns:150px minmax(0,1fr);gap:20px;width:100%;height:100dvh;min-height:540px;margin-inline:auto;padding:24px}
.sidebar{position:relative;display:flex;flex-direction:column;justify-content:space-between;min-width:0}
.brand h1,.brand p,.credit{margin:0;font:400 12px/16px var(--mono);letter-spacing:.24px;text-transform:uppercase;white-space:nowrap}
.brand h1{font-weight:500}
.brand p{margin-top:4px;color:var(--muted)}
.share-link{padding:0;margin-top:12px;font:400 11px/16px var(--mono);color:var(--muted);text-decoration:underline;text-underline-offset:3px}
html[data-access=viewer] :is(#add-bookmark,#empty-add,#copy-private-link){display:none}
@media(max-width:640px){.brand{flex-wrap:wrap}.share-link{flex-basis:100%;text-align:left;margin-top:0}}
@media(hover:hover) and (pointer:fine){.share-link:hover{color:#fff}}
#clock{font:inherit}
#categories{position:absolute;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;align-items:flex-start;gap:12px}
.pill{display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:99px;line-height:14px;white-space:nowrap;min-height:34px}
.pill .count{font:500 12px/14px var(--mono);letter-spacing:.24px;opacity:.5}
.category[aria-pressed=true]{background:#fff;color:#000;font-weight:500}
@media(hover:hover) and (pointer:fine){.category:hover:not([aria-pressed=true]){background:#1b1b1b}}
.credit{color:var(--muted)}
.credit span{color:#fff}
main{min-width:0;min-height:0;background:var(--panel);overflow-y:auto;scrollbar-width:thin;scrollbar-color:#333 transparent;position:relative}
main:focus{outline:none}
.scroll-content{display:flow-root;min-height:100%}
.toolbar{position:sticky;top:0;z-index:2;isolation:isolate;padding:27px 100px 56px 24px;display:flex;justify-content:center;align-items:flex-start}
.toolbar::before{content:'';position:absolute;inset:0 0 -24px;z-index:-1;pointer-events:none;background:linear-gradient(to bottom,rgba(0,0,0,.96),rgba(0,0,0,.85) 60%,rgba(0,0,0,0));-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);-webkit-mask-image:linear-gradient(to bottom,#000 60%,transparent);mask-image:linear-gradient(to bottom,#000 60%,transparent)}
#tags{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;min-height:34px}
.tag[aria-pressed=true]{background:#262626;box-shadow:inset 0 0 10px #ffffff0a;font-weight:500}
@media(hover:hover) and (pointer:fine){.tag:hover:not([aria-pressed=true]){background:#161616}}
.add-button{position:absolute;right:24px;top:24px;display:flex;align-items:center;justify-content:center;padding:8px 16px;border-radius:26px;background:var(--surface);box-shadow:inset 0 0 10px #ffffff0a}
@media(hover:hover) and (pointer:fine){.add-button:hover{background:#282828}}
.add-button img{display:block}
.gallery{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:24px;margin:0 24px 24px}
:root{--ease-out:cubic-bezier(.23,1,.32,1);--duration-press:120ms;--duration-hover:160ms;--duration-modal:240ms}
.bookmark-slot{min-width:0}
.gallery.has-reveal .bookmark-slot{opacity:1;filter:none;transition:opacity 200ms var(--ease-out),filter 200ms var(--ease-out);transition-delay:var(--reveal-delay,0ms)}
.gallery.has-reveal .bookmark-slot:not(.is-revealed){opacity:0;filter:blur(4px);pointer-events:none}
.gallery.has-reveal .bookmark-slot:focus-within{opacity:1;filter:none;pointer-events:auto;transition-delay:0s}
@media(prefers-reduced-motion:reduce){.gallery.has-reveal .bookmark-slot{transition:opacity 160ms ease;transition-delay:0s}.gallery.has-reveal .bookmark-slot:not(.is-revealed){filter:none}}
.bookmark{height:380px;min-width:0;background:var(--page);border:1px solid #161616;position:relative;overflow:hidden;filter:blur(0);transition:transform 200ms var(--ease-out),border-color 200ms ease,filter var(--duration-hover) var(--ease-out)}
.gallery.is-editing .bookmark-slot:not(.is-editing) .bookmark{filter:blur(5px)}
@media(hover:hover) and (pointer:fine){.bookmark-slot:hover .bookmark{transform:translateY(-8px);border-color:#3a3a3a}}
@media(prefers-reduced-motion:reduce){.bookmark{transition:border-color 200ms ease}.bookmark-slot:hover .bookmark{transform:none}}
.bookmark-link{display:flex;flex-direction:column;height:100%;color:inherit;text-decoration:none}
.bookmark-link{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:pan-y pinch-zoom}
.thumbnail{background:#282828;min-height:0;flex:1;overflow:hidden;position:relative}
.thumbnail img{display:block;width:100%;height:100%;object-fit:cover;object-position:top}
@media(min-width:641px) and (hover:hover) and (pointer:fine){
  .thumbnail img{filter:grayscale(1);transition:filter var(--duration-hover) ease}
  .bookmark-slot:hover .thumbnail img,.bookmark-slot:focus-within .thumbnail img,.bookmark-slot.is-editing .thumbnail img{filter:grayscale(0)}
}
.thumbnail.is-loading::after{content:'Carregando prévia';position:absolute;inset:0;display:grid;place-items:center;color:#888;font:11px var(--mono);letter-spacing:.2px;background:#282828}
.preview-message{position:absolute;inset:0;display:grid;place-items:center;color:#888;font-size:12px}
.attribution{padding:24px;flex-shrink:0;text-align:center}
.attribution h2{font-size:16px;font-weight:500;line-height:19px;letter-spacing:-.16px;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.attribution p{font-size:14px;line-height:17px;margin:6px 0 0;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bookmark-link:focus-visible{outline-offset:-3px}
.empty-state{min-height:420px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:24px;text-align:center}
.empty-state p{font-size:18px;margin:0}
.empty-state span{color:var(--muted);margin-bottom:12px;line-height:1.6}
.primary-button,.secondary-button,.delete-button{min-height:40px;padding:11px 18px;border-radius:99px;font-size:13px;font-weight:500}
.primary-button{background:#fff;color:#0e0e0e}
@media(hover:hover) and (pointer:fine){.primary-button:hover{background:#dcdcdc}}
.secondary-button{background:#262626;color:#fff}
@media(hover:hover) and (pointer:fine){.secondary-button:hover{background:#333}}
.text-button{padding:8px;color:var(--muted)}
dialog{background:#131313;color:#fff;border:1px solid #303030;padding:28px;width:min(500px,calc(100% - 32px));max-height:calc(100dvh - 32px);border-radius:12px;box-shadow:0 24px 100px #0009}
dialog::backdrop{background:#000b;backdrop-filter:blur(5px)}
.dialog-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:28px}
dialog h2{font-size:19px;font-weight:500;margin:0;letter-spacing:-.4px}
.close-button{font-size:26px;width:32px;height:32px;line-height:1;color:#999;border-radius:50%}
@media(hover:hover) and (pointer:fine){.close-button:hover{background:#262626;color:#fff}}
label{display:block;font-size:13px;line-height:18px;margin-bottom:20px}
input,select{display:block;width:100%;margin-top:8px;background:#1e1e1e;border:1px solid #343434;border-radius:6px;min-height:44px;padding:11px 12px;color:#fff;min-width:0}
input::placeholder{color:#737373}
.optional{font-size:11px;color:#888;margin-left:4px}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.dialog-actions{display:flex;justify-content:flex-end;align-items:center;gap:8px;margin-top:28px;flex-wrap:wrap}
:root{--text-destructive:#f4a2a2}
.delete-button{color:var(--text-destructive);margin-right:auto;padding-inline:0}
@media(hover:hover) and (pointer:fine){.delete-button:hover{text-decoration:underline}}
.delete-description{color:#999;line-height:1.6;margin-top:16px}
#bookmark-dialog{width:min(440px,calc(100% - 32px));padding:24px;border:0;border-radius:8px;background:#1f1f1f;box-shadow:0 0 4px #ffffff12,inset 0 0 10px #ffffff0a}
#bookmark-dialog{transform:none;transition:none}
#bookmark-dialog::backdrop{transition:none}
#bookmark-dialog[data-mode=edit]::backdrop{background:transparent;backdrop-filter:none}
#bookmark-form{display:flex;flex-direction:column;gap:40px}
#bookmark-dialog .dialog-heading{margin:0;min-height:40px}
#bookmark-dialog h2{font-size:24px;line-height:29px;letter-spacing:-.24px}
#bookmark-dialog .close-button{display:flex;align-items:center;justify-content:center;width:56px;height:40px;padding:8px 16px;background:#161616;border-radius:26px;box-shadow:inset 0 0 10px #ffffff0a}
@media(hover:hover) and (pointer:fine){#bookmark-dialog .close-button:hover{background:#292929}}
#bookmark-dialog .close-button img,#save-bookmark img{display:block;flex-shrink:0}
.modal-fields{display:flex;flex-direction:column;gap:24px;width:100%}
#bookmark-dialog .modal-row{display:grid;grid-template-columns:48px minmax(0,1fr);align-items:center;gap:8px;margin:0}
.field-label{font:400 12px/16px var(--mono);letter-spacing:.24px;text-transform:uppercase;color:#fffc}
#bookmark-dialog input:not([type=checkbox]){height:35px;min-height:35px;margin:0;padding:8px 16px;border:1px solid #313131;border-radius:8px;background:#161616;font:400 14px/17px var(--font);letter-spacing:-.14px;box-shadow:inset 0 0 10px #ffffff0a}
#bookmark-dialog input::placeholder{color:#ffffff80}
.link-field{display:flex;flex-direction:column;gap:4px}
.modal-preview{margin-left:56px;height:109px;position:relative;overflow:hidden;background:#000;border-radius:8px}
.modal-preview img{display:block;width:100%;height:100%;object-fit:cover;object-position:top}
#preview-status{position:absolute;bottom:12px;left:12px;right:12px;color:#ffffff80;font:400 12px/16px var(--mono);letter-spacing:.24px;text-transform:uppercase}
.modal-preview.is-ready #preview-status{width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
#retry-preview{position:absolute;left:12px;top:18px;padding:6px 0;color:#ddd;font-size:12px;text-decoration:underline;text-underline-offset:3px}
#folder-options{display:flex;flex-wrap:wrap;gap:8px}
#bookmark-dialog .folder-choice{position:relative;display:block;margin:0;cursor:pointer;line-height:17px}
.folder-choice input{position:absolute;width:1px;height:1px;min-height:0;opacity:0;clip-path:inset(50%);margin:0;padding:0}
.folder-choice span{display:block;padding:8px 16px;border:1px solid #313131;border-radius:58px;background:#161616;font:400 14px/17px var(--font);box-shadow:inset 0 0 10px #ffffff0a}
.folder-choice input:checked+span{border-color:#737373;background:#2c2c2c}
.folder-choice input:focus-visible+span{outline:2px solid #b9b9b9;outline-offset:3px}
@media(hover:hover) and (pointer:fine){.folder-choice:hover span{border-color:#555}}
#bookmark-dialog .dialog-actions{display:flex;flex-direction:column;align-items:center;gap:16px;margin:0}
#save-bookmark{display:flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:8px 16px;border-radius:26px;font:500 14px/17px var(--font)}
#save-bookmark:disabled{cursor:not-allowed;opacity:.45}
#bookmark-dialog .delete-button{margin:0;min-height:0;padding:0;font:500 14px/17px var(--font)}
#bookmark-dialog .form-error{margin:0;font-size:12px}
#bookmark-dialog[data-anchored=true]{position:fixed;inset:auto;margin:0;left:var(--modal-left,16px);top:var(--modal-top,16px);max-height:var(--modal-max-height,calc(100dvh - 32px));padding-top:var(--modal-padding-top,24px);padding-right:var(--modal-padding-right,24px);transform:none;transition:none}
#bookmark-dialog[data-anchored=true]::backdrop{transition:none}
#bookmark-dialog[data-anchored=true] .close-button{width:var(--modal-button-width,56px)}
.add-button[aria-expanded=true]{visibility:hidden}
/* The trigger grows into a surface before the independent contents reveal. */
:root{--duration-modal-close:150ms;--stagger-dur:var(--duration-modal);--stagger-distance:12px;--stagger-stagger:40ms;--stagger-blur:3px;--stagger-ease:var(--ease-out)}
#bookmark-form.is-closing{--stagger-dur:var(--duration-press)}
#bookmark-form.is-closing #close-dialog{opacity:0;pointer-events:none;transition:opacity var(--duration-press) var(--ease-out)}
.modal-surface{display:none;position:absolute;inset:0;background:#1f1f1f;border-radius:8px;box-shadow:0 0 4px #ffffff12,inset 0 0 10px #ffffff0a;transform-origin:0 0;pointer-events:none}
#bookmark-dialog[data-stage=shape]{background:transparent;box-shadow:none;opacity:1}
#bookmark-dialog[data-stage=shape] .modal-surface{display:block}
#bookmark-dialog #bookmark-form{position:relative}
.t-stagger-line {
  display: block;
  opacity: 0;
  transform: translateY(var(--stagger-distance));
  filter: blur(var(--stagger-blur));
  transition:
    opacity   var(--stagger-dur) var(--stagger-ease),
    transform var(--stagger-dur) var(--stagger-ease),
    filter    var(--stagger-dur) var(--stagger-ease);
  will-change: transform, opacity, filter;
}
.t-stagger-line--2 { transition-delay: var(--stagger-stagger); }
.t-stagger.is-shown .t-stagger-line {
  opacity: 1;
  transform: translateY(0);
  filter: blur(0);
}
.t-stagger.is-hiding .t-stagger-line {
  opacity: 0;
  transform: translateY(0);
  filter: blur(0);
  transition:
    opacity 200ms ease,
    transform 0s linear,
    filter 0s linear;
  transition-delay: 0s;
}
#bookmark-dialog .link-field{display:flex}
#bookmark-dialog[data-instant-motion=true] .t-stagger-line{transition:none;transition-delay:0s!important}
@media (prefers-reduced-motion: reduce) {
  .t-stagger-line { transition: none !important; }
}
.tag-field{position:relative;min-width:0}
#bookmark-dialog .modal-row.tag-row{align-items:start}
.tag-row>.field-label{margin:0;padding-top:9px}
#tag-options{position:absolute;top:calc(100% + 8px);left:0;right:0;z-index:3;max-height:144px;overflow-y:auto;overscroll-behavior:contain;padding:4px;background:#161616;border:1px solid #313131;border-radius:8px;scrollbar-width:thin;opacity:1;transition:opacity var(--duration-hover) var(--ease-out)}
#tag-options[data-placement=above]{top:auto;bottom:calc(100% + 8px)}
@starting-style{#tag-options{opacity:0}}
.tag-option{padding:8px 10px;border-radius:4px;font:400 13px/18px var(--font);color:#ddd;cursor:pointer;overflow-wrap:anywhere}
.tag-option[aria-selected=true]{background:#333;color:#fff}
@media(hover:hover) and (pointer:fine){.tag-option:hover{background:#2c2c2c;color:#fff}}
.tag-options-empty{font-size:12px;line-height:18px;color:#999;margin:8px}
.form-error,.storage-error{color:#ffb3b3;font-size:13px;line-height:1.6}
.storage-error{padding:16px;margin:0 24px 24px;background:#231717;border:1px solid #503030}
.notifications{position:fixed;bottom:32px;left:50%;transform:translateX(-50%);width:max-content;max-width:calc(100% - 32px);z-index:5;display:flex;flex-direction:column;gap:8px;pointer-events:none}
.toast,.undo-notice{margin:0;padding:13px 20px;background:#f5f5f5;color:#111;border-radius:24px;box-shadow:0 4px 24px #0007;text-align:center;pointer-events:auto}
#undo-notices{display:flex;flex-direction:column;gap:8px}
.undo-notice{display:flex;align-items:center;justify-content:space-between;gap:24px}
.undo-button{padding:4px 0;font-weight:500;text-decoration:underline;text-underline-offset:3px}
.undo-button:focus-visible{outline-color:#111}
.skip-link{position:fixed;top:8px;left:8px;transform:translateY(-150%);z-index:10;padding:12px;background:#fff;color:#000}
.skip-link:focus{transform:none}
/* Small, interruptible feedback for controls; card hover keeps its own motion. */
:where(.add-button,.close-button,.primary-button,.secondary-button,.pill,.text-button,.delete-button,#retry-preview){transition:transform var(--duration-press) var(--ease-out),background-color var(--duration-hover) ease,border-color var(--duration-hover) ease,color var(--duration-hover) ease,opacity var(--duration-hover) ease}
:where(.add-button,.close-button,.primary-button,.secondary-button,.pill,.text-button,.delete-button,#retry-preview):not(:disabled):active{transform:scale(.97)}
.folder-choice span{transition:transform var(--duration-press) var(--ease-out),background-color var(--duration-hover) ease,border-color var(--duration-hover) ease}
.folder-choice:active span{transform:scale(.97)}
#bookmark-dialog input:not([type=checkbox]){transition:border-color var(--duration-hover) ease,background-color var(--duration-hover) ease}
#bookmark-dialog input:not([type=checkbox]):focus{border-color:#737373}
@media(hover:hover) and (pointer:fine){#bookmark-dialog input:not([type=checkbox]):hover:not(:focus){border-color:#555}.text-button:hover,#retry-preview:hover{color:#fff}}
dialog{opacity:0;transform:scale(.96);pointer-events:none;transition:opacity var(--duration-modal) var(--ease-out),transform var(--duration-modal) var(--ease-out),display var(--duration-modal) allow-discrete,overlay var(--duration-modal) allow-discrete}
dialog[open]{opacity:1;transform:scale(1);pointer-events:auto}
dialog::backdrop{opacity:0;transition:opacity var(--duration-modal) var(--ease-out),display var(--duration-modal) allow-discrete,overlay var(--duration-modal) allow-discrete}
dialog[open]::backdrop{opacity:1}
@starting-style{dialog[open]{opacity:0;transform:scale(.96)}dialog[open]::backdrop{opacity:0}}
.modal-preview img{opacity:1;transition:opacity 200ms var(--ease-out)}
@starting-style{.modal-preview img{opacity:0}}
dialog[data-instant-motion=true],dialog[data-instant-motion=true]::backdrop{transition-duration:0s}
html[data-input-mode=keyboard] :where(button,.folder-choice span),html[data-input-mode=keyboard] :where(button):not(:disabled):active,html[data-input-mode=keyboard] .folder-choice:active span{transition:none;transform:none}
@media(prefers-reduced-motion:reduce){dialog,dialog[open]{transform:none;transition-duration:160ms}@starting-style{dialog[open]{transform:none}}:where(.add-button,.close-button,.primary-button,.secondary-button,.pill,.text-button,.delete-button,#retry-preview):not(:disabled):active,.folder-choice:active span{transform:none}}
@media(min-width:1440px){.toolbar{padding-left:100px}}
@media(min-width:1921px){.gallery{grid-template-columns:repeat(5,minmax(0,1fr))}}
@media(max-width:1366px){.gallery{grid-template-columns:repeat(3,minmax(0,1fr))}.toolbar{padding-left:24px}}
@media(max-width:960px){.gallery{grid-template-columns:repeat(2,minmax(0,1fr))}.toolbar{justify-content:flex-start;padding-right:88px}.tag{padding-inline:12px}.bookmark{height:360px}}
@media(max-width:640px){.app{display:flex;flex-direction:column;height:auto;min-height:100dvh;padding:20px 16px;gap:20px}.sidebar{gap:24px}.brand{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.brand p{font-size:10px}#categories{position:static;transform:none;flex-direction:row;gap:4px;overflow-x:auto;scrollbar-width:none;padding-block:4px}.category{padding:10px 12px}.credit{display:none}main{overflow:visible;min-height:65dvh}.toolbar{padding:20px 70px 20px 12px;min-height:82px;align-items:center}#tags{justify-content:flex-start}.tag{font-size:12px;padding:9px 10px;gap:6px}.add-button{right:12px;top:19px;padding:8px 12px}.gallery{margin:0 12px 12px;gap:12px}.bookmark{height:310px}.attribution{padding:20px 12px}.attribution h2{font-size:14px}.attribution p{font-size:12px}.empty-state{min-height:330px}}
@media(max-width:640px){.toolbar{padding-bottom:56px;min-height:0;align-items:flex-start}}
@media(max-width:380px){.gallery{grid-template-columns:1fr}.bookmark{height:380px}.brand{display:block}.form-row{grid-template-columns:1fr;gap:0}dialog{padding:20px}.dialog-actions{gap:6px}}
