*{margin:0;padding:0;box-sizing:border-box}:root{--color-bg: #fafafa;--color-surface: #ffffff;--color-border: #e0e0e0;--color-text: #1a1a1a;--color-text-secondary: #6b6b6b;--color-accent: #337556;--color-accent-hover: #2a6148;--color-accent-light: #e8f0eb;--radius-md: 12px;--radius-lg: 16px}body{font-family:Lato,-apple-system,BlinkMacSystemFont,sans-serif;line-height:1.5;color:var(--color-text);background:var(--color-bg);min-height:100vh}.app{max-width:1200px;margin:0 auto;padding:32px 24px}.upload-zone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:calc(100vh - 64px);border:2px dashed var(--color-border);border-radius:var(--radius-lg);background:var(--color-surface);cursor:pointer;transition:border-color .2s,background .2s}.upload-zone.hidden{display:none}.upload-zone:hover,.upload-zone.dragover{border-color:var(--color-accent);background:var(--color-accent-light)}.upload-zone svg{color:var(--color-text-secondary);opacity:.5;transition:opacity .2s,color .2s}.upload-zone:hover svg,.upload-zone.dragover svg{opacity:.8;color:var(--color-accent)}.upload-title{font-size:16px;font-weight:600;color:var(--color-text)}.upload-subtitle{font-size:14px;color:var(--color-text-secondary)}.upload-zone input{display:none}.back-btn{display:none;position:fixed;top:24px;left:24px;width:44px;height:44px;align-items:center;justify-content:center;background:var(--color-surface);border:1px solid var(--color-border);border-radius:50%;cursor:pointer;transition:background .2s,border-color .2s;z-index:100;box-shadow:0 2px 8px #00000014}.back-btn.visible{display:flex}.back-btn:hover{background:var(--color-accent-light);border-color:var(--color-accent)}.back-btn svg{color:var(--color-text)}.gallery{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:200px;gap:16px}.gallery:empty{display:none}.gallery-item{position:relative;border-radius:var(--radius-md);overflow:hidden;background:var(--color-surface);box-shadow:0 2px 8px #00000014}.gallery-item img{width:100%;height:100%;object-fit:cover}.gallery-item .download-btn{position:absolute;bottom:12px;right:12px;display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:#fffffff2;border-radius:50%;color:var(--color-text);text-decoration:none;opacity:0;transform:translateY(4px);transition:opacity .2s,transform .2s,background .2s;box-shadow:0 2px 8px #00000026}.gallery-item:hover .download-btn{opacity:1;transform:translateY(0)}.gallery-item .download-btn:hover{background:var(--color-accent);color:#fff}.gallery-item.loading{background:linear-gradient(90deg,#f0f0f0 25%,#e8e8e8,#f0f0f0 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.error-message{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:16px;padding:32px 40px;background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:0 8px 32px #0000001f;text-align:center;z-index:200}.error-message svg{color:#d97706}.error-message p{font-size:15px;color:var(--color-text);max-width:280px;line-height:1.5}.error-message .error-dismiss{padding:10px 24px;background:var(--color-accent);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:background .2s}.error-message .error-dismiss:hover{background:var(--color-accent-hover)}@media (max-width: 900px){.gallery{grid-template-columns:repeat(2,1fr);grid-auto-rows:180px}}@media (max-width: 640px){.app{padding:20px 16px}.upload-zone{min-height:calc(100vh - 40px)}.gallery{grid-template-columns:1fr;grid-auto-rows:200px;gap:12px}}
