@import url('https://fonts.googleapis.com/css2?family=Spline+Sans:wght@450;600&display=swap'); :root { --bg: #111; --panel: #222; --text: #ddd; --muted: #999; --accent: #6cf; --favorite: #fc3; --border: #444; --gap: 1rem; --width: 90%; --viewer: 94vh; } * { box-sizing: border-box; } body { background: var(--bg); color: var(--text); font-family: 'Spline Sans', sans-serif; font-weight: 450; margin: 0; } image-explorer { display: block; margin: 3rem auto; width: var(--width); } h1, h2 { font-weight: 500; margin: 0; } h1 { font-size: 1.5rem; } h2 { color: var(--accent); font-size: 1.1rem; margin-bottom: var(--gap); } .date-heading { align-items: center; display: grid; gap: var(--gap); grid-template-columns: auto 1fr auto; margin-bottom: var(--gap); text-align: center; } .date-prev { grid-column: 1; } .date-heading h1 { grid-column: 2; } .date-next { grid-column: 3; } .tools { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: var(--gap); } button, input[type="search"] { background: var(--panel); border: 1px solid var(--border); border-radius: 0; color: var(--text); font: inherit; padding: .65rem .8rem; } input[type="search"] { flex: 1 1 16rem; } button { cursor: pointer; } button.primary { background: var(--accent); border-color: var(--accent); color: var(--bg); } button.favorites[aria-pressed="true"] { border-color: var(--favorite); color: var(--favorite); } button:disabled { cursor: not-allowed; opacity: .6; } .status, .count, .size { color: var(--muted); } .status { min-height: 1.5rem; } .grid { display: grid; gap: var(--gap); grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr)); } .folders { grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); } .folder { align-items: stretch; background: var(--panel); border: 1px solid var(--border); display: flex; } .folder > input { margin: 1rem 0 1rem 1rem; } .folder-open { align-items: start; background: transparent; border: 0; display: grid; flex: 1; gap: .3rem; padding: 1rem; text-align: left; } .image { background: var(--panel); border: 1px solid var(--border); contain-intrinsic-size: 16rem; content-visibility: auto; display: grid; gap: .5rem; padding: .5rem; position: relative; } .image.favorite { border-color: var(--favorite); } .date-group + .date-group { margin-top: 2rem; } .load-more { display: block; margin: var(--gap) auto; } .preview { background: var(--bg); border: 0; padding: 0; } .preview img { aspect-ratio: 1; background: var(--bg); display: block; object-fit: contain; width: 100%; } .star { color: var(--accent); font-size: 1.2rem; line-height: 1; } .card-star { position: absolute; right: .75rem; top: .75rem; } .image-info { display: grid; gap: .2rem; grid-template-columns: auto 1fr; } .name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .lightbox { background: var(--bg); border: 1px solid var(--border); height: var(--viewer); max-height: none; max-width: none; padding: 0; width: var(--width); } .lightbox::backdrop { background: #000c; } .close { position: absolute; right: .75rem; top: .75rem; z-index: 1; } .image-actions { align-items: center; color: var(--muted); display: flex; flex-wrap: wrap; gap: .5rem; left: .75rem; max-width: calc(100% - 7rem); overflow-wrap: anywhere; position: absolute; top: .75rem; z-index: 1; } .zoom-tools { bottom: .75rem; display: flex; gap: .5rem; left: 50%; position: absolute; transform: translateX(-50%); z-index: 1; } .prompt { background: var(--bg); border: 1px solid var(--border); bottom: .75rem; color: var(--text); font: inherit; left: .75rem; margin: 0; max-height: 30%; max-width: 40%; overflow: auto; padding: .65rem .8rem; position: absolute; white-space: pre-wrap; z-index: 1; } .viewer { cursor: grab; height: 100%; overflow: hidden; position: relative; touch-action: none; width: 100%; } .viewer:active { cursor: grabbing; } .viewer img { left: 50%; max-width: none; position: absolute; top: 50%; transform-origin: center; user-select: none; } [hidden] { display: none !important; } @media (max-width: 36rem) { image-explorer { margin: 1rem auto; width: calc(100% - 2rem); } .lightbox { height: 100dvh; width: 100%; } .prompt { bottom: 4rem; max-width: calc(100% - 1.5rem); } }