:root{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:#111827;background:#f7f8fc;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background:radial-gradient(circle at top left,rgba(48,100,236,.1),transparent 32rem),#f7f8fc}button,input{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.7}.app-shell{min-height:100vh}.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px clamp(18px,4vw,42px);border-bottom:1px solid #e7eaf3;background:#ffffffe6;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.brand{display:inline-flex;align-items:center;gap:10px;color:#0a4bd8;font-size:25px;font-weight:800}.actions{display:flex;align-items:center;gap:10px}.primary-button,.secondary-button,.icon-button,.card-actions button{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;line-height:1;transition:transform .15s ease,box-shadow .15s ease,background .15s ease}.primary-button{min-height:44px;padding:0 18px;border-radius:999px;background:#2563eb;color:#fff;font-size:15px;font-weight:700;box-shadow:0 12px 26px #2563eb3d}.primary-button:hover{transform:translateY(-1px);background:#1d4ed8}.primary-button.full{width:100%}.secondary-button{min-height:42px;padding:0 18px;border-radius:999px;border:1px solid #d6deee;background:#fff;color:#1f2937;font-size:14px;font-weight:700}.icon-button{width:42px;height:42px;border-radius:50%;background:transparent;color:#374151}.icon-button:hover{background:#eef3ff;color:#0a4bd8}main{width:min(1120px,100%);margin:0 auto;padding:24px clamp(18px,4vw,42px) 64px}.stats-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-bottom:18px}.stat-card{padding:18px;border:1px solid #e5e9f4;border-radius:8px;background:#ffffffc7;box-shadow:0 10px 26px #1f29370a}.stat-card span{display:block;margin-bottom:8px;color:#667085;font-size:13px;font-weight:650}.stat-card strong{display:block;color:#111827;font-size:28px;line-height:1.1}.upload-zone{display:grid;place-items:center;min-height:230px;padding:30px;border:2px dashed #b9d6ff;border-radius:8px;background:#ffffffad;text-align:center;box-shadow:inset 0 0 0 1px #ffffff8c,0 18px 40px #365faa14}.upload-zone.dragging{border-color:#2563eb;background:#edf4ff}.upload-zone.uploading{pointer-events:none}.upload-icon,.modal-icon{display:grid;place-items:center;width:78px;height:78px;margin-bottom:16px;border-radius:50%;background:#dfe8ff;color:#0a4bd8}.upload-zone h1{margin:0;color:#101828;font-size:28px;line-height:1.15}.upload-zone p,.empty-state p,.token-modal p{margin:10px 0 0;color:#667085;font-size:15px;line-height:1.5}.alert{display:flex;align-items:center;gap:8px;margin-top:18px;padding:12px 14px;border-radius:8px;font-size:14px;font-weight:650}.alert.error{border:1px solid #fecaca;background:#fef2f2;color:#b42318}.alert.notice{border:1px solid #bbf7d0;background:#f0fdf4;color:#166534}.section-heading{display:flex;align-items:baseline;justify-content:space-between;margin:32px 0 16px;color:#4b5563;letter-spacing:0}.section-heading span{font-size:16px;font-weight:800}.section-heading small{color:#667085;font-size:13px;font-weight:650}.gallery{column-count:3;column-gap:18px}.image-card{display:inline-block;width:100%;margin:0 0 18px;overflow:hidden;border:1px solid #e7eaf3;border-radius:8px;background:#fff;box-shadow:0 14px 36px #1f293714;break-inside:avoid}.image-frame{position:relative;background:#e5e7eb}.image-frame img{display:block;width:100%;height:auto;min-height:180px;object-fit:cover}.type-badge{position:absolute;top:12px;right:12px;padding:9px 12px;border:1px solid rgba(15,23,42,.12);border-radius:999px;background:#ffffffeb;color:#111827;font-size:12px;font-weight:800}.image-meta{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px}.image-meta h2{margin:0;color:#111827;font-size:15px;font-weight:750;line-height:1.35;overflow-wrap:anywhere}.image-meta p{margin:4px 0 0;color:#667085;font-size:13px}.card-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.card-actions button{min-width:38px;height:36px;padding:0 10px;border-radius:999px;background:#f3f6fb;color:#344054;font-size:12px;font-weight:800}.card-actions button:hover{background:#e8efff;color:#0a4bd8}.card-actions button.danger:hover{background:#fff1f2;color:#be123c}.empty-state{display:grid;place-items:center;min-height:260px;padding:36px;border:1px solid #e7eaf3;border-radius:8px;background:#ffffffb8;text-align:center}.empty-state h2{margin:14px 0 0;font-size:22px}.load-row{display:flex;justify-content:center;padding-top:22px}.modal-backdrop{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:24px;background:#0f172a61;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.token-modal{width:min(420px,100%);padding:28px;border-radius:8px;background:#fff;box-shadow:0 24px 70px #0f172a40}.token-modal .modal-icon{margin-inline:auto}.token-modal h2{margin:0;text-align:center;font-size:24px}.token-modal p{margin-bottom:18px;text-align:center}.token-modal input{width:100%;height:46px;margin-bottom:14px;padding:0 14px;border:1px solid #d6deee;border-radius:8px;outline:0;color:#111827;background:#f9fafb}.token-modal input:focus{border-color:#2563eb;box-shadow:0 0 0 4px #2563eb1f}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:900px){.gallery{column-count:2}}@media(max-width:640px){.topbar{padding:14px 16px}.brand span{font-size:22px}.actions{gap:4px}.actions .icon-button:first-child{display:none}.primary-button{min-height:40px;padding:0 14px}main{padding:18px 16px 44px}.stats-grid{grid-template-columns:1fr}.upload-zone{min-height:210px;padding:24px 18px}.upload-zone h1{font-size:24px}.gallery{column-count:1}.image-meta{align-items:flex-start;flex-direction:column}.card-actions{width:100%}.card-actions button{flex:1}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
