@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap'); @import "tailwindcss"; html { height: 100%; height: -webkit-fill-available; } html, body, #root { height: 100%; min-height: 100dvh; overscroll-behavior: none; } html, body { overflow: hidden; } body { background-color: #f8fafc; } html.app-dark-shell, html.app-dark-shell body { background-color: #323232; } /* 可滚动区域隐藏滚动条 */ .scrollbar-hide { scrollbar-width: none; -ms-overflow-style: none; } .scrollbar-hide::-webkit-scrollbar { display: none; width: 0; height: 0; } .app-header-sticky { position: sticky; top: 0; z-index: 50; align-items: center !important; padding-top: calc(0.75rem + env(safe-area-inset-top, 0px)); padding-bottom: 0.75rem; } @theme { --font-sans: "Inter", ui-sans-serif, system-ui, sans-serif; --font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, monospace; /* Photoshop-like UI tokens */ --color-ps-bg: #323232; --color-ps-panel: #292929; --color-ps-header: #3c3c3c; --color-ps-border: #1a1a1a; --color-ps-workspace: #535353; --color-ps-accent: #31a8ff; --color-ps-text: #e8e8e8; --color-ps-muted: #999999; --color-ps-input: #1e1e1e; --color-ps-input-border: #4a4a4a; } /* ── Photoshop-style workspace ── */ .ps-workspace-bg { background-color: var(--color-ps-workspace); overscroll-behavior: none; } .ps-canvas-checker { background-color: #666; background-image: linear-gradient(45deg, #5a5a5a 25%, transparent 25%), linear-gradient(-45deg, #5a5a5a 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #5a5a5a 75%), linear-gradient(-45deg, transparent 75%, #5a5a5a 75%); background-size: 16px 16px; background-position: 0 0, 0 8px, 8px -8px, -8px 0; } .ps-toolbar { width: 42px; background: var(--color-ps-bg); border-right: 1px solid var(--color-ps-border); flex-shrink: 0; } .ps-tool-btn { display: flex; align-items: center; justify-content: center; width: 42px; height: 42px; color: #b8b8b8; cursor: pointer; border: none; background: transparent; transition: background 0.1s, color 0.1s; position: relative; } .ps-tool-btn:hover { background: #404040; color: #fff; } .ps-tool-btn.active { background: #1a1a1a; color: var(--color-ps-accent); } .ps-options-bar { height: 36px; background: var(--color-ps-header); border-bottom: 1px solid var(--color-ps-border); display: flex; align-items: center; padding: 0 12px; gap: 12px; flex-shrink: 0; color: var(--color-ps-text); font-size: 11px; } .ps-status-bar { height: 26px; background: var(--color-ps-bg); border-top: 1px solid var(--color-ps-border); display: flex; align-items: center; justify-content: space-between; padding: 0 10px; flex-shrink: 0; color: var(--color-ps-muted); font-size: 11px; } .ps-panel { width: 280px; background: var(--color-ps-panel); border-left: 1px solid var(--color-ps-border); display: flex; flex-direction: column; flex-shrink: 0; height: 100%; overflow: hidden; } .ps-sidebar-stack { display: flex; flex-direction: column; width: 280px; height: 100%; flex-shrink: 0; border-left: 1px solid var(--color-ps-border); background: var(--color-ps-panel); overflow: hidden; } .ps-export-sidebar { display: flex; flex-direction: column; width: 300px; height: 100%; flex-shrink: 0; border-left: 1px solid var(--color-ps-border); background: var(--color-ps-panel); overflow: hidden; } .ps-preview-toolbar { height: 36px; background: var(--color-ps-header); border-bottom: 1px solid var(--color-ps-border); display: flex; align-items: center; justify-content: space-between; padding: 0 12px; gap: 12px; flex-shrink: 0; } .ps-preview-zoom-btn { width: 22px; height: 22px; display: flex; align-items: center; justify-content: center; background: #383838; border: 1px solid #4a4a4a; border-radius: 2px; color: #ccc; font-size: 12px; font-weight: 700; cursor: pointer; } .ps-preview-zoom-btn:hover:not(:disabled) { background: #444; border-color: rgba(49, 168, 255, 0.35); } .ps-preview-zoom-btn:disabled { opacity: 0.35; cursor: not-allowed; } .ps-preview-preset-btn { padding: 2px 8px; font-size: 10px; border: 1px solid #4a4a4a; border-radius: 2px; background: #383838; color: #999; cursor: pointer; } .ps-preview-preset-btn:hover { color: #ccc; } .ps-preview-preset-btn.active { background: #1a3a4f; border-color: rgba(49, 168, 255, 0.5); color: var(--color-ps-accent); } .ps-panel-section { display: flex; flex-direction: column; min-height: 0; border-bottom: 1px solid var(--color-ps-border); } .ps-panel-section.collapsed { flex: 0 0 auto; } /* 展开的模块等分侧栏剩余高度 */ .ps-panel-section:not(.collapsed) { flex: 1 1 0; min-height: 0; } .ps-panel-section:not(.collapsed)>.ps-panel-scroll { flex: 1 1 0; min-height: 0; } /* 面板内容区:可滚动、隐藏滚动条 */ .ps-panel-scroll { overflow-y: auto; overflow-x: hidden; overscroll-behavior: contain; scrollbar-width: none; -ms-overflow-style: none; } .ps-panel-scroll::-webkit-scrollbar { display: none; width: 0; height: 0; } .ps-panel-header { height: 28px; background: var(--color-ps-header); border-bottom: 1px solid var(--color-ps-border); display: flex; align-items: center; padding: 0 10px; gap: 6px; flex-shrink: 0; color: var(--color-ps-text); font-size: 11px; font-weight: 600; letter-spacing: 0.02em; user-select: none; } .ps-panel-header-toggle { width: 100%; border: none; margin: 0; cursor: pointer; transition: background 0.1s; font-family: inherit; } .ps-panel-header-toggle:hover { background: #454545; } .ps-panel-section.collapsed .ps-panel-header-toggle { border-bottom: none; } .ps-panel-body { color: var(--color-ps-text); overscroll-behavior: none; min-width: 0; } .ps-panel-body input[type="number"], .ps-panel-body input[type="text"], .ps-panel-body textarea, .ps-panel-body select { background: var(--color-ps-input); border-color: var(--color-ps-input-border); color: var(--color-ps-text); } .ps-panel-body input[type="number"]:focus, .ps-panel-body input[type="text"]:focus, .ps-panel-body textarea:focus, .ps-panel-body select:focus { border-color: var(--color-ps-accent); outline: none; } .ps-panel-body label { color: var(--color-ps-muted); } .ps-panel-body h4, .ps-panel-body h5 { color: var(--color-ps-accent); } .ps-field-label { display: block; font-size: 10px; font-weight: 600; color: #777; margin-bottom: 0.25rem; } .ps-field { width: 100%; padding: 0.375rem 0.625rem; background: var(--color-ps-input); border: 1px solid var(--color-ps-input-border); border-radius: 0.25rem; font-size: 0.75rem; color: var(--color-ps-text); } .ps-field.font-mono { font-family: var(--font-mono); } .ps-field:is(select), .ps-select-trigger.ps-field, .ps-field.ps-select-trigger, .ps-panel-body select:not(.mobile-field), .ps-modal select { -webkit-appearance: none; appearance: none; color-scheme: dark; background-color: var(--color-ps-input); padding-right: calc(0.625rem + 0.75rem + 0.625rem); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999999' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 0.625rem center; background-size: 0.65rem; cursor: pointer; } .ps-select-trigger { display: flex; align-items: center; width: 100%; text-align: left; box-sizing: border-box; } .ps-select-trigger-label { flex: 1; min-width: 0; } .ps-select-panel { box-sizing: border-box; background: var(--color-ps-input); border: 1px solid var(--color-ps-input-border); border-radius: 0.25rem; box-shadow: 0 10px 28px rgba(0, 0, 0, 0.45); max-height: min(240px, 50vh); overflow-y: auto; overscroll-behavior: contain; padding: 0.25rem 0; } .ps-select-option { display: block; width: 100%; padding: 0.375rem 0.625rem; text-align: left; font-size: 0.75rem; line-height: 1.4; color: var(--color-ps-text); background: transparent; border: none; cursor: pointer; } .ps-select-option:hover:not(:disabled) { background: #2d2d2d; } .ps-select-option.selected { color: var(--color-ps-accent); background: #2d2d2d; } .ps-select-option:disabled { opacity: 0.45; cursor: not-allowed; } .ps-field:is(select) option, .ps-panel-body select:not(.mobile-field) option, .ps-modal select option { background-color: var(--color-ps-input); color: var(--color-ps-text); } .ps-field:is(select) option:checked, .ps-panel-body select:not(.mobile-field) option:checked, .ps-modal select option:checked { background-color: #2d2d2d; color: var(--color-ps-accent); } .ps-field:focus { border-color: var(--color-ps-accent); outline: none; } .ps-field:disabled { opacity: 0.5; cursor: not-allowed; } /* 数值输入框步进按钮与 ps-field 暗色风格一致 */ .ps-field[type='number'], .ps-panel-body input[type='number'], .ps-modal input[type='number'] { color-scheme: dark; } .ps-field[type='number']::-webkit-inner-spin-button, .ps-panel-body input[type='number']::-webkit-inner-spin-button, .ps-modal input[type='number']::-webkit-inner-spin-button { opacity: 1; cursor: pointer; margin: 0; align-self: stretch; } .ps-field[type='number']::-webkit-outer-spin-button, .ps-panel-body input[type='number']::-webkit-outer-spin-button, .ps-modal input[type='number']::-webkit-outer-spin-button { opacity: 1; margin: 0; } .color-input { --color-input-radius: 0.25rem; --color-input-border: var(--color-ps-input-border); --color-input-size: calc(0.75rem * 1.5 + 0.375rem * 2); -webkit-appearance: none; appearance: none; box-sizing: border-box; width: var(--color-input-size); min-width: var(--color-input-size); height: var(--color-input-size); min-height: var(--color-input-size); padding: 0; border: 1px solid var(--color-input-border); border-radius: var(--color-input-radius); background: transparent; cursor: pointer; overflow: hidden; flex-shrink: 0; vertical-align: middle; } .color-input:focus { border-color: var(--color-ps-accent); outline: none; } .color-input::-webkit-color-swatch-wrapper { padding: 0; margin: 0; width: 100%; height: 100%; border: none; } .color-input::-webkit-color-swatch { border: none; border-radius: 0; width: 100%; height: 100%; } .color-input::-moz-color-swatch { border: none; border-radius: 0; width: 100%; height: 100%; } /* mobile-field 行内与输入框同高(44px);ps-field 使用默认 calc 与 ps-field 一致 */ .flex:has(.mobile-field)>.color-input { --color-input-radius: 10px; --color-input-border: #e2e8f0; --color-input-size: 44px; } .ps-section-title { font-size: 10px; font-weight: 700; color: var(--color-ps-accent); text-transform: uppercase; letter-spacing: 0.05em; display: flex; align-items: center; gap: 0.375rem; } .ps-section-divider { border-top: 1px solid #3a3a3a; padding-top: 0.75rem; } .ps-btn { padding: 0.375rem 0.625rem; background: #383838; border: 1px solid #4a4a4a; color: #ccc; font-size: 0.75rem; font-weight: 600; border-radius: 0.25rem; cursor: pointer; transition: background 0.1s, border-color 0.1s, color 0.1s; display: inline-flex; align-items: center; justify-content: center; gap: 0.25rem; } .ps-btn:hover { background: #444; border-color: rgba(49, 168, 255, 0.35); } .ps-btn.active { background: #1a3a4f; border-color: rgba(49, 168, 255, 0.5); color: var(--color-ps-accent); } .ps-btn-primary { background: #1a4a6e; border-color: rgba(49, 168, 255, 0.55); color: #e8f4ff; } .ps-btn-primary:hover:not(:disabled) { background: #1f5680; border-color: rgba(49, 168, 255, 0.75); color: #fff; } .ps-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; } /* Photoshop 风格弹窗 */ .ps-modal-overlay { position: fixed; inset: 0; z-index: 9000; display: flex; align-items: center; justify-content: center; padding: 1rem; background: rgba(0, 0, 0, 0.65); backdrop-filter: blur(2px); } .ps-modal { width: 100%; max-width: 22rem; background: var(--color-ps-panel); border: 1px solid var(--color-ps-border); border-radius: 0.375rem; box-shadow: 0 16px 48px rgba(0, 0, 0, 0.55); overflow: hidden; } .ps-modal-header { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; height: 2.25rem; padding: 0 0.75rem; background: var(--color-ps-header); border-bottom: 1px solid var(--color-ps-border); } .ps-modal-title { font-size: 11px; font-weight: 600; color: var(--color-ps-text); letter-spacing: 0.02em; } .ps-modal-close { padding: 0.25rem; color: #888; border-radius: 0.25rem; cursor: pointer; transition: color 0.1s, background 0.1s; } .ps-modal-close:hover { color: #ccc; background: #454545; } .ps-modal-body { padding: 0.875rem; color: var(--color-ps-text); } .ps-modal-footer { display: flex; justify-content: flex-end; gap: 0.5rem; padding: 0.625rem 0.875rem; border-top: 1px solid #3a3a3a; background: #242424; } .visibility-rule-summary { display: flex; align-items: center; gap: 0.375rem; min-width: 0; padding: 0.5rem 0.625rem; background: #262626; border: 1px solid #3a3a3a; border-radius: 0.25rem; transition: border-color 0.1s, background 0.1s; } .visibility-rule-summary:hover { border-color: rgba(49, 168, 255, 0.35); background: #2a2a2a; } .visibility-rule-summary.is-disabled { opacity: 0.62; background: #222; } .visibility-rule-summary.is-disabled .visibility-rule-summary-text { color: #777; text-decoration: line-through; } .visibility-rule-summary.is-disabled .visibility-rule-summary-text .var-token { color: #5a8fb0; } .visibility-rule-summary-btn { flex: 1; min-width: 0; text-align: left; background: none; border: none; padding: 0; cursor: pointer; color: inherit; font: inherit; } .visibility-rule-summary-text { font-size: 10px; line-height: 1.45; color: #ccc; word-break: break-all; } .visibility-rule-summary-text .var-token { font-family: var(--font-mono); color: var(--color-ps-accent); font-weight: 600; } .ps-toggle-group { display: flex; border-radius: 0.25rem; border: 1px solid #4a4a4a; padding: 2px; background: #2a2a2a; } .ps-toggle-btn { padding: 0.375rem; border-radius: 0.125rem; cursor: pointer; color: #777; transition: background 0.1s, color 0.1s; border: none; background: transparent; } .ps-toggle-btn:hover { color: #ccc; } .ps-toggle-btn.active { background: #1a3a4f; color: var(--color-ps-accent); } .ps-range { width: 100%; accent-color: var(--color-ps-accent); height: 4px; cursor: pointer; } .ps-checkbox { accent-color: var(--color-ps-accent); width: 14px; height: 14px; border-radius: 2px; cursor: pointer; } .ps-layer-item { display: flex; align-items: center; justify-content: space-between; padding: 4px 8px; font-size: 11px; cursor: pointer; user-select: none; border-bottom: 1px solid #222; color: #ccc; transition: background 0.1s; } .ps-layer-item:hover { background: #383838; } .ps-layer-item.selected { background: #3d4f5f; color: #fff; } .ps-layer-item-locked { cursor: default; color: #888; } .ps-layer-item-locked:hover { background: transparent; } .ps-marquee-select { position: absolute; border: 1px solid #31a8ff; background: rgba(49, 168, 255, 0.12); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.25); pointer-events: none; z-index: 9999; } .ps-selection-ring { outline: 1px solid var(--color-ps-accent); outline-offset: 0; } .ps-unselected-dim-layer { position: absolute; inset: 0; overflow: hidden; pointer-events: none; z-index: 2; opacity: 0; transition: opacity 0.12s ease; } .ps-unselected-dim-layer--visible { opacity: 1; } .ps-unselected-dim { position: absolute; background: rgba(255, 255, 255, 0.3); } .ps-selected-lift-layer { position: absolute; inset: 0; overflow: hidden; pointer-events: none; z-index: 3; } .ps-handle { position: absolute; width: 8px; height: 8px; background: #fff; border: 1px solid var(--color-ps-accent); z-index: 50; touch-action: none; } .ps-design-canvas-touch { touch-action: pan-x pan-y; } .ps-design-canvas-touch [data-label-element], .ps-design-canvas-touch .ps-handle, .ps-design-canvas-touch .touch-none { touch-action: none; } .ps-status-bar-compact { font-size: 10px; gap: 8px; padding: 0 8px; } @media (max-width: 1023px) { .ps-handle { width: 18px; height: 18px; } .ps-status-bar { flex-wrap: nowrap; } } .ps-zoom-control { display: flex; align-items: center; gap: 2px; background: #1e1e1e; border: 1px solid #4a4a4a; border-radius: 2px; padding: 1px; } .ps-zoom-btn { display: flex; align-items: center; justify-content: center; width: 22px; height: 20px; color: #b8b8b8; background: transparent; border: none; cursor: pointer; border-radius: 1px; } .ps-zoom-btn:hover { background: #404040; color: #fff; } /* Elegant Bento Dotted Background Pattern */ .bg-bento-dots { background-color: #f8fafc; background-image: radial-gradient(#cbd5e1 1px, transparent 1px); background-size: 24px 24px; } /* ── Mobile layout (< 768px) ── */ @media (max-width: 767px) { /* Mobile export flow — shares mobile-design-view shell */ .mobile-export-view { flex: 1; min-height: 0; } .mobile-export-back { display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; border: none; border-radius: 8px; background: transparent; color: #ccc; cursor: pointer; flex-shrink: 0; } .mobile-export-back:active { background: rgba(255, 255, 255, 0.08); } .mobile-export-preview-wrap { background: #2a2a2a; } .mobile-export-preview-wrap .mobile-preview-toolbar { padding: 6px 10px; min-height: 36px; } .mobile-export-preview-wrap .mobile-preview-workspace { background: #2a2a2a; } .mobile-export-preview-wrap .mobile-preview-status { padding: 4px 10px; font-size: 10px; } .mobile-export-props-nav { width: 76px; } .mobile-export-props-nav-btn { min-height: 68px; font-size: 9px; line-height: 1.25; white-space: normal; text-align: center; } .mobile-export-props-nav-btn span { max-width: 100%; } .mobile-export-steps { display: flex; align-items: center; justify-content: center; gap: 0; padding: 12px 16px; background: #fff; border-bottom: 1px solid #e2e8f0; flex-shrink: 0; } .mobile-export-step { display: flex; flex-direction: column; align-items: center; gap: 4px; font-size: 11px; font-weight: 600; color: #94a3b8; min-width: 52px; } .mobile-export-step.active { color: #4f46e5; } .mobile-export-step.done { color: #059669; } .mobile-export-step-line { flex: 1; max-width: 40px; height: 2px; background: #e2e8f0; margin: 0 4px; margin-bottom: 18px; } .mobile-step-badge { display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 999px; background: #f1f5f9; color: #94a3b8; font-size: 12px; font-weight: 700; } .mobile-step-badge.active { background: #eef2ff; color: #4f46e5; border: 2px solid #818cf8; } .mobile-step-badge.done { background: #ecfdf5; color: #059669; border: none; } .mobile-export-content { flex: 1 1 auto; min-height: 0; overflow-y: auto; scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; padding: 16px; padding-bottom: 20px; display: block; } .mobile-export-content::-webkit-scrollbar { display: none; width: 0; height: 0; } .mobile-export-content>.mobile-export-card+.mobile-export-card { margin-top: 16px; } .mobile-export-card { flex-shrink: 0; background: #fff; border-radius: 16px; padding: 0; overflow: visible; box-shadow: 0 1px 3px rgba(15, 23, 42, 0.06); border: 1px solid #e2e8f0; } .mobile-export-card-body { padding: 18px 18px 20px; min-width: 0; } .mobile-export-card-locked { opacity: 0.72; } .mobile-export-card-head { display: flex; align-items: flex-start; gap: 10px; padding: 14px 18px; background: linear-gradient(180deg, #f8fafc 0%, #f1f5f9 100%); border-bottom: 1px solid #e8edf3; border-radius: 16px 16px 0 0; } .mobile-export-card-head h2 { font-size: 14px; font-weight: 700; color: #0f172a; line-height: 1.25; } .mobile-export-card-head p { font-size: 12px; color: #64748b; margin-top: 2px; } .mobile-export-icon-btn { display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 36px; height: 36px; border: 1px solid #e2e8f0; border-radius: 10px; background: #fff; color: #4f46e5; cursor: pointer; } .mobile-export-icon-btn:active { background: #eef2ff; border-color: #c7d2fe; } .mobile-export-hint { font-size: 14px; line-height: 1.5; color: #94a3b8; text-align: center; padding: 20px 12px; margin: 0; background: #f8fafc; border-radius: 12px; border: 1px dashed #e2e8f0; } .mobile-upload-zone { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; min-height: 128px; padding: 24px 12px; text-align: center; cursor: pointer; border: none; border-radius: 0; background: transparent; transition: opacity 0.15s; } .mobile-upload-zone.active { opacity: 0.65; } .mobile-file-card { display: flex; flex-direction: column; align-items: stretch; gap: 12px; min-width: 0; width: 100%; padding: 0; background: transparent; border: none; border-radius: 0; } .mobile-secondary-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 44px; padding: 0 16px; font-size: 13px; font-weight: 600; color: #475569; background: #fff; border: 1px solid #e2e8f0; border-radius: 10px; cursor: pointer; } .mobile-secondary-btn:active { background: #f8fafc; } .mobile-text-btn { display: inline-flex; align-items: center; gap: 4px; min-height: 40px; padding: 0 12px; font-size: 13px; font-weight: 600; border: none; border-radius: 8px; background: transparent; cursor: pointer; } .mobile-text-btn.danger { color: #e11d48; } .mobile-text-btn.danger:active { background: #fff1f2; } .mobile-field { display: block; width: 100%; min-height: 44px; padding: 10px 12px; font-size: 15px; color: #0f172a; background: #fff; border: 1px solid #e2e8f0; border-radius: 10px; -webkit-appearance: none; appearance: none; } select.mobile-field { padding-right: calc(12px + 0.75rem + 12px); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; background-size: 0.75rem; cursor: pointer; } .mobile-field:focus { outline: none; border-color: #818cf8; box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15); } .mobile-field-label { display: block; font-size: 12px; font-weight: 600; color: #64748b; margin-bottom: 6px; } .mobile-mapping-list { display: flex; flex-direction: column; } .mobile-mapping-row { display: flex; flex-direction: column; gap: 8px; padding: 16px 0; border-bottom: 1px solid #f1f5f9; } .mobile-mapping-row:last-child { padding-bottom: 0; border-bottom: none; } .mobile-field-plain { background: #f8fafc; border-color: transparent; } .mobile-field-plain:focus { background: #fff; border-color: #c7d2fe; box-shadow: none; } .mobile-export-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 4px; } .mobile-export-stat { display: flex; flex-direction: column; align-items: center; padding: 14px 10px; background: #f8fafc; border-radius: 12px; border: 1px solid #e2e8f0; } .mobile-export-stat-value { font-size: 18px; font-weight: 800; color: #4f46e5; line-height: 1.1; } .mobile-export-stat-label { font-size: 10px; font-weight: 600; color: #94a3b8; margin-top: 4px; text-align: center; } .mobile-export-props-card:not(.is-open) .mobile-export-props-head { border-bottom: none; border-radius: 16px; } .mobile-export-props-head { width: 100%; border: none; cursor: pointer; font: inherit; color: inherit; } .mobile-export-props-head:disabled { cursor: default; } .mobile-export-props-head:not(:disabled):active { background: linear-gradient(180deg, #f1f5f9 0%, #e8edf3 100%); } .mobile-paper-section-title { font-size: 12px; font-weight: 700; color: #475569; margin: 0 0 8px; } .flex:has(.mobile-field)>.color-input:focus { border-color: #818cf8; box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15); } .mobile-export-footer { flex-shrink: 0; padding: 12px 16px; padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px)); background: rgba(255, 255, 255, 0.92); border-top: 1px solid #e2e8f0; backdrop-filter: blur(10px); } .mobile-export-footer-hint { font-size: 12px; color: #94a3b8; text-align: center; margin-bottom: 8px; } .mobile-export-submit { display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; min-height: 50px; padding: 0 20px; font-size: 15px; font-weight: 700; color: #fff; background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%); border: none; border-radius: 14px; cursor: pointer; box-shadow: 0 4px 14px rgba(79, 70, 229, 0.35); transition: opacity 0.15s, transform 0.1s; } .mobile-export-submit:active:not(:disabled) { transform: scale(0.98); } .mobile-export-submit:disabled { background: #cbd5e1; color: #94a3b8; box-shadow: none; cursor: not-allowed; } .mobile-template-header:not(.mobile-template-header-row) { flex-direction: column; align-items: stretch !important; gap: 8px !important; } .mobile-template-header.mobile-template-header-row { flex-direction: row !important; flex-wrap: nowrap !important; align-items: center !important; justify-content: space-between !important; gap: 12px !important; } .mobile-template-header h1 span:first-child { font-size: 12px; } .mobile-header-menu-btn { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border: none; border-radius: 12px; background: rgba(255, 255, 255, 0.12); color: #fff; cursor: pointer; transition: background 0.15s; } .mobile-header-menu-btn:active { background: rgba(255, 255, 255, 0.22); } .mobile-template-actions { width: 100%; flex-wrap: nowrap; gap: 10px; } .mobile-template-actions .mobile-primary-btn, .mobile-template-actions .mobile-secondary-btn { flex: 1; min-width: 0; } .mobile-template-actions .mobile-icon-btn:active { transform: scale(0.97); } .mobile-design-view { flex: 1; display: flex; flex-direction: column; min-height: 0; background: #323232; color: #e8e8e8; } .mobile-design-header { display: flex; align-items: center; gap: 8px; padding: 10px 12px; padding-top: calc(10px + env(safe-area-inset-top, 0px)); background: #292929; border-bottom: 1px solid #1a1a1a; flex-shrink: 0; } .mobile-design-header-icon-btn { display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; border: none; border-radius: 8px; background: transparent; color: #ccc; cursor: pointer; } .mobile-design-header-icon-btn:active:not(:disabled) { background: rgba(255, 255, 255, 0.08); } .mobile-design-header-icon-btn:disabled { opacity: 0.35; cursor: not-allowed; } .mobile-design-canvas-wrap { flex: 1 1 42%; min-height: 180px; max-height: 52vh; display: flex; flex-direction: column; min-width: 0; overflow: hidden; border-bottom: 1px solid #1a1a1a; } .mobile-design-canvas-shell { flex: 1; min-height: 0; } .mobile-design-canvas-wrap:has([data-interaction-active]), .mobile-design-canvas-shell-interaction { overflow: visible; } .mobile-design-props-wrap { flex: 1 1 48%; min-height: 220px; display: flex; flex-direction: column; min-width: 0; overflow: hidden; background: #292929; } .mobile-design-props { display: flex; flex: 1; min-height: 0; min-width: 0; } .mobile-design-props-nav { display: flex; flex-direction: column; gap: 4px; width: 64px; flex-shrink: 0; padding: 8px 6px; background: #252525; border-right: 1px solid #1a1a1a; } .mobile-design-props-nav-spacer { flex: 1; min-height: 8px; } .mobile-design-props-nav-delete:disabled { opacity: 0.35; cursor: not-allowed; } .mobile-design-props-nav-delete:not(:disabled) { color: #e57373; } .mobile-design-props-nav-delete:not(:disabled).active, .mobile-design-props-nav-delete:not(:disabled):active { background: rgba(239, 68, 68, 0.18); color: #fca5a5; } .mobile-design-props-nav-btn { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; min-height: 56px; padding: 6px 4px; border: none; border-radius: 10px; background: transparent; color: #888; font-size: 10px; font-weight: 600; cursor: pointer; } .mobile-design-props-nav-btn.active { background: #1e3a4f; color: #31a8ff; } .mobile-design-props-panel { flex: 1; min-width: 0; overflow-y: auto; scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } .mobile-design-props-panel::-webkit-scrollbar { display: none; } .mobile-layers-panel .ps-layer-item .opacity-0 { opacity: 1; } .mobile-design-toolstrip { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 6px 10px; background: #292929; border-top: 1px solid #1a1a1a; flex-shrink: 0; } .mobile-design-toolstrip-tools { display: flex; align-items: center; gap: 4px; overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none; min-width: 0; flex: 1; } .mobile-design-toolstrip-tools::-webkit-scrollbar { display: none; } .mobile-design-tool-btn { width: 40px !important; height: 40px !important; min-height: 40px !important; flex-shrink: 0; } .mobile-nudge-panel { display: flex; flex-direction: column; align-items: stretch; min-height: 100%; padding-bottom: 12px; } .mobile-nudge-header { width: 100%; text-align: left; } .mobile-nudge-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; flex: 1; min-height: 160px; text-align: center; } .mobile-nudge-pad { display: flex; flex-direction: column; align-items: center; align-self: center; gap: 8px; margin: 8px 0 20px; } .mobile-nudge-pad-row { display: flex; align-items: center; gap: 8px; } .mobile-nudge-pad-center { width: 52px; height: 52px; border-radius: 12px; background: #333; border: 1px dashed #4a4a4a; } .mobile-nudge-btn { display: flex; align-items: center; justify-content: center; width: 52px; height: 52px; border: 1px solid #4a4a4a; border-radius: 12px; background: #383838; color: #ddd; cursor: pointer; touch-action: manipulation; -webkit-tap-highlight-color: transparent; transition: background 0.15s, border-color 0.15s, color 0.15s; } .mobile-nudge-btn:active { background: #1e3a4f; border-color: #31a8ff; color: #fff; } .mobile-nudge-info { align-self: center; width: 100%; max-width: 240px; padding: 12px 14px; border-radius: 10px; background: #222222; /* border: 1px solid #1f1f1f; */ text-align: center; } } @media (min-width: 768px) { .mobile-only { display: none !important; } .mobile-export-view { display: none !important; } }