:root{--color-text: #111827;--color-text-secondary: #374151;--color-text-muted: #6b7280;--color-text-placeholder: #9ca3af;--color-bg-page: #f9fafb;--color-bg-surface: #fff;--color-bg-subtle: #f3f4f6;--color-bg-input: #f1f5f9;--color-border: #e5e7eb;--color-border-hover: #d1d5db;--color-primary: #1a1a2e;--color-primary-hover: #2d2d44;--color-accent: #6366f1;--color-accent-light: #f5f3ff;--color-accent-border: #c4b5fd;--color-accent-outline: rgba(99, 102, 241, .4);--color-accent-subtle: rgba(99, 102, 241, .12);--color-error: #b91c1c;--color-error-bg: #fee2e2;--color-error-border: #fca5a5;--color-error-text: #dc2626;--color-overlay: #111827;--color-on-primary: #fff;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-15: 60px;--radius-sm: 2px;--radius-md: 3px;--radius-btn: 6px;--radius-card: 8px;--radius-lg: 10px;--radius-full: 50%;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "Courier New", monospace;--text-xs: 11px;--text-sm: 12px;--text-base: 13px;--text-md: 14px;--text-lg: 18px;--text-xl: 24px;--header-height: 56px;--transition-fast: .1s;--transition-base: .15s}*,*:before,*:after{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%}body{font-family:var(--font-sans);font-size:var(--text-md);color:var(--color-text);background:var(--color-bg-page);-webkit-font-smoothing:antialiased}button,textarea,input{font-family:inherit}.app-header{display:flex;align-items:center;justify-content:space-between;height:var(--header-height);padding:0 var(--space-5);background:var(--color-bg-surface);border-bottom:1px solid var(--color-border);position:sticky;top:0;z-index:100}.app-header__logo{background:none;border:none;cursor:pointer;padding:0;display:flex;align-items:center;border-radius:var(--radius-full);transition:opacity var(--transition-base)}.app-header__logo:hover{opacity:.75}.app-header__export{background:var(--color-primary);color:var(--color-on-primary);border:none;padding:var(--space-2) var(--space-5);border-radius:var(--radius-btn);font-size:var(--text-md);font-weight:600;cursor:pointer;transition:background var(--transition-base)}.app-header__export:hover:not(:disabled){background:var(--color-primary-hover)}.app-header__export:disabled{background:var(--color-border);color:var(--color-text-muted);cursor:not-allowed}.template-preview{width:100%;height:100%;overflow:hidden;position:relative}.template-preview__canvas{content-visibility:auto}.template-card{background:var(--color-bg-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);overflow:hidden;cursor:pointer;text-align:left;padding:0;transition:box-shadow .2s,transform .2s;display:flex;flex-direction:column}.template-card:hover{box-shadow:0 8px 24px #0000001f;transform:translateY(-2px)}.template-card__preview{width:100%;aspect-ratio:3 / 4;overflow:hidden}.template-card__name{display:block;padding:var(--space-3) var(--space-4);font-size:var(--text-md);font-weight:500;color:var(--color-text-secondary);border-top:1px solid var(--color-border)}.gallery{max-width:900px;margin:0 auto;padding:var(--space-15) var(--space-6)}.gallery__title{font-size:var(--text-xl);font-weight:700;color:var(--color-text);text-align:center;margin:0 0 var(--space-10)}.gallery__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--space-6)}.toast{position:fixed;bottom:28px;left:50%;transform:translate(-50%) translateY(var(--space-4));background:var(--color-overlay);color:var(--color-on-primary);font-size:var(--text-md);font-weight:500;padding:var(--space-3) var(--space-5);border-radius:var(--radius-lg);display:flex;align-items:center;gap:var(--space-2);box-shadow:0 4px 20px #0003;opacity:0;transition:opacity .2s ease,transform .2s ease;pointer-events:none;z-index:999;white-space:nowrap}.toast--visible{opacity:1;transform:translate(-50%) translateY(0)}.error-boundary{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:calc(100vh - var(--header-height));padding:var(--space-6);background:var(--color-bg-page);text-align:center}.error-boundary__title{margin:0;font-size:1.125rem;font-weight:600;color:var(--color-text)}.error-boundary__message{margin:var(--space-2) 0 0;font-size:.9375rem;color:var(--color-text-muted);max-width:360px}.error-boundary__actions{display:flex;flex-wrap:wrap;gap:var(--space-3);margin-top:var(--space-5);justify-content:center}.error-boundary__btn{padding:var(--space-2) var(--space-4);font-size:.875rem;font-weight:500;border-radius:var(--radius-btn);cursor:pointer;border:none;font-family:inherit}.editor-route{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:calc(100vh - var(--header-height));padding:var(--space-6);background:var(--color-bg-page)}.editor-route__spinner{width:40px;height:40px;border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:var(--radius-full);animation:editor-route-spin .8s linear infinite}@keyframes editor-route-spin{to{transform:rotate(360deg)}}.editor-route__message{margin:var(--space-4) 0 0;font-size:.9375rem;color:var(--color-text-secondary)}.editor-route__message--error{color:var(--color-error);font-weight:500}.editor-route__actions{display:flex;flex-wrap:wrap;gap:var(--space-3);margin-top:var(--space-5);justify-content:center}.editor-route__retry{padding:var(--space-2) var(--space-4);font-size:.875rem;font-weight:500;color:var(--color-on-primary);background:var(--color-primary);border:none;border-radius:var(--radius-btn);cursor:pointer}.editor-route__retry:hover{background:var(--color-primary-hover)}.editor-route__back{font-size:.875rem;color:var(--color-text-muted);text-decoration:none}.editor-route__back:hover{text-decoration:underline;color:var(--color-primary)}
