/* ===================================================== CASTAD Design System - CSS Variables & Component Classes ===================================================== */ /* ===================================================== CSS Variables - Design Tokens ===================================================== */ :root { /* Primary Colors */ --color-mint: #a6ffea; --color-mint-hover: #8affda; --color-mint-glow: rgba(166, 255, 234, 0.6); --color-mint-10: rgba(166, 255, 234, 0.1); --color-mint-20: rgba(166, 255, 234, 0.2); --color-mint-30: rgba(166, 255, 234, 0.3); --color-mint-50: rgba(166, 255, 234, 0.5); --color-purple: #a682ff; --color-purple-hover: #9570f0; --color-purple-glow: rgba(166, 130, 255, 0.2); --color-purple-80: rgba(166, 130, 255, 0.8); /* Background Colors - Teal-600 based */ --color-bg-dark: #002224; --color-bg-darker: #001a1c; --color-bg-card: #003538; --color-bg-card-inner: #004548; /* Text Colors */ --color-text-white: #ffffff; --color-text-gray-300: #d1d5db; --color-text-gray-400: #9ca3af; --color-text-gray-500: #6b7280; /* Border Colors */ --color-border-white-5: rgba(255, 255, 255, 0.05); --color-border-white-10: rgba(255, 255, 255, 0.1); --color-border-gray-600: #4b5563; --color-border-gray-700: #374151; /* Shadows */ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); --shadow-purple: 0 10px 15px -3px rgba(166, 130, 255, 0.2); --shadow-mint-glow: 0 0 10px rgba(166, 255, 234, 0.6); /* Spacing */ --spacing-page: 1.5rem; --spacing-page-md: 2rem; /* Border Radius */ --radius-sm: 0.5rem; --radius-md: 0.75rem; --radius-lg: 1rem; --radius-xl: 1.25rem; --radius-2xl: 1rem; --radius-3xl: 1.5rem; --radius-full: 9999px; /* Font Sizes */ --text-xs: 0.75rem; --text-sm: 0.875rem; --text-base: 1rem; --text-lg: 1.125rem; --text-xl: 1.25rem; --text-2xl: 1.5rem; --text-3xl: 1.875rem; --text-4xl: 2.25rem; /* Transitions */ --transition-fast: 150ms; --transition-normal: 200ms; --transition-slow: 300ms; } /* ===================================================== Layout Components ===================================================== */ /* Landing Page Container - Free Scroll */ .landing-container { width: 100%; height: 100dvh; overflow-y: scroll; overflow-x: hidden; background-color: var(--color-bg-darker); } .landing-section { min-height: 100dvh; width: 100%; } /* Page Container */ .page-container { display: flex; flex-direction: column; height: 100%; padding: var(--spacing-page); overflow: hidden; background-color: #002224; position: relative; } @media (min-width: 768px) { .page-container { padding: var(--spacing-page-md); } } /* Page Container - Full Height with Background */ .page-container-full { width: 100%; min-height: 100dvh; color: var(--color-text-white); display: flex; flex-direction: column; padding: var(--spacing-page); background-color: var(--color-bg-dark); } @media (min-width: 768px) { .page-container-full { padding: var(--spacing-page-md); } } @media (min-width: 1024px) { .page-container-full { padding: 2.5rem; } } /* Wizard Page Container - 단계별 페이지 전환용 */ .wizard-page-container { width: 100%; height: 100%; display: flex; flex-direction: column; background-color: #002224; overflow-y: auto; } /* Main Content Area */ .main-content { flex: 1; display: flex; flex-direction: column; gap: 1.5rem; max-width: 72rem; margin-left: auto; margin-right: auto; width: 100%; min-height: 0; overflow: hidden; } @media (min-width: 1024px) { .main-content { flex-direction: row; } } /* Dashboard Layout */ .dashboard-layout { display: flex; width: 100%; min-height: 100dvh; background-color: var(--color-bg-darker); color: var(--color-text-white); } .dashboard-content { flex: 1; min-height: 0; position: relative; overflow-y: auto; padding-left: 0; } /* ===================================================== Card Components ===================================================== */ /* Base Card */ .card { background-color: var(--color-bg-card); border-radius: var(--radius-3xl); padding: var(--spacing-page); border: 1px solid var(--color-border-white-5); box-shadow: var(--shadow-xl); } @media (min-width: 768px) { .card { padding: var(--spacing-page-md); } } /* Card Variants */ .card-flex { display: flex; flex-direction: column; } .card-flex-1 { flex: 1; } .card-flex-2 { flex: 2; } .card-overflow-hidden { overflow: hidden; } /* Card Inner (Darker Background) */ .card-inner { background-color: rgba(18, 26, 29, 0.5); border-radius: var(--radius-2xl); border: 1px solid var(--color-border-white-5); padding: 1rem; } /* ===================================================== Header Components ===================================================== */ /* Page Header */ .page-header { text-align: center; margin-bottom: 2rem; flex-shrink: 0; } /* Page Title */ .page-title { font-size: var(--text-3xl); font-weight: 700; margin-bottom: 0.5rem; letter-spacing: -0.025em; } @media (min-width: 768px) { .page-title { font-size: var(--text-4xl); } } /* Page Subtitle */ .page-subtitle { color: var(--color-text-gray-400); font-size: var(--text-base); } @media (min-width: 768px) { .page-subtitle { font-size: var(--text-lg); } } /* Section Title (Mint color uppercase) */ .section-title { color: #94FBE0; font-size: 16px; font-weight: 600; letter-spacing: -0.006em; margin-bottom: 0; flex-shrink: 0; } /* Section Title Purple */ .section-title-purple { color: #AE72F9; font-size: 16px; font-weight: 600; letter-spacing: -0.006em; margin-bottom: 0; display: block; } /* ===================================================== Button Components ===================================================== */ /* Primary Button (Purple) */ .btn-primary { background-color: var(--color-purple); color: var(--color-text-white); font-weight: 700; padding: 1rem 4rem; border-radius: var(--radius-full); transition: all var(--transition-normal); transform: scale(1); box-shadow: var(--shadow-purple); font-size: var(--text-lg); border: none; cursor: pointer; } .btn-primary:hover { background-color: var(--color-purple-hover); } .btn-primary:active { transform: scale(0.95); } .btn-primary:disabled { background-color: #4b5563; color: var(--color-text-gray-400); cursor: not-allowed; box-shadow: none; } /* Secondary Button (Mint) */ .btn-secondary { background-color: var(--color-mint); color: var(--color-bg-dark); font-weight: 700; padding: 1rem; border-radius: var(--radius-xl); transition: all var(--transition-normal); transform: scale(1); font-size: var(--text-base); border: none; cursor: pointer; width: 100%; display: flex; align-items: center; justify-content: center; gap: 0.5rem; } .btn-secondary:hover { background-color: var(--color-mint-hover); } .btn-secondary:active { transform: scale(0.98); } .btn-secondary:disabled { background-color: rgba(166, 255, 234, 0.5); color: rgba(18, 26, 29, 0.5); cursor: not-allowed; } /* Outline Button */ .btn-outline { background-color: transparent; border: 1px solid var(--color-border-gray-600); color: var(--color-text-white); font-weight: 700; padding: 1rem 4rem; border-radius: var(--radius-full); transition: all var(--transition-normal); font-size: var(--text-base); cursor: pointer; } .btn-outline:hover { border-color: var(--color-text-gray-500); } /* Back Button */ .btn-back { display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 1.25rem; border-radius: var(--radius-full); border: 1px solid var(--color-border-gray-600); background-color: transparent; color: var(--color-text-gray-300); font-size: var(--text-base); transition: background-color var(--transition-normal); cursor: pointer; } .btn-back:hover { background-color: rgba(31, 41, 55, 1); } /* Regenerate Button (Mint Outline) */ .btn-regenerate { margin-top: 1rem; width: 100%; padding: 0.75rem; background-color: var(--color-mint-20); color: var(--color-mint); border: 1px solid var(--color-mint-30); font-weight: 700; border-radius: var(--radius-xl); transition: background-color var(--transition-normal); font-size: var(--text-base); flex-shrink: 0; cursor: pointer; } .btn-regenerate:hover { background-color: var(--color-mint-30); } .btn-regenerate:disabled { opacity: 0.5; cursor: not-allowed; } /* Selection Button */ .btn-select { padding: 0.75rem; border-radius: var(--radius-xl); border: 1px solid var(--color-border-gray-700); background-color: rgba(18, 26, 29, 0.4); color: var(--color-text-gray-400); font-size: var(--text-sm); font-weight: 700; transition: all var(--transition-normal); cursor: pointer; } .btn-select:hover { border-color: var(--color-border-gray-600); } .btn-select.active { border-color: var(--color-mint); background-color: var(--color-bg-dark); color: var(--color-mint); } .btn-select:disabled { opacity: 0.5; cursor: not-allowed; } /* ===================================================== Form Components ===================================================== */ /* Select Input */ .select-input { width: 100%; padding: 0.75rem 1rem; border-radius: var(--radius-xl); background-color: var(--color-bg-dark); border: 1px solid var(--color-border-gray-700); font-size: var(--text-base); color: var(--color-text-gray-300); } .select-input:focus { outline: none; border-color: var(--color-mint); } .select-input:disabled { opacity: 0.5; cursor: not-allowed; } /* Text Input */ .text-input { width: 100%; padding: 0.75rem 1rem; border-radius: var(--radius-xl); background-color: var(--color-bg-dark); border: 1px solid var(--color-border-gray-700); font-size: var(--text-base); color: var(--color-text-gray-300); } .text-input:focus { outline: none; border-color: var(--color-mint); } /* Textarea - Lyrics */ .textarea-lyrics { flex: 1; overflow-y: auto; font-size: var(--text-sm); color: var(--color-text-gray-400); background-color: transparent; resize: none; border: none; padding-right: 0.5rem; line-height: 1.625; min-height: 0; } .textarea-lyrics:focus { outline: none; color: var(--color-text-gray-300); } /* ===================================================== Navigation Components ===================================================== */ /* Back Button Container */ .back-button-container { width: 100%; max-width: 1040px; display: flex; justify-content: flex-start; margin-bottom: 1.5rem; flex-shrink: 0; } /* Bottom Button Container */ .bottom-button-container { display: flex; justify-content: center; padding: 1.5rem; flex-shrink: 0; } /* ===================================================== Sidebar Components ===================================================== */ /* Sidebar Container */ .sidebar { position: fixed; height: 100vh; display: flex; flex-direction: column; background-color: var(--color-bg-dark); border-right: 1px solid var(--color-border-white-5); transition: all var(--transition-slow); z-index: 50; } @media (min-width: 768px) { .sidebar { position: sticky; top: 0; flex-shrink: 0; } } .sidebar.expanded { width: 15rem; } .sidebar.collapsed { width: 5rem; } .sidebar.mobile-open { transform: translateX(0); } .sidebar.mobile-closed { transform: translateX(-100%); } @media (min-width: 768px) { .sidebar.mobile-closed { transform: translateX(0); } } /* Sidebar Header */ .sidebar-header { padding: 1.25rem; display: flex; align-items: center; justify-content: space-between; } .sidebar-header.collapsed { flex-direction: column; gap: 1rem; } /* Sidebar Logo */ .sidebar-logo { font-family: 'Playfair Display', serif; font-style: italic; font-size: var(--text-2xl); font-weight: 700; letter-spacing: -0.025em; color: var(--color-text-white); cursor: pointer; transition: color var(--transition-normal); } .sidebar-logo:hover { color: var(--color-mint); } /* Sidebar Menu */ .sidebar-menu { flex: 1; padding: 0 0.75rem; margin-top: 1rem; overflow-y: auto; } /* Sidebar Menu Item */ .sidebar-item { display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 1rem; border-radius: var(--radius-xl); transition: all var(--transition-normal); cursor: pointer; margin-bottom: 0.25rem; position: relative; overflow: hidden; } .sidebar-item.collapsed { justify-content: center; width: 3rem; height: 3rem; margin-left: auto; margin-right: auto; padding: 0; } .sidebar-item.active { background-color: var(--color-mint); color: var(--color-bg-dark); } .sidebar-item:not(.active) { color: var(--color-text-gray-400); } .sidebar-item:not(.active):not(.disabled):hover { background-color: rgba(255, 255, 255, 0.05); color: var(--color-text-white); } .sidebar-item.disabled { opacity: 0.4; cursor: not-allowed; pointer-events: none; } .sidebar-item-icon { flex-shrink: 0; display: flex; align-items: center; justify-content: center; transition: color var(--transition-normal); } .sidebar-item.active .sidebar-item-icon { color: var(--color-bg-dark); } .sidebar-item-label { font-size: var(--text-sm); font-weight: 700; white-space: nowrap; } /* Sidebar Footer */ .sidebar-footer { padding: 1rem; margin-top: auto; display: flex; flex-direction: column; gap: 1rem; } /* Credit Card */ .credit-card { background-color: var(--color-bg-card); border-radius: var(--radius-2xl); padding: 1rem; border: 1px solid var(--color-border-white-5); } .credit-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem; } .credit-label { color: var(--color-text-gray-400); font-size: var(--text-sm); font-weight: 500; } .credit-value { color: var(--color-text-white); font-size: var(--text-sm); font-weight: 700; } .credit-bar { width: 100%; height: 0.375rem; background-color: #1f2937; border-radius: var(--radius-full); overflow: hidden; margin-bottom: 0.75rem; } .credit-bar-fill { height: 100%; background-color: var(--color-mint); } .credit-upgrade-btn { width: 100%; padding: 0.625rem; background-color: var(--color-bg-dark); color: var(--color-text-white); font-size: var(--text-sm); font-weight: 700; border-radius: var(--radius-lg); border: 1px solid var(--color-border-gray-700); transition: background-color var(--transition-normal); cursor: pointer; } .credit-upgrade-btn:hover { background-color: #1f2937; } /* Profile Section */ .profile-section { display: flex; align-items: center; gap: 0.75rem; padding: 0 0.5rem; } .profile-section.collapsed { flex-direction: column; } .profile-avatar { width: 2.5rem; height: 2.5rem; border-radius: var(--radius-full); border: 1px solid var(--color-border-gray-700); } .profile-name { color: var(--color-text-white); font-size: var(--text-sm); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Logout Button */ .logout-btn { width: 100%; display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 1rem; color: var(--color-text-gray-400); background: none; border: none; transition: color var(--transition-normal); cursor: pointer; } .logout-btn:hover { color: var(--color-text-white); } .logout-btn.collapsed { justify-content: center; } .logout-btn-label { font-size: var(--text-sm); font-weight: 700; } /* Mobile Menu Button */ .mobile-menu-btn { position: fixed; top: 1rem; right: 1rem; z-index: 40; padding: 0.625rem; background-color: var(--color-bg-card); border-radius: var(--radius-lg); border: 1px solid var(--color-border-white-10); color: var(--color-text-gray-400); cursor: pointer; } .mobile-menu-btn:hover { color: var(--color-text-white); } @media (min-width: 768px) { .mobile-menu-btn { display: none; } } /* Mobile Overlay */ .mobile-overlay { position: fixed; inset: 0; background-color: rgba(0, 0, 0, 0.5); z-index: 40; } @media (min-width: 768px) { .mobile-overlay { display: none; } } /* ===================================================== Player Components ===================================================== */ /* Player Bar */ .player-bar { background-color: rgba(0, 0, 0, 0.4); border-radius: var(--radius-full); padding: 0.75rem; display: flex; align-items: center; gap: 0.75rem; flex-shrink: 0; } /* Play Button */ .play-btn { color: var(--color-mint); flex-shrink: 0; transition: transform var(--transition-normal); background: none; border: none; cursor: pointer; padding: 0; } .play-btn:hover { transform: scale(1.1); } .play-btn:disabled { opacity: 0.5; cursor: not-allowed; } /* Progress Bar */ .progress-bar-container { flex: 1; height: 0.375rem; background-color: #1f2937; border-radius: var(--radius-full); position: relative; cursor: pointer; } .progress-bar-container:disabled, .progress-bar-container.disabled { cursor: not-allowed; opacity: 0.5; } .progress-bar-fill { position: absolute; left: 0; top: 0; height: 100%; background-color: var(--color-mint); border-radius: var(--radius-full); } .progress-bar-thumb { position: absolute; top: 50%; transform: translateY(-50%) translateX(-50%); display: flex; align-items: center; justify-content: center; pointer-events: none; } .progress-bar-thumb-glow { position: absolute; width: 1rem; height: 1rem; background-color: var(--color-mint); border-radius: var(--radius-full); opacity: 0.2; animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } .progress-bar-thumb-dot { width: 0.75rem; height: 0.75rem; background-color: var(--color-mint); border-radius: var(--radius-full); box-shadow: var(--shadow-mint-glow); border: 1px solid rgba(18, 26, 29, 0.2); } /* Time Display */ .time-display { font-size: var(--text-sm); color: var(--color-text-gray-500); font-family: monospace; text-align: right; white-space: nowrap; } /* ===================================================== Image Grid Components ===================================================== */ /* Image Grid */ .image-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.75rem; } .image-grid-4 { grid-template-columns: repeat(4, 1fr); gap: 0.5rem; } /* Image Item */ .image-item { aspect-ratio: 1; background-color: rgba(18, 26, 29, 0.5); border-radius: var(--radius-xl); border: 1px solid var(--color-border-white-5); position: relative; overflow: hidden; } .image-item img { width: 100%; height: 100%; object-fit: cover; } .image-item-badge { position: absolute; top: 0.5rem; left: 0.5rem; padding: 0.25rem 0.5rem; background-color: var(--color-purple-80); border-radius: 0.25rem; font-size: var(--text-xs); color: var(--color-text-white); font-weight: 500; } .image-item-remove { position: absolute; top: 0.5rem; right: 0.5rem; width: 1.75rem; height: 1.75rem; background-color: rgba(0, 0, 0, 0.6); border-radius: var(--radius-full); display: flex; align-items: center; justify-content: center; color: rgba(255, 255, 255, 0.7); border: none; cursor: pointer; transition: all var(--transition-normal); } .image-item-remove:hover { background-color: rgba(239, 68, 68, 0.8); color: var(--color-text-white); } /* ===================================================== Upload Components ===================================================== */ /* Upload Zone */ .upload-zone { flex: 1; border: 2px dashed var(--color-border-gray-600); border-radius: var(--radius-2xl); display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 1.5rem; text-align: center; cursor: pointer; transition: border-color var(--transition-normal); } .upload-zone:hover { border-color: rgba(166, 255, 234, 0.5); } .upload-zone-icon { margin-bottom: 1rem; color: var(--color-text-gray-500); transition: color var(--transition-normal); } .upload-zone:hover .upload-zone-icon { color: var(--color-mint); } .upload-zone-title { color: var(--color-text-gray-300); font-size: var(--text-base); font-weight: 500; line-height: 1.625; margin-bottom: 0.5rem; } .upload-zone-subtitle { color: var(--color-text-gray-500); font-size: var(--text-sm); } /* ===================================================== Tag Components ===================================================== */ /* Tag */ .tag { padding: 0.625rem 1.25rem; background-color: var(--color-bg-card-inner); border-radius: var(--radius-full); font-size: var(--text-base); color: #e5e7eb; border: 1px solid var(--color-border-white-10); } /* Tag with Dot */ .tag-dot { display: flex; align-items: center; gap: 0.5rem; font-size: var(--text-sm); color: var(--color-text-gray-400); } .tag-dot::before { content: ''; width: 0.375rem; height: 0.375rem; border-radius: var(--radius-full); background-color: var(--color-mint); } /* ===================================================== Social Card Components ===================================================== */ /* Social Card */ .social-card { display: flex; align-items: center; gap: 1rem; background-color: var(--color-bg-dark); padding: 1rem; border-radius: var(--radius-2xl); border: 1px solid var(--color-border-white-5); transition: all var(--transition-normal); cursor: pointer; } .social-card:hover { border-color: var(--color-border-white-10); } .social-card.selected { border-color: var(--color-mint); box-shadow: 0 0 15px rgba(166, 255, 234, 0.15); background-color: var(--color-bg-card); } .social-icon { width: 2.5rem; height: 2.5rem; border-radius: var(--radius-xl); display: flex; align-items: center; justify-content: center; position: relative; transition: transform var(--transition-slow); } .social-icon-inner { width: 1.5rem; height: 1.5rem; color: var(--color-text-white); } .social-check { position: absolute; top: -0.25rem; right: -0.25rem; width: 1.25rem; height: 1.25rem; background-color: var(--color-mint); border-radius: var(--radius-full); display: flex; align-items: center; justify-content: center; color: var(--color-bg-dark); border: 2px solid var(--color-bg-dark); } .social-name { font-size: var(--text-base); font-weight: 700; transition: color var(--transition-normal); } .social-card.selected .social-name { color: var(--color-text-white); } .social-card:not(.selected) .social-name { color: var(--color-text-gray-300); } .social-email { margin-left: auto; font-size: var(--text-sm); color: var(--color-purple); } /* ===================================================== Video Preview Components ===================================================== */ /* Video Container */ .video-container { flex: 1; background-color: #000; border-radius: var(--radius-2xl); position: relative; overflow: hidden; display: flex; align-items: center; justify-content: center; min-height: 200px; } .video-pattern { position: absolute; inset: 0; opacity: 0.1; background-image: linear-gradient(45deg, var(--color-bg-dark) 25%, transparent 25%), linear-gradient(-45deg, var(--color-bg-dark) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--color-bg-dark) 75%), linear-gradient(-45deg, transparent 75%, var(--color-bg-dark) 75%); background-size: 40px 40px; background-position: 0 0, 0 20px, 20px -20px, -20px 0px; } .video-controls { position: absolute; bottom: 1rem; left: 1rem; right: 1rem; z-index: 10; } .video-controls-inner { display: flex; align-items: center; gap: 0.75rem; } .video-play-btn { color: var(--color-text-white); background: none; border: none; cursor: pointer; transition: color var(--transition-normal); } .video-play-btn:hover { color: var(--color-mint); } .video-progress { flex: 1; height: 0.375rem; background-color: rgba(255, 255, 255, 0.2); border-radius: var(--radius-full); overflow: hidden; } .video-progress-fill { height: 100%; background-color: var(--color-mint); } /* Video Player */ .video-player { width: 100%; height: 100%; object-fit: contain; cursor: pointer; } /* Video Loading State */ .video-loading { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 2rem; text-align: center; } /* Video Error State */ .video-error { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 2rem; text-align: center; } .video-error svg { width: 4rem; height: 4rem; color: #ef4444; margin-bottom: 1rem; } /* Social Card Disabled State */ .social-card.disabled { opacity: 0.5; cursor: not-allowed; } /* ===================================================== Tags Container ===================================================== */ .tags-container { margin-top: 1rem; background-color: rgba(18, 26, 29, 0.6); border-radius: var(--radius-xl); padding: 0.75rem 1rem; display: flex; flex-wrap: wrap; gap: 1rem; justify-content: center; border: 1px solid var(--color-border-white-5); flex-shrink: 0; } /* ===================================================== Status Messages ===================================================== */ /* Error Message */ .error-message { margin-top: 1rem; padding: 0.75rem; background-color: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.3); border-radius: var(--radius-xl); color: #f87171; font-size: var(--text-sm); flex-shrink: 0; } /* Status Message */ .status-message { margin-top: 1rem; padding: 0.75rem; background-color: var(--color-mint-10); border: 1px solid var(--color-mint-30); border-radius: var(--radius-xl); color: var(--color-mint); font-size: var(--text-sm); display: flex; align-items: center; gap: 0.5rem; flex-shrink: 0; } /* ===================================================== Utility Classes ===================================================== */ /* Flex utilities */ .flex-center { display: flex; align-items: center; justify-content: center; } .flex-between { display: flex; align-items: center; justify-content: space-between; } .flex-col { display: flex; flex-direction: column; } .flex-1 { flex: 1; } .flex-2 { flex: 2; } .shrink-0 { flex-shrink: 0; } .min-h-0 { min-height: 0; } /* Gap utilities */ .gap-2 { gap: 0.5rem; } .gap-3 { gap: 0.75rem; } .gap-4 { gap: 1rem; } .gap-6 { gap: 1.5rem; } /* Margin utilities */ .mb-1 { margin-bottom: 0.25rem; } .mb-2 { margin-bottom: 0.5rem; } .mb-3 { margin-bottom: 0.75rem; } .mb-4 { margin-bottom: 1rem; } .mb-6 { margin-bottom: 1.5rem; } .mt-4 { margin-top: 1rem; } .mt-6 { margin-top: 1.5rem; } /* Text utilities */ .text-center { text-align: center; } .text-right { text-align: right; } .font-bold { font-weight: 700; } .font-medium { font-weight: 500; } /* Overflow utilities */ .overflow-hidden { overflow: hidden; } .overflow-y-auto { overflow-y: auto; } /* Width utilities */ .w-full { width: 100%; } /* Animation */ @keyframes pulse { 0%, 100% { opacity: 0.2; } 50% { opacity: 0.4; } } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .animate-spin { animation: spin 1s linear infinite; } .animate-pulse { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } /* Grid utilities */ .grid-cols-3 { display: grid; grid-template-columns: repeat(3, 1fr); } /* Space utilities */ .space-y-4 > * + * { margin-top: 1rem; } .space-y-5 > * + * { margin-top: 1.25rem; } /* Min width */ .min-w-280 { min-width: 280px; } /* Scrollbar utility */ .scrollbar-hide { scrollbar-width: none; -ms-overflow-style: none; } .scrollbar-hide::-webkit-scrollbar { display: none; } /* ===================================================== Completion Page Components ===================================================== */ /* Completion Page Title */ .completion-title { font-size: 1.75rem; font-weight: 600; color: #E5F1F2; line-height: 1.19; letter-spacing: -0.006em; margin: 0 0 1.5rem 0; text-align: center; padding: 0 1rem; } @media (min-width: 768px) { .completion-title { font-size: 2.5rem; margin-bottom: 2rem; } } /* Completion Container - wrapper for the two cards */ .completion-container { margin: 0 auto 1.5rem auto; max-width: 1400px; width: calc(100% - 4rem); display: flex; flex-direction: column; gap: 1.5rem; flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; } @media (min-width: 1024px) { .completion-container { flex-direction: row; gap: 2rem; max-width: 1400px; overflow: hidden; } } @media (min-width: 1280px) { .completion-container { max-width: 1600px; } } @media (max-width: 480px) { .completion-container { width: calc(100% - 2rem); gap: 1.25rem; } } @media (min-width: 481px) and (max-width: 767px) { .completion-container { width: calc(100% - 3rem); } } /* Completion Columns */ .completion-column { display: flex; flex-direction: column; } .completion-column-left { width: 100%; min-width: 0; flex-shrink: 0; } .completion-column-right { width: 100%; flex-shrink: 0; } @media (min-width: 1024px) { .completion-column-left { flex: 1; width: auto; } .completion-column-right { width: 400px; } } @media (min-width: 1280px) { .completion-column-right { width: 450px; } } /* Video Preview Card & Sharing Card - uses asset-column base + card styling */ .video-preview-card, .sharing-card { background-color: #01393B; border-radius: 40px; padding: 1.5rem; border: none; box-shadow: none; overflow: hidden; display: flex; flex-direction: column; gap: 1.25rem; flex-shrink: 0; } @media (min-width: 768px) { .video-preview-card, .sharing-card { padding: 2rem; } } @media (min-width: 1024px) { .video-preview-card { flex-shrink: 1; flex: 1; min-height: 0; } .video-preview-card, .sharing-card { padding: 2.5rem; } } /* Completion Video Wrapper */ .completion-video-wrapper { display: flex; flex-direction: column; } @media (min-width: 1024px) { .completion-video-wrapper { flex: 1; min-height: 0; } } /* Video Container for Completion - always 16:9 aspect ratio (horizontal letterbox) */ .video-preview-card .video-container { position: relative; aspect-ratio: 16 / 9; width: 100%; max-width: 100%; margin: 0 auto; background-color: #000; } @media (min-width: 768px) { .video-preview-card .video-container { max-width: 100%; } } @media (min-width: 1024px) { .video-preview-card .video-container { max-width: 100%; } } /* Video Overlay */ .video-overlay { position: absolute; bottom: 0; left: 0; right: 0; background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.7) 100%); padding: 1.5rem; pointer-events: none; } .video-overlay-content { display: flex; flex-direction: column; gap: 0.5rem; } .video-overlay-title { font-size: 1.25rem; font-weight: 800; color: #FFFFFF; line-height: 1.3; letter-spacing: -0.006em; text-align: center; text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); margin: 0; } .video-overlay-logo { font-size: 0.375rem; font-weight: 400; color: rgba(255, 255, 255, 0.6); line-height: 1.3; letter-spacing: -0.006em; text-align: center; align-self: flex-end; } /* AI Optimization Section */ .ai-optimization-section { display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 0.75rem; padding: 1rem; background-color: #002224; border-radius: 8px; } @media (min-width: 768px) { .ai-optimization-section { flex-direction: row; gap: 1.25rem; } } .ai-optimization-title { font-size: 0.875rem; font-weight: 600; color: #94FBE0; line-height: 1.19; letter-spacing: -0.006em; margin: 0; flex-shrink: 0; } .ai-optimization-tags { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.75rem; } @media (min-width: 768px) { .ai-optimization-tags { gap: 1.25rem; justify-content: flex-start; } } .ai-tag { display: flex; align-items: center; gap: 0.5rem; height: 20px; } .ai-tag-dot { width: 6px; height: 6px; background-color: #94FBE0; border-radius: 50%; flex-shrink: 0; } .ai-tag-text { font-size: 0.875rem; font-weight: 400; color: #E5F1F2; line-height: 1.19; letter-spacing: -0.006em; } /* Sharing Card Layout */ .sharing-card { justify-content: space-between; } .sharing-content { flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 1.25rem; } .sharing-actions { display: flex; flex-direction: column; gap: 0.75rem; flex-shrink: 0; } /* Social List New */ .social-list-new { display: flex; flex-direction: column; gap: 0.5rem; } .completion-social-card { display: flex; justify-content: space-between; align-items: center; gap: 1rem; padding: 1rem; background-color: #002224; border-radius: 8px; cursor: pointer; transition: all var(--transition-normal); } .completion-social-card:hover:not(.disabled) { background-color: #01393B; } .completion-social-card.disabled { opacity: 0.5; cursor: not-allowed; } .completion-social-info { display: flex; align-items: center; gap: 1rem; } .completion-social-logo { width: 32px; height: 32px; object-fit: cover; object-position: center; flex-shrink: 0; border-radius: 4px; background-color: transparent; } .completion-social-name { font-size: 0.875rem; font-weight: 400; color: #FFFFFF; line-height: 1.19; letter-spacing: -0.006em; } .completion-social-email { font-size: 0.75rem; font-weight: 400; color: #94FBE0; line-height: 1.19; letter-spacing: -0.006em; } /* Social Card - Text Layout */ .completion-social-text { display: flex; flex-direction: column; gap: 0.25rem; } .completion-social-channel { font-size: 0.75rem; font-weight: 400; color: #94FBE0; line-height: 1.19; letter-spacing: -0.006em; } /* Connected Account Display */ .completion-social-thumbnail { width: 36px; height: 36px; border-radius: 50%; object-fit: cover; flex-shrink: 0; border: 2px solid #94FBE0; } .completion-social-channel-name { font-size: 0.875rem; font-weight: 600; color: #FFFFFF; line-height: 1.2; } .completion-social-platform { font-size: 0.7rem; font-weight: 400; color: rgba(255, 255, 255, 0.5); line-height: 1.2; text-transform: uppercase; letter-spacing: 0.05em; } /* Social Card States */ .completion-social-card.connected { border: 1px solid rgba(166, 255, 234, 0.3); background-color: rgba(0, 34, 36, 0.8); } .completion-social-card.selected { border: 1px solid #94FBE0; background-color: rgba(148, 251, 224, 0.1); } /* Social Card Status */ .completion-social-status { font-size: 0.75rem; font-weight: 500; padding: 0.25rem 0.75rem; border-radius: 9999px; white-space: nowrap; } .completion-social-status.connected { color: #94FBE0; background-color: rgba(148, 251, 224, 0.15); display: flex; align-items: center; gap: 0.25rem; } .completion-social-status.connecting { color: #fbbf24; background-color: rgba(251, 191, 36, 0.15); } .completion-social-status.not-connected { color: #9ca3af; background-color: rgba(156, 163, 175, 0.15); } /* Social Card Actions */ .completion-social-actions { display: flex; align-items: center; gap: 0.5rem; } .completion-social-disconnect { font-size: 0.75rem; font-weight: 500; color: #f87171; background: transparent; border: none; cursor: pointer; padding: 0.25rem 0.5rem; border-radius: 4px; transition: all var(--transition-normal); } .completion-social-disconnect:hover { background-color: rgba(248, 113, 113, 0.15); } /* Completion Buttons */ .btn-completion-deploy { width: 100%; padding: 0.625rem 2.5rem; background-color: #AE72F9; border: none; border-radius: var(--radius-full); color: #FFFFFF; font-size: 0.875rem; font-weight: 600; cursor: pointer; transition: all var(--transition-normal); line-height: 1.19; letter-spacing: -0.006em; height: 48px; } .btn-completion-deploy:hover:not(:disabled) { background-color: #9B5FE0; } .btn-completion-deploy:disabled { opacity: 0.5; cursor: not-allowed; } .btn-completion-download { width: 100%; padding: 0.625rem 2.5rem; background-color: transparent; border: 1px solid #AE72F9; border-radius: var(--radius-full); color: #FFFFFF; font-size: 0.875rem; font-weight: 600; cursor: pointer; transition: all var(--transition-normal); line-height: 1.19; letter-spacing: -0.006em; height: 48px; } .btn-completion-download:hover:not(:disabled) { border-color: #9B5FE0; background-color: rgba(174, 114, 249, 0.1); } .btn-completion-download:disabled { opacity: 0.5; cursor: not-allowed; } /* ===================================================== Analysis Result Page Components ===================================================== */ /* Analysis Page Wrapper - 전체 레이아웃 */ .analysis-page-wrapper { display: flex; width: 100%; height: 100vh; height: 100dvh; background-color: #002224; color: white; } /* Analysis Page Main - 스크롤 가능한 메인 영역 */ .analysis-page-main { flex: 1; overflow-y: auto; overflow-x: hidden; height: 100%; } /* Analysis Container - 콘텐츠 래퍼 */ .analysis-container { width: 100%; min-height: 100%; color: var(--color-text-white); display: flex; flex-direction: column; align-items: center; background-color: #002224; box-sizing: border-box; padding: 0 16px 120px 16px; /* 고정 버튼 영역 확보 */ } @media (min-width: 768px) { .analysis-container { padding: 0 32px 120px 32px; } } /* Header Area (Back Button + Title) */ .analysis-header-area { width: 100%; max-width: 1440px; padding: 8px 0; box-sizing: border-box; } /* Analysis Header */ .analysis-header { width: 100%; display: flex; flex-direction: column; align-items: center; text-align: center; padding: 24px 0; } .analysis-icon { color: var(--color-purple); margin-bottom: 12px; } .analysis-icon svg { width: 40px; height: 40px; } /* Analysis Grid - 모바일: 세로 배치, 데스크톱: 가로 배치 */ .analysis-grid { width: 100%; max-width: 1440px; display: flex; flex-direction: column; gap: 24px; box-sizing: border-box; } /* 데스크톱(1024px 이상)에서 가로 배치 */ @media (min-width: 1024px) { .analysis-grid { flex-direction: row; align-items: flex-start; gap: 40px; padding: 0 200px; } } /* Brand Identity Card - 왼쪽 */ .brand-identity-card { background-color: #01393B; border-radius: 24px; padding: 24px; display: flex; flex-direction: column; gap: 24px; border: none; box-shadow: none; width: 100%; box-sizing: border-box; } @media (min-width: 768px) { .brand-identity-card { border-radius: 40px; padding: 32px; gap: 32px; } } @media (min-width: 1024px) { .brand-identity-card { flex: 1; } } .brand-header { display: flex; align-items: center; gap: 8px; } .brand-content { display: flex; flex-direction: column; gap: 16px; } .brand-name { font-size: 20px; font-weight: 700; color: #E5F1F2; letter-spacing: -0.006em; margin: 0; line-height: 1.2; } @media (min-width: 768px) { .brand-name { font-size: 24px; } } .brand-location { color: #6AB0B3; font-size: 14px; letter-spacing: -0.006em; margin: 0; line-height: 1.2; } .brand-subtitle { color: #6AB0B3; font-size: 14px; font-weight: 400; letter-spacing: -0.006em; } .brand-info { display: flex; flex-direction: row; align-items: center; gap: 4px; } /* Report Content */ .report-content { color: #CEE5E6; font-family: 'Pretendard', sans-serif; font-size: 15px; font-weight: 500; line-height: 1.5; letter-spacing: -0.006em; } @media (min-width: 768px) { .report-content { font-size: 17px; line-height: 1.45; } } /* Right Side Cards Container */ .analysis-cards-column { display: flex; flex-direction: column; gap: 24px; width: 100%; } /* 데스크톱(1024px 이상)에서만 sticky 적용 */ @media (min-width: 1024px) { .analysis-cards-column { flex: 1; position: sticky; top: 40px; align-self: flex-start; } } /* Feature Card for Analysis Page */ .analysis-cards-column .feature-card { background-color: #01393B; border-radius: 24px; padding: 24px; border: none; box-shadow: none; display: flex; flex-direction: column; gap: 24px; width: 100%; box-sizing: border-box; } @media (min-width: 768px) { .analysis-cards-column .feature-card { border-radius: 40px; padding: 32px; gap: 32px; } } /* Selling Points Card */ .selling-points-card { flex: 1; } /* Selling Points Grid - 모바일: 1열, 태블릿 이상: 2열 */ .selling-points-grid { display: grid; grid-template-columns: 1fr; gap: 8px; } @media (min-width: 640px) { .selling-points-grid { grid-template-columns: 1fr 1fr; gap: 0; } } /* Selling Point Item */ .selling-point-item { background-color: #034A4D; padding: 20px 16px; display: flex; flex-direction: column; gap: 12px; border-radius: 16px; } @media (min-width: 640px) { .selling-point-item { padding: 24px 20px; gap: 16px; border-radius: 0; } /* 첫 번째 행 왼쪽 */ .selling-point-item:nth-child(1) { border-radius: 16px 0 0 0; } /* 첫 번째 행 오른쪽 */ .selling-point-item:nth-child(2) { border-radius: 0 16px 0 0; } /* 마지막 행 왼쪽 */ .selling-point-item:nth-last-child(2):nth-child(odd) { border-radius: 0 0 0 16px; } /* 마지막 행 오른쪽 */ .selling-point-item:nth-last-child(1):nth-child(even) { border-radius: 0 0 16px 0; } } .selling-point-title { font-family: 'Pretendard', sans-serif; font-size: 14px; font-weight: 600; color: #6AB0B3; letter-spacing: -0.006em; line-height: 1; } .selling-point-content { display: flex; flex-direction: column; gap: 8px; } .selling-point-content p { font-family: 'Pretendard', sans-serif; font-size: 15px; font-weight: 500; color: #CEE5E6; letter-spacing: -0.006em; line-height: 1.2; margin: 0; } @media (min-width: 768px) { .selling-point-content p { font-size: 17px; line-height: 1; } } /* Keywords Card */ .keywords-card { flex-shrink: 0; } /* Tags Wrapper */ .tags-wrapper { display: flex; flex-wrap: wrap; gap: 8px; align-content: flex-start; } /* Feature Tag - 피그마: pill 형태 */ .feature-tag { padding: 8px 16px; background-color: #034A4D; border-radius: 999px; font-family: 'Pretendard', sans-serif; font-size: 15px; font-weight: 500; color: #CEE5E6; letter-spacing: -0.006em; border: none; } @media (min-width: 768px) { .feature-tag { font-size: 17px; } } /* Analysis Bottom Button - 화면 하단 고정 */ .analysis-bottom { position: fixed; bottom: 0; left: 0; right: 0; padding: 20px 16px; display: flex; justify-content: center; align-items: center; box-sizing: border-box; background: linear-gradient(to top, #002224 70%, transparent); z-index: 100; } @media (min-width: 768px) { .analysis-bottom { padding: 24px 32px; } } .analysis-bottom .btn-primary { width: 160px; height: 48px; padding: 10px 24px; background-color: #AE72F9; border-radius: 999px; font-family: 'Pretendard', sans-serif; font-size: 14px; font-weight: 600; color: #FFFFFF; letter-spacing: -0.006em; border: none; cursor: pointer; transition: background-color 0.2s ease; box-shadow: 0 4px 20px rgba(174, 114, 249, 0.4); } .analysis-bottom .btn-primary:hover { background-color: #9B5DE5; } /* ===================================================== URL Input Content (GenerationFlow 내 URL 입력 단계) ===================================================== */ .url-input-container { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background-color: #002224; padding: 2rem; box-sizing: border-box; } .url-input-content { display: flex; flex-direction: column; align-items: center; text-align: center; max-width: 600px; width: 100%; } .url-input-icon { color: #AE72F9; margin-bottom: 24px; } .url-input-logo { margin-bottom: 40px; } .url-input-logo img { height: 48px; width: auto; } .url-input-title { font-family: 'Pretendard', sans-serif; font-size: 40px; font-weight: 600; color: #E5F1F2; letter-spacing: -0.006em; margin: 0 0 8px 0; line-height: 1.2; } .url-input-subtitle { font-family: 'Pretendard', sans-serif; font-size: 14px; font-weight: 400; color: #9BCACC; letter-spacing: -0.006em; margin: 0 0 40px 0; } .url-input-form { width: 100%; display: flex; flex-direction: column; gap: 16px; } .url-input-wrapper { display: flex; align-items: stretch; width: 100%; background-color: #01393B; border: 1px solid #034A4D; border-radius: 12px; overflow: visible; position: relative; } .url-input-field { flex: 1; width: 100%; padding: 16px 20px; background-color: transparent; border: none; font-family: 'Pretendard', sans-serif; font-size: 16px; color: #E5F1F2; outline: none; text-align: left; } .url-input-field::placeholder { color: #6AB0B3; } .url-input-button { padding: 16px 32px; background-color: #AE72F9; border: none; border-radius: 12px; font-family: 'Pretendard', sans-serif; font-size: 16px; font-weight: 600; color: #FFFFFF; cursor: pointer; transition: background-color 0.2s ease; white-space: nowrap; } .url-input-button:hover:not(:disabled) { background-color: #9B5DE5; } .url-input-button:disabled { background-color: #4A5568; cursor: not-allowed; } .url-input-error { color: #F56565; font-family: 'Pretendard', sans-serif; font-size: 14px; margin: 0; text-align: left; } .url-input-guide { font-family: 'Pretendard', sans-serif; font-size: 13px; color: #6AB0B3; margin: 24px 0 0 0; } /* URL Input Dropdown */ .url-input-dropdown-container { position: relative; flex-shrink: 0; width: auto; } .url-input-dropdown-trigger { display: flex; align-items: center; gap: 8px; padding: 16px 16px; background-color: transparent; border: none; font-family: 'Pretendard', sans-serif; font-size: 14px; color: #E5F1F2; cursor: pointer; white-space: nowrap; transition: background-color 0.2s ease; } .url-input-dropdown-trigger:hover { background-color: rgba(255, 255, 255, 0.05); } .url-input-dropdown-arrow { transition: transform 0.2s ease; } .url-input-dropdown-arrow.open { transform: rotate(180deg); } .url-input-dropdown-menu { position: absolute; top: calc(100% + 4px); left: 0; min-width: 100%; background-color: #01393B; border: 1px solid #034A4D; border-radius: 12px; overflow: hidden; z-index: 100; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); } .url-input-dropdown-item { display: block; width: 100%; padding: 12px 16px; background: none; border: none; font-family: 'Pretendard', sans-serif; font-size: 14px; color: #9BCACC; text-align: left; cursor: pointer; transition: all 0.2s ease; } .url-input-dropdown-item:hover { background-color: #034A4D; color: #E5F1F2; } .url-input-dropdown-item.active { background-color: #034A4D; color: #94FBE0; } /* URL Input Autocomplete (Dashboard) */ .url-input-field-container { position: relative; flex: 1; display: flex; } .url-input-autocomplete-dropdown { position: absolute; top: calc(100% + 8px); left: 0; right: 0; background-color: #002224; border: 1px solid rgba(148, 251, 224, 0.2); border-radius: 12px; max-height: 300px; overflow-y: auto; z-index: 100; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4); } .url-input-autocomplete-loading { padding: 16px; text-align: center; color: rgba(255, 255, 255, 0.6); font-size: 14px; } .url-input-autocomplete-item { display: block; width: 100%; padding: 12px 16px; background: transparent; border: none; border-bottom: 1px solid rgba(148, 251, 224, 0.1); text-align: left; cursor: pointer; transition: background-color 0.2s ease; } .url-input-autocomplete-item:last-child { border-bottom: none; } .url-input-autocomplete-item:hover, .url-input-autocomplete-item.highlighted { background-color: rgba(148, 251, 224, 0.1); } .url-input-autocomplete-title { font-size: 14px; font-weight: 500; color: #E5F1F2; margin-bottom: 4px; } .url-input-autocomplete-title b { color: #94FBE0; font-weight: 600; } .url-input-autocomplete-address { font-size: 12px; color: rgba(255, 255, 255, 0.5); } /* ===================================================== Landing Page Components ===================================================== */ /* Hero Section */ .hero-section { width: 100%; min-height: 100dvh; display: flex; flex-direction: column; align-items: center; justify-content: center; background-color: #002224; color: var(--color-text-white); padding: 80px 1rem 100px; position: relative; overflow: hidden; box-sizing: border-box; } /* 세로가 짧은 화면 대응 */ @media (max-height: 700px) { .hero-section { padding: 70px 1rem 80px; justify-content: flex-start; padding-top: 100px; } } @media (max-height: 600px) { .hero-section { padding: 60px 1rem 70px; padding-top: 80px; } } /* Animated Background Orbs */ .hero-bg-orbs { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: hidden; pointer-events: none; z-index: 0; } /* JavaScript controlled random orbs */ .hero-orb-random { position: absolute; border-radius: 50%; filter: blur(80px); opacity: 0.65; pointer-events: none; will-change: left, top, transform; } .hero-content { display: flex; flex-direction: column; align-items: center; z-index: 10; position: relative; } .hero-logo { width: 280px; height: auto; margin-bottom: 1rem; } @media (min-width: 640px) { .hero-logo { width: 400px; } } @media (min-width: 768px) { .hero-logo { width: 500px; } } @media (min-width: 1024px) { .hero-logo { width: 554px; } } /* 세로가 짧은 화면에서 로고 크기 축소 */ @media (max-height: 700px) { .hero-logo { width: 240px; margin-bottom: 0.5rem; } } @media (max-height: 600px) { .hero-logo { width: 200px; margin-bottom: 0.5rem; } } .hero-subtitle { font-size: var(--text-sm); font-weight: 300; margin-bottom: 2rem; color: rgba(255, 255, 255, 0.8); text-align: center; max-width: 32rem; } @media (min-width: 640px) { .hero-subtitle { font-size: var(--text-base); margin-bottom: 3rem; } } @media (min-width: 768px) { .hero-subtitle { font-size: var(--text-lg); } } /* Hero Form */ .hero-form { width: 100%; max-width: 400px; display: flex; flex-direction: column; align-items: center; gap: 8px; } /* 세로가 짧은 화면에서 폼 간격 조정 */ @media (max-height: 700px) { .hero-form { gap: 6px; max-width: 350px; } } @media (max-height: 600px) { .hero-form { gap: 4px; max-width: 320px; } } .hero-input-label { font-size: 14px; font-weight: 600; color: #ffffff; letter-spacing: -0.006em; } .hero-input-wrapper { width: 100%; background-color: #ffffff; border-radius: 999px; padding: 11px 24px; display: flex; align-items: center; gap: 10px; transition: box-shadow 0.2s ease; box-sizing: border-box; overflow: visible; position: relative; } .hero-input-wrapper.focused { box-shadow: 0 0 0 4px #379599; } .hero-input-wrapper.error { box-shadow: 0 0 0 1px #F87171; } .hero-input { flex: 1; background: transparent; border: none; color: #6AB0B3; font-size: 14px; font-weight: 600; letter-spacing: -0.006em; text-align: left; min-width: 0; } .hero-input:focus { outline: none; } .hero-input::placeholder { color: #6AB0B3; } .hero-input.has-value { color: #002224; font-weight: 500; } .hero-input-clear { flex-shrink: 0; width: 24px; height: 24px; padding: 0; border: none; background: transparent; cursor: pointer; display: flex; align-items: center; justify-content: center; } .hero-input-clear img { width: 24px; height: 24px; } /* Hero Dropdown */ .hero-dropdown-container { position: relative; flex-shrink: 0; } .hero-dropdown-trigger { display: flex; align-items: center; gap: 6px; padding: 8px 12px; background-color: transparent; border: none; border-right: 1px solid #E5E7EB; font-family: 'Pretendard', sans-serif; font-size: 14px; font-weight: 600; color: #374151; cursor: pointer; white-space: nowrap; transition: color 0.2s ease; margin-right: 12px; } .hero-dropdown-trigger:hover { color: #111827; } .hero-dropdown-arrow { transition: transform 0.2s ease; } .hero-dropdown-arrow.open { transform: rotate(180deg); } .hero-dropdown-menu { position: absolute; top: calc(100% + 8px); left: 0; min-width: 100px; background-color: #ffffff; border: 1px solid #E5E7EB; border-radius: 12px; overflow: hidden; z-index: 100; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); } .hero-dropdown-item { display: block; width: 100%; padding: 12px 16px; background: none; border: none; font-family: 'Pretendard', sans-serif; font-size: 14px; color: #6B7280; text-align: left; cursor: pointer; transition: all 0.2s ease; } .hero-dropdown-item:hover { background-color: #F3F4F6; color: #111827; } .hero-dropdown-item.active { background-color: #F0FDF4; color: #059669; } /* Hero Autocomplete */ .hero-input-container { flex: 1; position: relative; min-width: 0; } .hero-autocomplete-dropdown { position: absolute; top: calc(100% + 8px); left: -24px; right: -60px; background-color: #ffffff; border: 1px solid #E5E7EB; border-radius: 12px; overflow: hidden; z-index: 200; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2); max-height: 300px; overflow-y: auto; } .hero-autocomplete-loading { padding: 16px; text-align: center; color: #6B7280; font-size: 14px; } .hero-autocomplete-item { display: block; width: 100%; padding: 12px 16px; background: none; border: none; border-bottom: 1px solid #F3F4F6; text-align: left; cursor: pointer; transition: background-color 0.2s ease; } .hero-autocomplete-item:last-child { border-bottom: none; } .hero-autocomplete-item:hover, .hero-autocomplete-item.highlighted { background-color: #F9FAFB; } .hero-autocomplete-title { font-family: 'Pretendard', sans-serif; font-size: 14px; font-weight: 600; color: #111827; margin-bottom: 4px; } .hero-autocomplete-title b { color: #059669; } .hero-autocomplete-address { font-family: 'Pretendard', sans-serif; font-size: 12px; color: #6B7280; } .hero-input-hint { font-size: 12px; font-weight: 400; color: #CEE5E6; letter-spacing: -0.006em; margin-bottom: 16px; } .hero-error { color: #f87171; font-size: var(--text-xs); text-align: center; } .hero-button { width: 100%; padding: 11px 16px; border-radius: 999px; background-color: #AE72F9; color: #ffffff; font-weight: 600; font-size: 14px; letter-spacing: -0.006em; box-shadow: 0px 4px 24px 0px rgba(174, 114, 249, 0.4); transition: all var(--transition-normal); border: none; cursor: pointer; animation: button-glow 1.5s ease-in-out infinite; } @keyframes button-glow { 0%, 100% { box-shadow: 0px 4px 24px 0px rgba(174, 114, 249, 0.5); } 50% { box-shadow: 0px 4px 28px 0px rgba(174, 114, 249, 0.8), 0px 0px 16px 0px rgba(166, 255, 234, 0.4); } } .hero-button:hover { background-color: #9a5ef0; animation: none; box-shadow: 0px 4px 32px 0px rgba(174, 114, 249, 0.6); } .hero-button:active { transform: scale(0.98); } /* Scroll Indicator */ .scroll-indicator { position: absolute; bottom: 2rem; display: flex; flex-direction: column; align-items: center; gap: 12px; transition: opacity var(--transition-normal); cursor: pointer; background: none; border: none; color: #9BCACC; z-index: 10; } @media (min-width: 640px) { .scroll-indicator { bottom: 3rem; } } /* 세로가 짧은 화면에서 스크롤 인디케이터 조정 */ @media (max-height: 700px) { .scroll-indicator { bottom: 1rem; gap: 8px; } } @media (max-height: 600px) { .scroll-indicator { bottom: 0.5rem; gap: 4px; } .scroll-indicator-text { font-size: 10px; } .scroll-indicator-icon { width: 32px; height: 32px; } } .scroll-indicator:hover { opacity: 0.8; } .scroll-indicator-text { font-size: 12px; font-weight: 400; letter-spacing: -0.006em; color: #9BCACC; } .scroll-indicator-icon { width: 40px; height: 40px; border: 1px solid #9BCACC; border-radius: 999px; display: flex; align-items: center; justify-content: center; animation: bounce 2s infinite; } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-8px); } } /* ===================================================== Welcome Section Components ===================================================== */ /* Welcome Section */ .welcome-section { width: 100%; min-height: 100dvh; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; background-color: #002224; color: var(--color-text-white); padding: 0; position: relative; } .welcome-content { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; width: 100%; padding: 2rem 1rem; position: relative; } /* Star Icon - positioned at top center based on Figma (y: 144) */ .welcome-star { position: absolute; top: 60px; left: 50%; transform: translateX(-50%); width: 40px; height: 40px; z-index: 1; } @media (min-width: 768px) { .welcome-star { top: 80px; } } .welcome-star img { width: 100%; height: 100%; object-fit: contain; } .welcome-header { text-align: center; margin-bottom: 2rem; z-index: 1; } @media (min-width: 768px) { .welcome-header { margin-bottom: 3rem; } } .welcome-title { font-size: 1.5rem; font-weight: 600; margin-bottom: 1rem; color: #E5F1F2; letter-spacing: -0.006em; line-height: 1.19; } @media (min-width: 640px) { .welcome-title { font-size: 2rem; } } @media (min-width: 768px) { .welcome-title { font-size: 2.5rem; } } .welcome-subtitle { color: #9BCACC; font-size: var(--text-sm); font-weight: 600; letter-spacing: -0.006em; line-height: 1.19; } @media (min-width: 640px) { .welcome-subtitle { font-size: var(--text-base); } } @media (min-width: 768px) { .welcome-subtitle { font-size: 1.5rem; } } /* Feature Cards Grid */ .feature-grid { display: flex; flex-direction: column; gap: 1rem; width: 100%; max-width: 1144px; margin: 0 auto; z-index: 1; padding: 0 1rem; } @media (min-width: 640px) { .feature-grid { gap: 1.5rem; } } @media (min-width: 768px) { .feature-grid { flex-direction: row; gap: 24px; justify-content: center; padding: 0 2rem; } } @media (min-width: 1024px) { .feature-grid { gap: 32px; padding: 0; } } /* Feature Card */ .feature-card { position: relative; background-color: #01393B; border-radius: 40px; padding: 24px 32px; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 16px; width: 100%; flex: 1; } @media (min-width: 768px) { .feature-card { flex: 1; max-width: 280px; min-height: 340px; padding: 24px 24px; gap: 20px; } } @media (min-width: 1024px) { .feature-card { max-width: 500px; min-height: 440px; padding: 24px 40px; gap: 24px; } } .feature-number-badge { width: 32px; height: 32px; flex-shrink: 0; border-radius: 999px; border: 1px solid #9BCACC; display: flex; align-items: center; justify-content: center; } @media (min-width: 768px) { .feature-number-badge { width: 36px; height: 36px; } } @media (min-width: 1024px) { .feature-number-badge { width: 40px; height: 40px; } } .feature-number-badge span { font-size: 16px; font-weight: 600; color: #9BCACC; letter-spacing: -0.006em; } @media (min-width: 1024px) { .feature-number-badge span { font-size: 20px; } } .feature-card-title { font-size: 16px; font-weight: 600; color: #E5F1F2; letter-spacing: -0.006em; line-height: 1.19; } @media (min-width: 768px) { .feature-card-title { font-size: 18px; } } @media (min-width: 1024px) { .feature-card-title { font-size: 24px; } } .feature-icon-box { width: 100px; height: 100px; border-radius: 32px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } @media (min-width: 768px) { .feature-icon-box { width: 120px; height: 120px; border-radius: 36px; } } @media (min-width: 1024px) { .feature-icon-box { width: 160px; height: 160px; border-radius: 40px; } } .feature-icon-img { width: 100%; height: 100%; object-fit: contain; } .feature-card-description { font-size: 12px; font-weight: 400; color: #E5F1F2; letter-spacing: -0.006em; line-height: 1.45; white-space: pre-line; } @media (min-width: 768px) { .feature-card-description { font-size: 14px; } } @media (min-width: 1024px) { .feature-card-description { font-size: 16px; } } /* Legacy feature-item styles (for backward compatibility) */ .feature-item { position: relative; background-color: #01393B; border-radius: 2.5rem; padding: 1.5rem 2rem; display: flex; flex-direction: column; align-items: center; text-align: center; transition: all var(--transition-normal); border: 1px solid transparent; gap: 1.5rem; width: 100%; } @media (min-width: 768px) { .feature-item { width: 360px; min-height: 440px; padding: 1.5rem 2.5rem; } } .feature-number { width: 2.5rem; height: 2.5rem; flex-shrink: 0; border-radius: var(--radius-full); border: 1px solid #9BCACC; display: flex; align-items: center; justify-content: center; font-size: 1.25rem; font-weight: 600; color: #9BCACC; letter-spacing: -0.006em; line-height: 1.19; } .feature-title { font-size: var(--text-base); font-weight: 600; color: #E5F1F2; letter-spacing: -0.006em; line-height: 1.19; } @media (min-width: 768px) { .feature-title { font-size: 1.5rem; } } .feature-icon { width: 160px; height: 160px; border-radius: 2.5rem; display: flex; align-items: center; justify-content: center; padding: 0.5rem; } .feature-icon img { width: 100%; height: 100%; object-fit: contain; } .feature-description { color: #E5F1F2; font-size: var(--text-sm); line-height: 1.45; letter-spacing: -0.006em; white-space: pre-line; } @media (min-width: 768px) { .feature-description { font-size: var(--text-base); } } /* Welcome Button */ .btn-start { padding: 0.625rem 3rem; border-radius: var(--radius-full); background-color: #AE72F9; color: var(--color-text-white); font-weight: 600; font-size: var(--text-sm); transition: all var(--transition-normal); border: none; cursor: pointer; margin: 0 auto; letter-spacing: -0.006em; line-height: 1.19; } @media (min-width: 768px) { .btn-start { padding: 0.75rem 3.5rem; } } .btn-start:hover { background-color: #9570f0; transform: translateY(-2px); box-shadow: 0 10px 20px rgba(174, 114, 249, 0.3); } .btn-start:active { transform: scale(0.95); } /* Legacy buttons - keep for other sections */ .welcome-buttons { display: flex; gap: 1rem; } .btn-ghost { padding: 0.75rem 2rem; border-radius: var(--radius-full); border: 1px solid var(--color-border-gray-700); background-color: transparent; color: var(--color-text-white); font-weight: 700; font-size: var(--text-xs); transition: all var(--transition-normal); cursor: pointer; margin-bottom: 1rem; } @media (min-width: 640px) { .btn-ghost { font-size: var(--text-sm); } } .btn-ghost:hover { background-color: rgba(255, 255, 255, 0.05); } .btn-cta { padding: 0.75rem 2.5rem; border-radius: var(--radius-full); background-color: var(--color-purple); color: var(--color-text-white); font-weight: 700; font-size: var(--text-xs); box-shadow: var(--shadow-purple); transition: all var(--transition-normal); border: none; cursor: pointer; margin-bottom: 1rem; } @media (min-width: 640px) { .btn-cta { font-size: var(--text-sm); } } @media (min-width: 768px) { .btn-cta { padding: 0.75rem 3.5rem; } } .btn-cta:hover { background-color: var(--color-purple-hover); } .btn-cta:active { transform: scale(0.95); } /* ===================================================== Display Section Components ===================================================== */ /* Display Section */ .display-section { width: 100%; min-height: 100dvh; display: flex; flex-direction: column; justify-content: flex-start; background-color: #002224; color: var(--color-text-white); position: relative; overflow: hidden; } .display-section .content-safe-area { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; } /* Display Frames Container */ .display-frames { display: flex; flex-direction: row; justify-content: center; align-items: center; gap: 1rem; margin-bottom: 2rem; width: 100%; max-width: 72rem; } @media (min-width: 640px) { .display-frames { gap: 1.5rem; } } @media (min-width: 768px) { .display-frames { gap: 2rem; margin-bottom: 3rem; } } @media (min-width: 1024px) { .display-frames { gap: 2rem; } } /* Display Frame - 가로 크기는 feature-card와 일치, 세로는 9:16 비율 */ .display-frame { display: flex; width: 120px; height: 213px; border-radius: 2.5rem; overflow: hidden; position: relative; transition: all var(--transition-normal); } @media (min-width: 640px) { .display-frame { width: 160px; height: 284px; } } @media (min-width: 768px) { .display-frame { width: 280px; height: 498px; } } @media (min-width: 1024px) { .display-frame { width: 340px; height: 604px; } } .display-frame img { width: 100%; height: 100%; object-fit: cover; } .display-video { width: 100%; height: 100%; border: none; border-radius: 2.5rem; pointer-events: none; } .display-frame-hidden-mobile { display: none; } @media (min-width: 768px) { .display-frame-hidden-mobile { display: flex; } } /* Legacy Video Frames - Keep for backward compatibility */ .video-frames { display: flex; flex-direction: row; justify-content: center; align-items: center; gap: 0.5rem; margin-bottom: 2rem; width: 100%; max-width: 72rem; } @media (min-width: 640px) { .video-frames { gap: 1.5rem; } } @media (min-width: 768px) { .video-frames { gap: 2.5rem; margin-bottom: 4rem; } } @media (min-width: 1024px) { .video-frames { gap: 3.5rem; } } /* Phone Frame */ .phone-frame { display: flex; width: 135px; aspect-ratio: 9/16; border-radius: 24px; background-color: #000; border: 1px solid rgba(255, 255, 255, 0.1); overflow: hidden; position: relative; box-shadow: 0 30px 80px rgba(0, 0, 0, 0.9); align-items: center; justify-content: center; transition: all var(--transition-normal); } @media (min-width: 640px) { .phone-frame { width: 190px; border-radius: 40px; } } @media (min-width: 768px) { .phone-frame { width: 230px; border-radius: 48px; } } @media (min-width: 1024px) { .phone-frame { width: 280px; } } .phone-frame.hidden-mobile { display: none; } @media (min-width: 768px) { .phone-frame.hidden-mobile { display: flex; } } .phone-video-container { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; overflow: hidden; } .phone-video-container iframe { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 180%; height: 100%; object-fit: cover; } .phone-bezel { position: absolute; inset: 0; border: 6px solid #20282b; border-radius: 24px; pointer-events: none; z-index: 20; } @media (min-width: 640px) { .phone-bezel { border-width: 10px; border-radius: 40px; } } @media (min-width: 768px) { .phone-bezel { border-radius: 48px; } } .phone-notch { position: absolute; top: 0; left: 50%; transform: translateX(-50%); width: 25%; height: 12px; background-color: #20282b; border-bottom-left-radius: 16px; border-bottom-right-radius: 16px; z-index: 30; opacity: 0.8; } @media (min-width: 640px) { .phone-notch { height: 20px; } } /* Display Button */ .display-button { padding: 0.625rem 3rem; border-radius: var(--radius-full); background-color: #AE72F9; color: var(--color-text-white); font-weight: 600; font-size: var(--text-sm); letter-spacing: -0.006em; line-height: 1.19; transition: all var(--transition-normal); border: none; cursor: pointer; margin-bottom: 2rem; } @media (min-width: 768px) { .display-button { padding: 0.75rem 3.5rem; } } .display-button:hover { background-color: #9570f0; transform: translateY(-2px); box-shadow: 0 10px 20px rgba(174, 114, 249, 0.3); } .display-button:active { transform: scale(0.95); } /* ===================================================== Login Section Components ===================================================== */ /* Login Container */ .login-container { width: 100%; height: 100dvh; background-color: #002224; display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--color-text-white); padding: 1rem; position: relative; overflow: hidden; } @media (min-width: 640px) { .login-container { padding: 1.5rem; } } /* Login Back Button */ .login-back-btn { position: absolute; top: 0.875rem; left: 1.5rem; display: flex; align-items: center; gap: 0.25rem; padding: 0.5rem 1.25rem 0.5rem 0.5rem; border-radius: var(--radius-full); border: 1px solid #694596; background-color: transparent; color: #CFABFB; font-size: var(--text-sm); font-weight: 600; letter-spacing: -0.006em; line-height: 1.19; transition: all var(--transition-normal); cursor: pointer; } .login-back-btn img { width: 20px; height: 20px; } .login-back-btn:hover { background-color: rgba(105, 69, 150, 0.1); border-color: #8662C7; } .login-back-btn:active { transform: scale(0.95); } /* Login Content */ .login-content { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 4rem; max-width: 600px; } @media (min-width: 768px) { .login-content { gap: 5rem; } } /* Login Logo */ .login-logo { width: 350px; height: auto; } @media (min-width: 768px) { .login-logo { width: 554px; } } .login-logo img { width: 100%; height: auto; object-fit: contain; } /* Kakao Button */ .btn-kakao { width: 100%; max-width: 250px; padding: 0.75rem 1rem; border-radius: var(--radius-full); background-color: #FEE500; color: rgba(0, 0, 0, 0.85); font-weight: 600; font-size: var(--text-base); letter-spacing: 0; line-height: 1.19; transition: all var(--transition-normal); border: none; cursor: pointer; } @media (min-width: 768px) { .btn-kakao { max-width: 296px; padding: 0.9375rem 1rem; } } .btn-kakao:hover { background-color: #FDDC00; transform: translateY(-2px); box-shadow: 0 4px 12px rgba(254, 229, 0, 0.3); } .btn-kakao:active { transform: scale(0.95); } .btn-kakao:disabled { opacity: 0.6; cursor: not-allowed; transform: none; } .btn-kakao:disabled:hover { background-color: #FEE500; transform: none; box-shadow: none; } /* Login Error */ .login-error { color: #FF6B6B; font-size: 14px; text-align: center; padding: 12px 16px; background-color: rgba(255, 107, 107, 0.1); border-radius: 8px; margin-bottom: 16px; max-width: 296px; width: 100%; } /* Legacy styles - keep for backward compatibility */ .login-title { font-family: 'Playfair Display', serif; font-style: italic; font-size: var(--text-3xl); font-weight: 700; margin-bottom: 0.5rem; letter-spacing: -0.025em; line-height: 1; color: var(--color-text-white); } @media (min-width: 640px) { .login-title { font-size: var(--text-4xl); margin-bottom: 0.75rem; } } @media (min-width: 768px) { .login-title { font-size: 3rem; } } @media (min-width: 1024px) { .login-title { font-size: 3.75rem; } } .login-subtitle { font-size: 9px; font-weight: 300; margin-bottom: 1.5rem; opacity: 0.8; } @media (min-width: 640px) { .login-subtitle { font-size: 10px; margin-bottom: 2rem; } } @media (min-width: 768px) { .login-subtitle { font-size: var(--text-xs); margin-bottom: 2.5rem; } } @media (min-width: 1024px) { .login-subtitle { font-size: var(--text-sm); } } /* ===================================================== Loading Section Components ===================================================== */ /* Loading Container */ .loading-container { width: 100%; height: 100vh; background-color: #002224; display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--color-text-white); padding: 0 1.5rem; } .loading-content { display: flex; flex-direction: column; align-items: center; gap: 3rem; max-width: 600px; } @media (min-width: 768px) { .loading-content { gap: 4rem; } } /* Loading Logo */ .loading-logo { width: 200px; height: auto; } @media (min-width: 768px) { .loading-logo { width: 308px; } } .loading-logo img { width: 100%; height: auto; object-fit: contain; } /* Loading Section */ .loading-section { display: flex; flex-direction: column; align-items: center; gap: 2rem; width: 100%; } .loading-title { font-size: 1.5rem; font-weight: 700; letter-spacing: -0.006em; line-height: 1.19; color: #FFFFFF; text-align: center; } @media (min-width: 768px) { .loading-title { font-size: 2rem; } } /* Loading Spinner Wrapper */ .loading-spinner-wrapper { width: 120px; height: 120px; display: flex; align-items: center; justify-content: center; } @media (min-width: 768px) { .loading-spinner-wrapper { width: 200px; height: 200px; } } .loading-spinner-icon { width: 100%; height: 100%; animation: spin 2s linear infinite; } /* Legacy Loading Spinner - Keep for backward compatibility */ .loading-spinner { position: relative; margin-bottom: 2rem; } .loading-ring { width: 4rem; height: 4rem; border: 4px solid rgba(166, 130, 255, 0.2); border-top-color: var(--color-purple); border-radius: var(--radius-full); animation: spin 1s linear infinite; } .loading-dot { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; } .loading-dot-inner { width: 1rem; height: 1rem; background-color: var(--color-purple); border-radius: var(--radius-full); animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; box-shadow: 0 0 15px var(--color-purple); } .loading-text { text-align: center; } .loading-text > * + * { margin-top: 0.5rem; } .loading-description { color: var(--color-text-gray-400); font-size: var(--text-sm); font-weight: 300; animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } @media (min-width: 640px) { .loading-description { font-size: var(--text-base); } } /* ===================================================== Dashboard Content Components ===================================================== */ /* Dashboard Container */ .dashboard-container { width: 100%; padding: 0.75rem; display: flex; flex-direction: column; background-color: var(--color-bg-dark); color: var(--color-text-white); } @media (min-width: 640px) { .dashboard-container { padding: 1rem; } } @media (min-width: 768px) { .dashboard-container { padding: 1.5rem; } } /* Dashboard Header */ .dashboard-header { flex-shrink: 0; margin-bottom: 0.5rem; margin-left: 2.5rem; } @media (min-width: 640px) { .dashboard-header { margin-bottom: 0.75rem; } } @media (min-width: 768px) { .dashboard-header { margin-bottom: 1rem; margin-left: 0; } } .dashboard-title { font-size: var(--text-lg); font-weight: 700; letter-spacing: -0.025em; } @media (min-width: 640px) { .dashboard-title { font-size: var(--text-xl); } } @media (min-width: 768px) { .dashboard-title { font-size: 1.5rem; } } .dashboard-description { font-size: 9px; color: var(--color-text-gray-500); margin-top: 0.125rem; } @media (min-width: 640px) { .dashboard-description { font-size: 10px; } } /* Stats Grid */ .stats-grid { flex-shrink: 0; display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.5rem; margin-bottom: 0.5rem; } @media (min-width: 640px) { .stats-grid { gap: 0.75rem; margin-bottom: 0.75rem; } } @media (min-width: 768px) { .stats-grid { margin-bottom: 1rem; } } /* Stat Card */ .stat-card { background-color: var(--color-bg-card); border-radius: var(--radius-xl); padding: 0.5rem; border: 1px solid var(--color-border-white-5); display: flex; flex-direction: column; justify-content: center; gap: 0.125rem; box-shadow: var(--shadow-xl); transition: transform var(--transition-normal); } @media (min-width: 640px) { .stat-card { padding: 0.75rem; border-radius: var(--radius-2xl); } } @media (min-width: 768px) { .stat-card { padding: 1rem; } } .stat-card:hover { transform: scale(1.02); } .stat-label { font-size: 8px; font-weight: 700; color: var(--color-text-gray-400); text-transform: uppercase; letter-spacing: 0.1em; } @media (min-width: 640px) { .stat-label { font-size: 9px; } } @media (min-width: 768px) { .stat-label { font-size: 10px; } } .stat-value { font-size: var(--text-lg); font-weight: 700; color: var(--color-text-white); line-height: 1.25; } @media (min-width: 640px) { .stat-value { font-size: var(--text-xl); } } @media (min-width: 768px) { .stat-value { font-size: 1.5rem; } } @media (min-width: 1024px) { .stat-value { font-size: var(--text-3xl); } } .stat-trend { font-size: 8px; color: var(--color-mint); font-weight: 500; } @media (min-width: 640px) { .stat-trend { font-size: 9px; } } /* Chart Card */ .chart-card { flex: 1; min-height: 0; background-color: var(--color-bg-card); border-radius: var(--radius-xl); padding: 0.75rem; border: 1px solid var(--color-border-white-5); display: flex; flex-direction: column; position: relative; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; } @media (min-width: 640px) { .chart-card { padding: 1rem; border-radius: var(--radius-2xl); } } @media (min-width: 768px) { .chart-card { padding: 1.5rem; border-radius: var(--radius-3xl); } } .chart-header { flex-shrink: 0; display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem; } @media (min-width: 640px) { .chart-header { margin-bottom: 0.75rem; } } @media (min-width: 768px) { .chart-header { margin-bottom: 1rem; } } .chart-title { font-size: 8px; font-weight: 700; color: var(--color-text-gray-400); text-transform: uppercase; letter-spacing: 0.1em; } @media (min-width: 640px) { .chart-title { font-size: 9px; } } @media (min-width: 768px) { .chart-title { font-size: 10px; } } .chart-legend { display: flex; gap: 0.375rem; align-items: center; } .chart-legend-dot { width: 0.375rem; height: 0.375rem; border-radius: var(--radius-full); background-color: var(--color-mint); } .chart-legend-text { font-size: 8px; color: var(--color-text-gray-400); } @media (min-width: 640px) { .chart-legend-text { font-size: 9px; } } .chart-container { flex: 1; position: relative; min-height: 0; } .chart-badge { position: absolute; top: 45%; left: 55%; transform: translate(-50%, -100%); margin-bottom: 0.5rem; display: flex; flex-direction: column; align-items: center; pointer-events: none; } .chart-badge-value { background-color: var(--color-mint); color: var(--color-bg-dark); padding: 0.125rem 0.5rem; border-radius: var(--radius-md); font-size: 9px; font-weight: 700; box-shadow: 0 20px 25px -5px rgba(166, 255, 234, 0.2); } @media (min-width: 640px) { .chart-badge-value { font-size: 10px; } } .chart-badge-line { width: 2px; height: 0.5rem; background-color: rgba(166, 255, 234, 0.5); margin-top: 0.125rem; } @media (min-width: 640px) { .chart-badge-line { height: 0.75rem; } } .chart-xaxis { flex-shrink: 0; display: flex; justify-content: space-between; margin-top: 0.5rem; padding: 0 0.5rem; font-size: 8px; color: var(--color-text-gray-500); font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; border-top: 1px solid var(--color-border-white-5); padding-top: 0.5rem; } @media (min-width: 640px) { .chart-xaxis { margin-top: 0.75rem; padding: 0 1rem; font-size: 9px; padding-top: 0.75rem; } } @media (min-width: 768px) { .chart-xaxis { margin-top: 1rem; padding: 0 1.5rem; } } /* Dashboard Header Extended */ .dashboard-header-row { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 0.5rem; margin-left: 2.5rem; } @media (min-width: 768px) { .dashboard-header-row { margin-bottom: 1rem; margin-left: 0; align-items: center; } } .dashboard-last-updated { font-size: 8px; color: var(--color-text-gray-500); display: none; } @media (min-width: 640px) { .dashboard-last-updated { display: block; font-size: 9px; } } /* Stats Grid 5 Columns */ .stats-grid-5 { flex-shrink: 0; display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.5rem; margin-bottom: 0.75rem; } @media (min-width: 640px) { .stats-grid-5 { grid-template-columns: repeat(3, 1fr); gap: 0.75rem; margin-bottom: 1rem; } } @media (min-width: 768px) { .stats-grid-5 { grid-template-columns: repeat(5, 1fr); } } /* Stat Trend with Direction */ .stat-trend-wrapper { display: flex; align-items: center; gap: 0.25rem; } .stat-trend-icon { width: 10px; height: 10px; } @media (min-width: 640px) { .stat-trend-icon { width: 12px; height: 12px; } } .stat-trend.up { color: var(--color-mint); } .stat-trend.down { color: #f87171; } /* Dashboard Section */ .dashboard-section { margin-bottom: 0.75rem; } @media (min-width: 768px) { .dashboard-section { margin-bottom: 1rem; } } .dashboard-section-title { font-size: var(--text-sm); font-weight: 600; color: var(--color-text-white); margin-bottom: 0.5rem; } @media (min-width: 768px) { .dashboard-section-title { font-size: var(--text-base); margin-bottom: 0.75rem; } } /* Chart Legend Dual (for YoY comparison) */ .chart-legend-dual { display: flex; gap: 1rem; align-items: center; } .chart-legend-item { display: flex; align-items: center; gap: 0.375rem; } .chart-legend-line { width: 1rem; height: 2px; border-radius: var(--radius-full); } .chart-legend-line.solid { background-color: var(--color-mint); } .chart-legend-line.dashed { background: repeating-linear-gradient( 90deg, var(--color-purple) 0px, var(--color-purple) 3px, transparent 3px, transparent 6px ); } /* Platform Tabs */ .platform-tabs { display: flex; gap: 0.5rem; margin-bottom: 0.75rem; } @media (min-width: 768px) { .platform-tabs { margin-bottom: 1rem; } } .platform-tab { padding: 0.5rem 0.75rem; border-radius: var(--radius-full); border: 1px solid var(--color-border-gray-700); background-color: transparent; color: var(--color-text-gray-400); font-size: var(--text-xs); font-weight: 600; cursor: pointer; transition: all var(--transition-normal); display: flex; align-items: center; gap: 0.375rem; } @media (min-width: 640px) { .platform-tab { padding: 0.5rem 1rem; font-size: var(--text-sm); gap: 0.5rem; } } .platform-tab:hover { border-color: var(--color-border-gray-600); color: var(--color-text-gray-300); } .platform-tab.active { border-color: var(--color-mint); background-color: rgba(166, 255, 234, 0.1); color: var(--color-mint); } .platform-tab-icon { width: 0.875rem; height: 0.875rem; } @media (min-width: 640px) { .platform-tab-icon { width: 1rem; height: 1rem; } } /* Platform Metrics Grid */ .platform-metrics-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.5rem; } @media (min-width: 640px) { .platform-metrics-grid { gap: 0.75rem; } } @media (min-width: 768px) { .platform-metrics-grid { grid-template-columns: repeat(4, 1fr); gap: 1rem; } } /* Metric Card */ .metric-card { background-color: var(--color-bg-card); border-radius: var(--radius-xl); padding: 0.75rem; border: 1px solid var(--color-border-white-5); display: flex; flex-direction: column; gap: 0.375rem; box-shadow: var(--shadow-xl); transition: transform var(--transition-normal); } @media (min-width: 640px) { .metric-card { padding: 1rem; border-radius: var(--radius-2xl); gap: 0.5rem; } } .metric-card:hover { transform: scale(1.02); } .metric-card-header { display: flex; align-items: center; gap: 0.375rem; } .metric-card-icon { width: 1rem; height: 1rem; color: var(--color-text-gray-400); } @media (min-width: 640px) { .metric-card-icon { width: 1.25rem; height: 1.25rem; } } .metric-card-label { font-size: var(--text-xs); color: var(--color-text-gray-400); font-weight: 500; } @media (min-width: 640px) { .metric-card-label { font-size: var(--text-sm); } } .metric-card-value { font-size: var(--text-xl); font-weight: 700; color: var(--color-text-white); display: flex; align-items: baseline; gap: 0.25rem; } @media (min-width: 640px) { .metric-card-value { font-size: var(--text-2xl); } } @media (min-width: 768px) { .metric-card-value { font-size: 1.75rem; } } .metric-card-unit { font-size: var(--text-xs); color: var(--color-text-gray-500); font-weight: 400; } @media (min-width: 640px) { .metric-card-unit { font-size: var(--text-sm); } } .metric-card-trend { display: flex; align-items: center; gap: 0.25rem; font-size: 9px; font-weight: 500; } @media (min-width: 640px) { .metric-card-trend { font-size: var(--text-xs); } } .metric-card-trend.up { color: var(--color-mint); } .metric-card-trend.down { color: #f87171; } .metric-card-trend-icon { width: 10px; height: 10px; } @media (min-width: 640px) { .metric-card-trend-icon { width: 12px; height: 12px; } } /* YoY Chart */ .yoy-chart-card { background-color: var(--color-bg-card); border-radius: var(--radius-xl); padding: 0.75rem; border: 1px solid var(--color-border-white-5); box-shadow: var(--shadow-xl); margin-bottom: 0.75rem; } @media (min-width: 640px) { .yoy-chart-card { padding: 1rem; border-radius: var(--radius-2xl); } } @media (min-width: 768px) { .yoy-chart-card { padding: 1.5rem; margin-bottom: 1rem; } } .yoy-chart-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.75rem; } @media (min-width: 768px) { .yoy-chart-header { margin-bottom: 1rem; } } .yoy-chart-container { position: relative; width: 100%; height: 180px; } @media (min-width: 640px) { .yoy-chart-container { height: 220px; } } @media (min-width: 768px) { .yoy-chart-container { height: 280px; } } .yoy-chart-svg { width: 100%; height: 100%; } .yoy-chart-xaxis { display: flex; justify-content: space-between; margin-top: 0.5rem; padding: 0; font-size: 8px; color: var(--color-text-gray-500); font-weight: 500; } @media (min-width: 640px) { .yoy-chart-xaxis { font-size: 9px; margin-top: 0.75rem; } } @media (min-width: 768px) { .yoy-chart-xaxis { font-size: 10px; } } /* Chart Wrapper for Tooltip */ .yoy-chart-wrapper { position: relative; width: 100%; height: 100%; } /* Chart Tooltip */ .chart-tooltip { position: absolute; transform: translate(-50%, -100%); margin-top: -12px; background-color: rgba(28, 42, 46, 0.95); border: 1px solid var(--color-border-white-10); border-radius: var(--radius-lg); padding: 0.75rem; min-width: 120px; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3); pointer-events: none; z-index: 100; animation: tooltipFadeIn 0.2s ease; } @keyframes tooltipFadeIn { from { opacity: 0; transform: translate(-50%, -90%); } to { opacity: 1; transform: translate(-50%, -100%); } } .chart-tooltip-title { font-size: var(--text-sm); font-weight: 600; color: var(--color-text-white); margin-bottom: 0.5rem; text-align: center; } .chart-tooltip-row { display: flex; align-items: center; gap: 0.375rem; margin-bottom: 0.25rem; } .chart-tooltip-dot { width: 8px; height: 8px; border-radius: var(--radius-full); } .chart-tooltip-dot.mint { background-color: var(--color-mint); } .chart-tooltip-dot.purple { background-color: var(--color-purple); } .chart-tooltip-label { font-size: var(--text-xs); color: var(--color-text-gray-400); flex: 1; } .chart-tooltip-value { font-size: var(--text-xs); font-weight: 600; color: var(--color-text-white); } .chart-tooltip-change { margin-top: 0.5rem; padding-top: 0.5rem; border-top: 1px solid var(--color-border-white-5); font-size: var(--text-xs); font-weight: 600; color: var(--color-mint); text-align: center; } /* Chart Animations */ .chart-line-animated { stroke-dasharray: 2000; stroke-dashoffset: 2000; transition: stroke-dashoffset 1.5s ease-out; } .chart-line-animated.visible { stroke-dashoffset: 0; } .chart-area-animated { opacity: 0; transition: opacity 0.8s ease-out 0.5s; } .chart-area-animated.visible { opacity: 1; } .chart-point-animated { opacity: 0; transform-origin: center; transition: opacity 0.3s ease; } .chart-point-animated.visible { opacity: 1; } /* Platform Section Card */ .platform-section-card { background-color: var(--color-bg-card); border-radius: var(--radius-xl); padding: 0.75rem; border: 1px solid var(--color-border-white-5); box-shadow: var(--shadow-xl); } @media (min-width: 640px) { .platform-section-card { padding: 1rem; border-radius: var(--radius-2xl); } } @media (min-width: 768px) { .platform-section-card { padding: 1.5rem; } } .platform-section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.75rem; flex-wrap: wrap; gap: 0.5rem; } @media (min-width: 768px) { .platform-section-header { margin-bottom: 1rem; } } /* Stats Grid 8 Columns */ .stats-grid-8 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.5rem; } @media (min-width: 640px) { .stats-grid-8 { grid-template-columns: repeat(4, 1fr); gap: 0.75rem; } } @media (min-width: 1024px) { .stats-grid-8 { grid-template-columns: repeat(8, 1fr); } } /* Platform Metrics Grid 8 Columns */ .platform-metrics-grid-8 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.5rem; } @media (min-width: 640px) { .platform-metrics-grid-8 { grid-template-columns: repeat(4, 1fr); gap: 0.75rem; } } @media (min-width: 1024px) { .platform-metrics-grid-8 { grid-template-columns: repeat(4, 1fr); gap: 1rem; } } /* Dashboard Two Column Layout */ .dashboard-two-column { display: grid; grid-template-columns: 1fr; gap: 0.75rem; margin-bottom: 0.75rem; } @media (min-width: 1024px) { .dashboard-two-column { grid-template-columns: 2fr 1fr; gap: 1rem; margin-bottom: 1rem; } } /* Top Content Card */ .top-content-card { background-color: var(--color-bg-card); border-radius: var(--radius-xl); padding: 0.75rem; border: 1px solid var(--color-border-white-5); box-shadow: var(--shadow-xl); } @media (min-width: 640px) { .top-content-card { padding: 1rem; border-radius: var(--radius-2xl); } } @media (min-width: 768px) { .top-content-card { padding: 1.5rem; } } .top-content-list { display: flex; flex-direction: column; gap: 0.75rem; } .top-content-item { display: flex; gap: 0.75rem; padding: 0.5rem; border-radius: var(--radius-lg); background-color: var(--color-bg-card-inner); transition: transform var(--transition-normal); } .top-content-item:hover { transform: scale(1.01); } .top-content-thumbnail { position: relative; width: 80px; height: 45px; border-radius: var(--radius-md); overflow: hidden; flex-shrink: 0; } @media (min-width: 640px) { .top-content-thumbnail { width: 100px; height: 56px; } } .top-content-thumbnail img { width: 100%; height: 100%; object-fit: cover; } .top-content-platform-badge { position: absolute; bottom: 4px; right: 4px; background-color: rgba(0, 0, 0, 0.7); border-radius: var(--radius-sm); padding: 2px; display: flex; align-items: center; justify-content: center; } .top-content-platform-icon { width: 12px; height: 12px; color: white; } .top-content-info { flex: 1; min-width: 0; display: flex; flex-direction: column; justify-content: center; gap: 0.25rem; } .top-content-title { font-size: var(--text-xs); font-weight: 600; color: var(--color-text-white); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } @media (min-width: 640px) { .top-content-title { font-size: var(--text-sm); } } .top-content-stats { display: flex; gap: 0.75rem; } .top-content-stat { display: flex; align-items: center; gap: 0.25rem; font-size: 10px; color: var(--color-text-gray-400); } @media (min-width: 640px) { .top-content-stat { font-size: var(--text-xs); } } .top-content-stat svg { color: var(--color-text-gray-500); } .top-content-date { font-size: 9px; color: var(--color-text-gray-500); } @media (min-width: 640px) { .top-content-date { font-size: 10px; } } /* Audience Section */ .audience-section { margin-bottom: 0.75rem; } @media (min-width: 768px) { .audience-section { margin-bottom: 1rem; } } .audience-cards { display: grid; grid-template-columns: 1fr; gap: 0.75rem; } @media (min-width: 768px) { .audience-cards { grid-template-columns: repeat(3, 1fr); gap: 1rem; } } .audience-card { background-color: var(--color-bg-card); border-radius: var(--radius-xl); padding: 1rem; border: 1px solid var(--color-border-white-5); box-shadow: var(--shadow-xl); } @media (min-width: 640px) { .audience-card { padding: 1.25rem; border-radius: var(--radius-2xl); } } .audience-card-title { font-size: var(--text-sm); font-weight: 600; color: var(--color-text-gray-300); margin-bottom: 1rem; } /* Audience Bar Chart */ .audience-bar-chart { display: flex; flex-direction: column; gap: 0.625rem; } .audience-bar-item { display: flex; align-items: center; gap: 0.5rem; } .audience-bar-label { font-size: var(--text-xs); color: var(--color-text-gray-400); width: 40px; flex-shrink: 0; } .audience-bar-track { flex: 1; height: 8px; background-color: var(--color-bg-card-inner); border-radius: var(--radius-full); overflow: hidden; } .audience-bar-fill { height: 100%; background: linear-gradient(90deg, var(--color-mint), var(--color-purple)); border-radius: var(--radius-full); transition: width 0.5s ease-out; } .audience-bar-value { font-size: var(--text-xs); color: var(--color-text-white); width: 36px; text-align: right; flex-shrink: 0; } /* Gender Chart */ .gender-chart { display: flex; flex-direction: column; gap: 0.75rem; } .gender-chart-bars { display: flex; height: 32px; border-radius: var(--radius-full); overflow: hidden; } .gender-bar { display: flex; align-items: center; justify-content: center; transition: width 0.5s ease-out; } .gender-bar span { font-size: var(--text-xs); font-weight: 600; color: var(--color-bg-dark); } .gender-bar.male { background: linear-gradient(90deg, #60a5fa, #3b82f6); } .gender-bar.female { background: linear-gradient(90deg, #f472b6, #ec4899); } .gender-chart-labels { display: flex; justify-content: space-between; } .gender-label { display: flex; align-items: center; gap: 0.375rem; font-size: var(--text-xs); color: var(--color-text-gray-400); } .gender-label::before { content: ''; width: 8px; height: 8px; border-radius: var(--radius-full); } .gender-label.male::before { background-color: #3b82f6; } .gender-label.female::before { background-color: #ec4899; } /* ===================================================== Business Settings Components ===================================================== */ /* Settings Container */ .settings-container { width: 100%; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 0.75rem; background-color: var(--color-bg-dark); color: var(--color-text-white); overflow: hidden; } @media (min-width: 640px) { .settings-container { padding: 1rem; } } @media (min-width: 768px) { .settings-container { padding: 1.5rem; } } /* Settings Header */ .settings-header { text-align: center; margin-bottom: 1rem; max-width: 42rem; margin-left: 2.5rem; } @media (min-width: 640px) { .settings-header { margin-bottom: 1.5rem; } } @media (min-width: 768px) { .settings-header { margin-bottom: 2rem; margin-left: 0; } } .settings-title { font-size: var(--text-lg); font-weight: 700; margin-bottom: 0.25rem; } @media (min-width: 640px) { .settings-title { font-size: var(--text-xl); margin-bottom: 0.5rem; } } @media (min-width: 768px) { .settings-title { font-size: 1.5rem; } } @media (min-width: 1024px) { .settings-title { font-size: var(--text-3xl); } } .settings-description { color: var(--color-text-gray-400); font-size: 9px; font-weight: 300; line-height: 1.625; opacity: 0.8; } @media (min-width: 640px) { .settings-description { font-size: 10px; } } @media (min-width: 768px) { .settings-description { font-size: var(--text-xs); } } /* Settings Card */ .settings-card { width: 100%; max-width: 36rem; } .settings-card-inner { background-color: var(--color-bg-card); border-radius: var(--radius-xl); padding: 0.75rem; border: 1px solid var(--color-border-white-5); box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); } @media (min-width: 640px) { .settings-card-inner { padding: 1rem; border-radius: var(--radius-2xl); } } @media (min-width: 768px) { .settings-card-inner { padding: 1.5rem; border-radius: var(--radius-3xl); } } .settings-card-title { color: var(--color-mint); font-size: 9px; font-weight: 700; margin-bottom: 0.5rem; letter-spacing: 0.1em; text-transform: uppercase; } @media (min-width: 640px) { .settings-card-title { font-size: 10px; margin-bottom: 0.75rem; } } @media (min-width: 768px) { .settings-card-title { font-size: var(--text-xs); margin-bottom: 1rem; } } /* Social Items */ .social-items { display: flex; flex-direction: column; gap: 0.5rem; } @media (min-width: 640px) { .social-items { gap: 0.75rem; } } .social-item { background-color: var(--color-bg-dark); padding: 0.5rem; border-radius: var(--radius-lg); border: 1px solid var(--color-border-white-5); display: flex; align-items: center; justify-content: space-between; transition: border-color var(--transition-normal); } @media (min-width: 640px) { .social-item { padding: 0.75rem; border-radius: var(--radius-xl); } } .social-item:hover { border-color: var(--color-border-white-10); } .social-item-left { display: flex; align-items: center; gap: 0.5rem; } @media (min-width: 640px) { .social-item-left { gap: 0.75rem; } } .social-item-icon { width: 1.5rem; height: 1.5rem; border-radius: var(--radius-lg); display: flex; align-items: center; justify-content: center; } @media (min-width: 640px) { .social-item-icon { width: 2rem; height: 2rem; } } .social-item-icon-inner { width: 0.75rem; height: 0.75rem; } @media (min-width: 640px) { .social-item-icon-inner { width: 1rem; height: 1rem; } } .social-item-name { font-size: 10px; font-weight: 700; color: var(--color-text-gray-300); } @media (min-width: 640px) { .social-item-name { font-size: var(--text-xs); } } .social-item-connect { color: var(--color-mint); font-size: 9px; font-weight: 700; background: none; border: none; cursor: pointer; } @media (min-width: 640px) { .social-item-connect { font-size: 10px; } } .social-item-connect:hover { text-decoration: underline; } /* ===================================================== Footer Component ===================================================== */ /* Landing Footer */ .landing-footer { width: 100%; background-color: #002224; padding: 40px 1.5rem; } @media (min-width: 768px) { .landing-footer { padding: 48px 5rem; } } @media (min-width: 1024px) { .landing-footer { padding: 60px 148px; } } .footer-content { display: flex; flex-direction: column; gap: 2rem; max-width: 1144px; margin: 0 auto; } @media (min-width: 768px) { .footer-content { flex-direction: row; justify-content: space-between; align-items: flex-start; gap: 4rem; } } .footer-left { display: flex; flex-direction: column; gap: 1rem; } .footer-logo { height: 24px; width: auto; object-fit: contain; } .footer-copyright { font-size: 14px; font-weight: 400; color: #379599; letter-spacing: -0.006em; line-height: 1.19; } .footer-right { display: flex; flex-direction: column; gap: 4px; } .footer-info { font-size: 12px; font-weight: 400; color: #CEE5E6; letter-spacing: -0.006em; line-height: 1.19; } @media (min-width: 768px) { .footer-info { font-size: 14px; } } /* ===================================================== Header Component ===================================================== */ /* Landing Header */ .landing-header { width: calc(100% - 2rem); max-width: 1280px; padding: 12px 12px 12px 24px; display: flex; justify-content: space-between; align-items: center; position: fixed; top: 16px; left: 50%; transform: translateX(-50%); z-index: 100; background: rgba(0, 34, 36, 0.3); border: 1px solid rgba(229, 241, 242, 0.2); border-radius: 999px; backdrop-filter: blur(40px); -webkit-backdrop-filter: blur(40px); } @media (min-width: 768px) { .landing-header { width: calc(100% - 10rem); } } .header-logo { display: flex; align-items: center; height: 16px; } .header-logo img { height: 100%; width: auto; object-fit: contain; } .header-login-btn { padding: 10px 24px; border-radius: 999px; background-color: #94FBE0; color: #000000; font-weight: 600; font-size: 14px; border: none; cursor: pointer; transition: all var(--transition-normal); letter-spacing: -0.006em; line-height: 1.19; } .header-login-btn:hover { background-color: #7fe8cc; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(148, 251, 224, 0.3); } .header-login-btn:active { transform: scale(0.95); } .header-start-btn { padding: 10px 24px; border-radius: 999px; background-color: #AE72F9; color: #FFFFFF; font-weight: 600; font-size: 14px; border: none; cursor: pointer; transition: all var(--transition-normal); letter-spacing: -0.006em; line-height: 1.19; } .header-start-btn:hover { background-color: #9B5DE5; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(174, 114, 249, 0.3); } .header-start-btn:active { transform: scale(0.95); } .header-avatar { width: 2rem; height: 2rem; border-radius: var(--radius-full); overflow: hidden; border: 1px solid var(--color-border-gray-700); box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); } @media (min-width: 640px) { .header-avatar { width: 2.5rem; height: 2.5rem; } } .header-avatar img { width: 100%; height: 100%; object-fit: cover; } /* ===================================================== Content Safe Area (for Landing Pages) ===================================================== */ .content-safe-area { display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 0 1rem; } /* ===================================================== Sound Studio Styles ===================================================== */ /* Sound Studio Header */ .sound-studio-header { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 2rem; gap: 1rem; } .btn-back-new { display: flex; align-items: center; gap: 0.25rem; padding: 0.5rem 1.25rem 0.5rem 0.5rem; background-color: #462E64; border: 1px solid #694596; border-radius: var(--radius-full); color: #CFABFB; font-size: var(--text-sm); font-weight: 600; cursor: pointer; transition: all var(--transition-normal); width: fit-content; flex-shrink: 0; } .btn-back-new:hover { background-color: #694596; border-color: #8B5BC7; } /* Progress Indicator */ .progress-indicator { display: flex; flex-direction: column; gap: 0.25rem; width: 280px; } .progress-label { display: flex; align-items: center; gap: 1rem; } .progress-text { font-size: 0.8125rem; font-weight: 600; color: var(--color-text-white); } .progress-numbers { display: flex; align-items: center; gap: 0.25rem; } .progress-current { font-size: 0.8125rem; font-weight: 600; color: var(--color-text-white); } .progress-divider, .progress-total { font-size: 0.8125rem; font-weight: 400; color: #379599; } .progress-bar-wrapper { position: relative; width: 100%; height: 8px; background-color: #01393B; border-radius: var(--radius-full); overflow: hidden; } .progress-bar-track { width: 100%; height: 100%; background: linear-gradient(90deg, #94FBE0 0%, #AE72F9 100%); border-radius: var(--radius-full); } /* Sound Studio Title */ .sound-studio-title { font-size: 2rem; font-weight: 700; color: #E5F1F2; margin: 1rem auto 1.5rem auto; padding: 0 2rem; max-width: 1200px; width: 100%; line-height: 1.19; letter-spacing: -0.006em; } /* Sound Studio Container */ .sound-studio-container { background-color: #01393B; border-radius: 40px; padding: 2rem; margin: 0 auto 1.5rem auto; max-width: 1136px; width: calc(100% - 4rem); display: flex; flex-direction: column; gap: 1.25rem; flex: 1; min-height: 0; } /* Sound Studio Columns */ .sound-studio-columns { display: flex; flex-direction: column; gap: 1.5rem; flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; } /* Sound Column */ .sound-column { width: 100%; display: flex; flex-direction: column; gap: 1.25rem; flex-shrink: 0; } /* Lyrics Column */ .lyrics-column { width: 100%; display: flex; flex-direction: column; gap: 1.25rem; flex-shrink: 0; } /* Column Title */ .column-title { font-size: 1.125rem; font-weight: 600; color: var(--color-mint); line-height: 1.19; letter-spacing: -0.006em; } /* Sound Studio Section */ .sound-studio-section { display: flex; flex-direction: column; gap: 0.5rem; } /* Input Label */ .input-label { font-size: var(--text-sm); font-weight: 600; color: #CEE5E6; line-height: 1.19; letter-spacing: -0.006em; } /* Sound Type Grid */ .sound-type-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.75rem; } /* Sound Type Button */ .sound-type-btn { padding: 1rem; background-color: #002224; border: 1px solid rgba(255, 255, 255, 0.05); border-radius: 8px; color: var(--color-text-white); font-size: var(--text-sm); font-weight: 600; cursor: pointer; transition: all var(--transition-normal); text-align: center; line-height: 1.19; letter-spacing: -0.006em; } .sound-type-btn:hover:not(:disabled) { background-color: rgba(0, 34, 36, 0.8); border-color: rgba(255, 255, 255, 0.1); } .sound-type-btn.active { border-color: var(--color-mint); } .sound-type-btn:disabled { opacity: 0.5; cursor: not-allowed; } .sound-type-btn.permanently-disabled { opacity: 0.35; cursor: not-allowed; background-color: rgba(255, 255, 255, 0.03); border-color: rgba(255, 255, 255, 0.1); color: rgba(255, 255, 255, 0.4); } /* Genre Grid */ .genre-grid { display: flex; flex-direction: column; gap: 0.75rem; } .genre-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.75rem; } /* Genre Button */ .genre-btn { padding: 1rem; background-color: #002224; border: 1px solid rgba(255, 255, 255, 0.05); border-radius: 8px; color: var(--color-text-white); font-size: var(--text-sm); font-weight: 600; cursor: pointer; transition: all var(--transition-normal); text-align: center; line-height: 1.19; letter-spacing: -0.006em; } .genre-btn:hover:not(:disabled) { background-color: rgba(0, 34, 36, 0.8); border-color: rgba(255, 255, 255, 0.1); } .genre-btn.active { border-color: var(--color-mint); } .genre-btn:disabled { opacity: 0.5; cursor: not-allowed; } .genre-btn-placeholder { /* Empty space for grid alignment */ } /* Language Selector */ .language-selector-wrapper { position: relative; } .language-selector { width: 100%; display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 1rem; background-color: #002224; border: 1px solid transparent; border-radius: 8px; cursor: pointer; transition: border-color 0.2s, background-color 0.2s; } .language-selector:hover:not(:disabled) { background-color: #003A3C; } .language-selector:disabled { opacity: 0.5; cursor: not-allowed; } .language-display { display: flex; align-items: center; gap: 0.5rem; } .language-flag { font-size: 1.25rem; line-height: 1.19; letter-spacing: -0.006em; } .language-name { font-size: var(--text-sm); font-weight: 600; color: var(--color-text-white); line-height: 1.19; letter-spacing: -0.006em; } .language-dropdown-icon { width: 1rem; height: 1rem; opacity: 0.7; transition: transform 0.2s; } .language-dropdown-icon.open { transform: rotate(180deg); } /* Language Dropdown Menu */ .language-dropdown-menu { position: absolute; top: calc(100% + 0.5rem); left: 0; right: 0; max-height: 240px; background-color: #002224; border: 1px solid #046266; border-radius: 8px; overflow-y: auto; z-index: 100; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); overscroll-behavior: contain; } .language-dropdown-menu::-webkit-scrollbar { width: 6px; } .language-dropdown-menu::-webkit-scrollbar-track { background: transparent; } .language-dropdown-menu::-webkit-scrollbar-thumb { background: #046266; border-radius: 3px; } .language-dropdown-menu::-webkit-scrollbar-thumb:hover { background: #379599; } .language-dropdown-item { width: 100%; display: flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1rem; background-color: #002224; border: none; cursor: pointer; transition: background-color 0.2s; } .language-dropdown-item:hover { background-color: #003A3C; } .language-dropdown-item.active { background-color: #046266; } .language-dropdown-item .language-flag { font-size: 1.25rem; } .language-dropdown-item .language-name { font-size: var(--text-sm); font-weight: 600; color: var(--color-text-white); } /* Lyrics Header */ .lyrics-header { display: flex; flex-direction: column; gap: 0.25rem; } .lyrics-subtitle { font-size: var(--text-sm); font-weight: 600; color: #CEE5E6; line-height: 1.19; letter-spacing: -0.006em; } /* Audio Player */ .audio-player { display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 1rem; background-color: #002224; border-radius: 8px; } .play-btn-new { width: 1.5rem; height: 1.5rem; display: flex; align-items: center; justify-content: center; background: none; border: none; color: var(--color-text-white); cursor: pointer; transition: all var(--transition-normal); flex-shrink: 0; } .play-btn-new:hover:not(.disabled) { color: var(--color-mint); } .play-btn-new.disabled { opacity: 0.3; cursor: not-allowed; } .audio-progress-container { flex: 1; height: 4px; background-color: #046266; border-radius: var(--radius-full); position: relative; cursor: pointer; } .audio-progress-container.disabled { cursor: not-allowed; } .audio-progress-fill { height: 100%; background-color: var(--color-mint); border-radius: var(--radius-full); transition: width 0.1s ease-out; } .audio-time { font-size: var(--text-sm); font-weight: 400; color: #046266; min-width: 40px; text-align: right; line-height: 1.19; letter-spacing: -0.006em; } /* Lyrics Display */ .lyrics-display { flex: 1; display: flex; background-color: #002224; border-radius: 8px; padding: 1rem; min-height: 200px; overflow: hidden; } .lyrics-textarea { width: 100%; background: transparent; border: none; color: var(--color-text-white); font-size: var(--text-sm); font-family: inherit; resize: none; outline: none; line-height: 1.6; } .lyrics-placeholder { width: 100%; display: flex; align-items: center; justify-content: center; font-size: var(--text-sm); font-weight: 400; color: #6AB0B3; text-align: center; line-height: 1.19; letter-spacing: -0.006em; } /* Generate Sound Button */ .btn-generate-sound { width: 100%; padding: 0.625rem 2.5rem; background-color: #01393B; border: 1px solid var(--color-mint); border-radius: var(--radius-full); color: var(--color-mint); font-size: var(--text-sm); font-weight: 600; cursor: pointer; transition: all var(--transition-normal); display: flex; align-items: center; justify-content: center; gap: 0.5rem; line-height: 1.19; letter-spacing: -0.006em; } .btn-generate-sound:hover:not(.disabled) { background-color: var(--color-mint); color: #000000; } .btn-generate-sound.disabled { opacity: 0.5; cursor: not-allowed; } /* Video Generate Button */ .btn-video-generate { padding: 0.625rem 2.5rem; background-color: #AE72F9; border: none; border-radius: var(--radius-full); color: #FFFFFF; font-size: var(--text-sm); font-weight: 600; cursor: pointer; transition: all var(--transition-normal); line-height: 1.19; letter-spacing: -0.006em; display: flex; flex-direction: column; align-items: center; gap: 1rem; min-width: fit-content; } .btn-video-generate:hover:not(.disabled):not(.generating) { background-color: #9B5DE5; } .btn-video-generate.disabled { background-color: #462E64; color: #8B5BC7; opacity: 0.7; cursor: not-allowed; } .btn-video-generate.generating { background-color: #AE72F9; color: #FFFFFF; padding: 0.625rem 1.5rem; cursor: default; } .video-gen-text { font-size: var(--text-sm); font-weight: 600; color: #FFFFFF; line-height: 1.19; letter-spacing: -0.006em; } .video-gen-progress-bar { width: 280px; height: 8px; background-color: #694596; border-radius: var(--radius-full); overflow: hidden; position: relative; } .video-gen-progress-fill { height: 100%; background-color: #FFFFFF; border-radius: var(--radius-full); transition: width 0.5s ease-out; } /* Error and Status Messages */ .error-message-new { padding: 0.75rem 1rem; background-color: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.3); border-radius: var(--radius-lg); color: #fca5a5; font-size: var(--text-sm); text-align: center; } .status-message-new { padding: 0.75rem 1rem; background-color: rgba(148, 251, 224, 0.1); border: 1px solid rgba(148, 251, 224, 0.3); border-radius: var(--radius-lg); color: var(--color-mint); font-size: var(--text-sm); text-align: center; display: flex; align-items: center; justify-content: center; gap: 0.5rem; } /* Responsive Styles for Sound Studio */ @media (max-width: 639px) { .sound-studio-header { padding: 0.5rem 1rem; flex-direction: column; align-items: stretch; } .progress-indicator { width: 100%; } .sound-studio-title { font-size: 1.5rem; padding: 0 1rem; margin: 0.75rem auto 1rem auto; } .sound-studio-container { padding: 1.25rem; width: calc(100% - 2rem); } .sound-type-grid { gap: 0.5rem; } .sound-type-btn { padding: 0.75rem 0.5rem; font-size: var(--text-xs); } .genre-row { gap: 0.5rem; } .genre-btn { padding: 0.5rem 0.75rem; font-size: var(--text-xs); } .lyrics-display { min-height: 150px; } } @media (min-width: 640px) and (max-width: 767px) { .sound-studio-header { padding: 0.5rem 1.5rem; } .sound-studio-title { font-size: 1.75rem; padding: 0 1.5rem; margin: 0.875rem auto 1.25rem auto; } .sound-studio-container { padding: 1.5rem; width: calc(100% - 3rem); } .sound-studio-columns { gap: 2rem; } } @media (min-width: 768px) and (max-width: 1023px) { .sound-studio-columns { gap: 2rem; } } @media (min-width: 1024px) { .sound-studio-container { padding: 2.5rem; } .sound-studio-columns { flex-direction: row; gap: 3rem; overflow: hidden; } .sound-column { flex: 1; width: auto; min-height: 0; overflow-y: auto; } .lyrics-column { flex: 1; width: auto; min-height: 0; } .column-title { font-size: 1.25rem; } .lyrics-display { min-height: 250px; } } /* Height-based responsive adjustments */ @media (max-height: 800px) { .sound-studio-container { gap: 1rem; } .sound-studio-columns { gap: 2rem; } } @media (max-height: 700px) { .sound-studio-title { font-size: 1.75rem; margin: 0.75rem 2rem 1rem 2rem; } .sound-studio-container { padding: 1.5rem; gap: 1rem; } .sound-studio-columns { gap: 1.5rem; } .sound-studio-section { gap: 0.5rem; } .lyrics-display { min-height: 180px; } } @media (max-height: 600px) { .sound-studio-header { padding: 0.375rem 2rem; } .sound-studio-title { font-size: 1.5rem; margin: 0.5rem 2rem 0.75rem 2rem; } .sound-studio-container { padding: 1.25rem; gap: 0.875rem; } .sound-studio-columns { gap: 1.25rem; } .sound-type-btn, .genre-btn { padding: 0.625rem 0.75rem; } .lyrics-display { min-height: 150px; } } /* ==================================== Asset Management (Brand Asset) Styles ==================================== */ /* Asset Header */ .asset-header { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 2rem; margin-bottom: 1rem; } /* Asset Title */ .asset-title { font-size: 2rem; font-weight: 700; color: #E5F1F2; margin: 1rem auto 1.5rem auto; padding: 0 2rem; max-width: 1200px; width: 100%; line-height: 1.19; letter-spacing: -0.006em; } /* Asset Container */ .asset-container { background-color: #01393B; border-radius: 40px; padding: 2rem; margin: 0 auto 1.5rem auto; max-width: 1136px; width: calc(100% - 4rem); display: flex; flex-direction: column; gap: 1.5rem; flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; } @media (min-width: 1024px) { .asset-container { flex-direction: row; overflow: hidden; } } /* Asset Columns */ .asset-column { display: flex; flex-direction: column; gap: 1.25rem; } .asset-column-left { width: 100%; min-width: 0; flex-shrink: 0; } .asset-column-right { width: 100%; flex-shrink: 0; } @media (min-width: 1024px) { .asset-column-left { flex: 1; min-height: 0; overflow: hidden; } .asset-column-right { width: 280px; } } /* Asset Section Title */ .asset-section-title { font-size: 1.125rem; font-weight: 600; color: #94FBE0; line-height: 1.19; letter-spacing: -0.006em; margin: 0; } /* Asset Image List */ .asset-image-list { min-height: 120px; max-height: 200px; overflow-y: auto; overscroll-behavior: contain; background-color: #002224; border-radius: 8px; padding: 0.5rem; } @media (min-width: 1024px) { .asset-image-list { flex: 1; min-height: 0; max-height: none; } } .asset-image-list::-webkit-scrollbar { width: 6px; } .asset-image-list::-webkit-scrollbar-track { background: transparent; } .asset-image-list::-webkit-scrollbar-thumb { background: #379599; border-radius: 3px; } .asset-image-list::-webkit-scrollbar-thumb:hover { background: #4AABAF; } /* Asset Image Grid */ .asset-image-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.5rem; } .asset-image-item { position: relative; aspect-ratio: 1; border-radius: 8px; overflow: hidden; background-color: #000; } .asset-image-item img { width: 100%; height: 100%; object-fit: cover; } .asset-image-badge { position: absolute; top: 8px; left: 8px; background-color: #EFE3FE; color: #AE72F9; font-size: 0.75rem; font-weight: 600; padding: 4px 8px; border-radius: 4px; line-height: 1.19; letter-spacing: -0.006em; } .asset-image-remove { position: absolute; top: 8px; right: 8px; width: 30px; height: 30px; background-color: rgba(0, 0, 0, 0.6); border: none; border-radius: 999px; display: flex; align-items: center; justify-content: center; cursor: pointer; color: #FFFFFF; transition: background-color 0.2s; } .asset-image-remove:hover { background-color: rgba(0, 0, 0, 0.8); } /* Asset Upload Section */ .asset-upload-section { display: flex; flex-direction: column; gap: 1.25rem; flex: 1; } .asset-upload-zone { flex: 1; border: 1px dashed #379599; border-radius: 8px; background-color: #002224; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: border-color 0.2s, background-color 0.2s; min-height: 150px; } .asset-upload-zone:hover { border-color: #4AABAF; background-color: #003A3C; } .asset-upload-text { font-size: 0.875rem; font-weight: 600; color: #9BCACC; text-align: center; line-height: 1.19; letter-spacing: -0.006em; margin: 0; } /* Asset Ratio Section */ .asset-ratio-section { display: flex; flex-direction: column; gap: 1.25rem; } .asset-ratio-buttons { display: flex; flex-direction: column; gap: 0.75rem; } .asset-ratio-button { display: flex; align-items: center; gap: 1rem; padding: 1rem; background-color: #002224; border: 1px solid transparent; border-radius: 8px; cursor: pointer; transition: border-color 0.2s, background-color 0.2s; color: #FFFFFF; font-size: 0.875rem; font-weight: 600; line-height: 1.19; letter-spacing: -0.006em; } .asset-ratio-button:hover { background-color: #003A3C; } .asset-ratio-button.active { border-color: #94FBE0; background-color: #002224; } .asset-ratio-icon { width: 32px; height: 32px; background-color: #002224; border-radius: 2px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .asset-ratio-icon-vertical .asset-ratio-box { width: 18px; height: 32px; background-color: #046266; border-radius: 4px; } .asset-ratio-icon-horizontal .asset-ratio-box { width: 32px; height: 18px; background-color: #046266; border-radius: 4px; } /* Asset Bottom Button */ .asset-bottom { display: flex; flex-direction: column; align-items: center; gap: 0.5rem; padding: 0 2rem 1.5rem 2rem; } .asset-next-button { background-color: #AE72F9; color: #FFFFFF; font-size: 0.875rem; font-weight: 600; padding: 10px 40px; border: none; border-radius: 999px; cursor: pointer; transition: background-color 0.2s; line-height: 1.19; letter-spacing: -0.006em; } .asset-next-button:hover:not(:disabled) { background-color: #9D5FE8; } .asset-next-button:disabled { opacity: 0.5; cursor: not-allowed; } /* Responsive Styles */ @media (max-width: 639px) { .asset-header { padding: 0.5rem 1rem; } .asset-title { font-size: 1.5rem; padding: 0 1rem; margin: 0.75rem auto 1rem auto; } .asset-container { padding: 1.25rem; width: calc(100% - 2rem); gap: 1.25rem; } .asset-image-grid { grid-template-columns: repeat(2, 1fr); } .asset-bottom { padding: 0 1rem 1rem 1rem; } } @media (min-width: 640px) and (max-width: 767px) { .asset-header { padding: 0.5rem 1.5rem; } .asset-title { font-size: 1.75rem; padding: 0 1.5rem; margin: 0.875rem auto 1.25rem auto; } .asset-container { padding: 1.5rem; width: calc(100% - 3rem); } .asset-bottom { padding: 0 1.5rem 1.25rem 1.5rem; } } @media (min-width: 768px) and (max-width: 1023px) { .asset-container { padding: 1.75rem; } } @media (min-width: 1024px) { .asset-container { padding: 2.5rem; } } /* Height-based responsive adjustments */ @media (max-height: 800px) { .asset-container { padding: 1.75rem; } .asset-upload-zone { min-height: 120px; } } @media (max-height: 700px) { .asset-container { padding: 1.5rem; } .asset-title { font-size: 1.75rem; margin: 0.75rem auto 1rem auto; } .asset-upload-zone { min-height: 100px; } } @media (max-height: 600px) { .asset-container { padding: 1.25rem; gap: 0.875rem; } .asset-column { gap: 1rem; } .asset-upload-section, .asset-ratio-section { gap: 1rem; } .asset-upload-zone { min-height: 80px; } } /* ===================================================== ADO2 Contents Page Styles ===================================================== */ .ado2-contents-page { padding: 32px; min-height: 100%; background-color: var(--color-bg-darker); } .ado2-contents-header { display: flex; align-items: baseline; gap: 16px; margin-bottom: 32px; } .ado2-contents-title { font-size: 32px; font-weight: 700; color: var(--color-text-white); letter-spacing: -0.6%; } .ado2-contents-count { font-size: 17px; font-weight: 500; color: #9BCACC; } .ado2-contents-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; } .ado2-content-card { display: flex; flex-direction: column; border-radius: 20px; overflow: hidden; background-color: #034A4D; } .content-card-thumbnail { width: 100%; aspect-ratio: 9 / 16; background-color: #01393B; display: flex; align-items: center; justify-content: center; overflow: hidden; } .content-video-preview { width: 100%; height: 100%; object-fit: cover; } .content-no-video { color: #6AB0B3; display: flex; align-items: center; justify-content: center; } .content-card-info { padding: 16px; display: flex; flex-direction: column; gap: 16px; } .content-card-text { display: flex; flex-direction: column; gap: 8px; } .content-card-title { font-size: 17px; font-weight: 700; color: var(--color-text-white); letter-spacing: -0.6%; margin: 0; } .content-card-date { font-size: 12px; font-weight: 400; color: #6AB0B3; letter-spacing: -0.6%; margin: 0; } .content-card-actions { display: flex; gap: 6px; } .content-download-btn { flex: 1; display: flex; align-items: center; justify-content: center; gap: 4px; padding: 10px 10px 10px 8px; height: 34px; background-color: #462E64; border: none; border-radius: 8px; color: #F7F1FE; font-size: 14px; font-weight: 600; cursor: pointer; transition: background-color 0.2s; } .content-download-btn:hover:not(:disabled) { background-color: #563d7a; } .content-download-btn:disabled { opacity: 0.5; cursor: not-allowed; } .content-download-btn svg { stroke: #F7F1FE; } .content-delete-btn { width: 34px; height: 34px; display: flex; align-items: center; justify-content: center; padding: 8px; background-color: #01393B; border: none; border-radius: 8px; color: #6AB0B3; cursor: pointer; transition: background-color 0.2s; } .content-delete-btn:hover { background-color: #024648; } .content-delete-btn svg { stroke: #6AB0B3; } /* Loading, Error, Empty States */ .ado2-contents-loading, .ado2-contents-error, .ado2-contents-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 400px; gap: 16px; color: #9BCACC; } .ado2-contents-loading .loading-spinner { width: 40px; height: 40px; border: 3px solid #01393B; border-top-color: #6AB0B3; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .retry-btn { padding: 10px 20px; background-color: #034A4D; border: 1px solid #6AB0B3; border-radius: 8px; color: #6AB0B3; font-size: 14px; cursor: pointer; transition: background-color 0.2s; } .retry-btn:hover { background-color: #024648; } /* Pagination */ .ado2-contents-pagination { display: flex; align-items: center; justify-content: center; gap: 16px; margin-top: 32px; padding-bottom: 32px; } .pagination-btn { padding: 10px 20px; background-color: #034A4D; border: 1px solid #6AB0B3; border-radius: 8px; color: #6AB0B3; font-size: 14px; cursor: pointer; transition: background-color 0.2s; } .pagination-btn:hover:not(:disabled) { background-color: #024648; } .pagination-btn:disabled { opacity: 0.5; cursor: not-allowed; } .pagination-info { color: #9BCACC; font-size: 14px; } /* Responsive */ @media (max-width: 768px) { .ado2-contents-page { padding: 16px; } .ado2-contents-header { flex-direction: column; gap: 8px; } .ado2-contents-title { font-size: 24px; } .ado2-contents-grid { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; } } /* ===================================================== Delete Confirmation Modal ===================================================== */ .delete-modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.6); display: flex; align-items: center; justify-content: center; z-index: 1000; } .delete-modal { background: linear-gradient(180deg, #1A3A3E 0%, #0D2426 100%); border: 1px solid rgba(148, 251, 224, 0.2); border-radius: 16px; padding: 32px 40px; min-width: 360px; max-width: 90vw; text-align: center; } .delete-modal-title { font-size: 18px; font-weight: 600; color: #FFFFFF; margin: 0 0 12px 0; } .delete-modal-description { font-size: 14px; color: rgba(255, 255, 255, 0.6); margin: 0 0 28px 0; } .delete-modal-actions { display: flex; gap: 12px; justify-content: center; } .delete-modal-btn { padding: 12px 32px; border-radius: 8px; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.2s ease; border: none; } .delete-modal-btn.cancel { background-color: rgba(255, 255, 255, 0.1); color: #FFFFFF; border: 1px solid rgba(255, 255, 255, 0.2); } .delete-modal-btn.cancel:hover { background-color: rgba(255, 255, 255, 0.15); } .delete-modal-btn.confirm { background-color: #EF4444; color: #FFFFFF; } .delete-modal-btn.confirm:hover { background-color: #DC2626; } .delete-modal-btn:disabled { opacity: 0.5; cursor: not-allowed; } /* ============================================ Social Connect Pages ============================================ */ .social-connect-page { min-height: 100vh; display: flex; align-items: center; justify-content: center; background-color: #002224; padding: 1rem; } .social-connect-card { background-color: #0a1a1c; border-radius: 16px; padding: 3rem; max-width: 400px; width: 100%; text-align: center; border: 1px solid rgba(255, 255, 255, 0.1); } .social-connect-card.success { border-color: rgba(148, 251, 224, 0.3); } .social-connect-card.error { border-color: rgba(248, 113, 113, 0.3); } .social-connect-icon { width: 80px; height: 80px; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 0 auto 1.5rem; } .social-connect-icon.success { background-color: rgba(148, 251, 224, 0.15); color: #94FBE0; } .social-connect-icon.error { background-color: rgba(248, 113, 113, 0.15); color: #f87171; } .social-connect-profile-image { width: 80px; height: 80px; border-radius: 50%; object-fit: cover; margin: 0 auto 1.5rem; border: 3px solid #94FBE0; } .social-connect-account-info { margin-bottom: 1.5rem; } .social-connect-channel-badge { display: inline-flex; align-items: center; gap: 0.375rem; padding: 0.375rem 0.875rem; background-color: rgba(148, 251, 224, 0.15); color: #94FBE0; border-radius: 9999px; font-size: 0.875rem; font-weight: 500; } .social-connect-title { font-size: 1.5rem; font-weight: 600; color: #FFFFFF; margin-bottom: 0.75rem; } .social-connect-message { font-size: 1rem; color: rgba(255, 255, 255, 0.7); margin-bottom: 0.5rem; } .social-connect-detail { font-size: 0.875rem; color: rgba(255, 255, 255, 0.5); margin-bottom: 1.5rem; } .social-connect-countdown { font-size: 0.875rem; color: #94FBE0; margin-bottom: 1rem; } .social-connect-actions { display: flex; flex-direction: column; gap: 0.75rem; } .social-connect-button { width: 100%; padding: 0.875rem 1.5rem; border-radius: 9999px; font-size: 0.875rem; font-weight: 600; cursor: pointer; transition: all 0.2s ease; border: none; background-color: #94FBE0; color: #002224; } .social-connect-button:hover { background-color: #7fe6cb; } .social-connect-button.secondary { background-color: transparent; color: #FFFFFF; border: 1px solid rgba(255, 255, 255, 0.2); } .social-connect-button.secondary:hover { background-color: rgba(255, 255, 255, 0.1); } /* ============================================ My Info Page (내 정보) ============================================ */ .myinfo-page { flex: 1; padding: 2rem; max-width: 900px; background-color: #002224; } .myinfo-title { font-size: 1.75rem; font-weight: 700; color: #FFFFFF; margin-bottom: 1.5rem; } /* 탭 네비게이션 */ .myinfo-tabs { display: flex; gap: 0.5rem; border-bottom: 1px solid rgba(255, 255, 255, 0.1); margin-bottom: 2rem; } .myinfo-tab { padding: 0.75rem 1rem; background: none; border: none; color: rgba(255, 255, 255, 0.5); font-size: 0.9rem; font-weight: 500; cursor: pointer; position: relative; transition: color 0.2s ease; } .myinfo-tab:hover { color: rgba(255, 255, 255, 0.8); } .myinfo-tab.active { color: #FFFFFF; } .myinfo-tab.active::after { content: ''; position: absolute; bottom: -1px; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, #a6ffea, #a682ff); } /* 탭 컨텐츠 */ .myinfo-content { display: flex; flex-direction: column; gap: 2rem; } .myinfo-section { display: flex; flex-direction: column; gap: 1rem; } .myinfo-section-title { font-size: 0.875rem; font-weight: 500; color: rgba(255, 255, 255, 0.6); text-transform: uppercase; letter-spacing: 0.05em; } .myinfo-placeholder { color: rgba(255, 255, 255, 0.5); font-size: 0.9rem; padding: 2rem; text-align: center; background: rgba(255, 255, 255, 0.03); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.06); } /* 내 비즈니스 카드 */ .myinfo-business-card { background: rgba(255, 255, 255, 0.03); border: 1px solid rgba(255, 255, 255, 0.06); border-radius: 12px; padding: 1.5rem; } .myinfo-business-empty-title { font-size: 1.1rem; font-weight: 600; color: #FFFFFF; margin-bottom: 0.5rem; } .myinfo-business-empty-desc { font-size: 0.85rem; color: rgba(255, 255, 255, 0.5); margin-bottom: 1.25rem; } .myinfo-business-input-row { display: flex; gap: 0.75rem; align-items: center; } .myinfo-business-input { flex: 1; padding: 0.75rem 1rem; background: rgba(0, 0, 0, 0.3); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 8px; color: #FFFFFF; font-size: 0.9rem; } .myinfo-business-input::placeholder { color: rgba(255, 255, 255, 0.3); } .myinfo-business-input:focus { outline: none; border-color: #a6ffea; } .myinfo-business-submit { padding: 0.75rem 1.25rem; background: linear-gradient(135deg, #a6ffea 0%, #7ee8cf 100%); border: none; border-radius: 8px; color: #002224; font-size: 0.875rem; font-weight: 600; cursor: pointer; white-space: nowrap; transition: all 0.2s ease; } .myinfo-business-submit:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(166, 255, 234, 0.3); } /* 소셜 채널 버튼들 (가로 배치) */ .myinfo-social-buttons { display: flex; gap: 0.75rem; flex-wrap: wrap; } .myinfo-social-btn { display: flex; align-items: center; gap: 0.5rem; padding: 0.625rem 1rem; background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.15); border-radius: 8px; color: #FFFFFF; font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: all 0.2s ease; } .myinfo-social-btn:hover:not(:disabled) { background: rgba(255, 255, 255, 0.1); border-color: rgba(255, 255, 255, 0.25); } .myinfo-social-btn.connected { border-color: rgba(166, 255, 234, 0.4); background: rgba(166, 255, 234, 0.08); } .myinfo-social-btn:disabled, .myinfo-social-btn.disabled { opacity: 0.5; cursor: not-allowed; } .myinfo-social-btn-icon { width: 20px; height: 20px; border-radius: 4px; object-fit: cover; } /* 연결된 계정 목록 */ .myinfo-connected-accounts { display: flex; flex-direction: column; gap: 0.75rem; margin-top: 1.25rem; } .myinfo-connected-card { display: flex; align-items: center; justify-content: space-between; padding: 1rem 1.25rem; background: rgba(166, 255, 234, 0.03); border: 1px solid rgba(166, 255, 234, 0.15); border-radius: 12px; } .myinfo-connected-info { display: flex; align-items: center; gap: 0.875rem; } .myinfo-connected-avatar { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; } .myinfo-connected-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; overflow: hidden; } .myinfo-connected-icon img { width: 100%; height: 100%; object-fit: cover; } .myinfo-connected-text { display: flex; flex-direction: column; gap: 0.125rem; } .myinfo-connected-channel { font-size: 0.9rem; font-weight: 600; color: #FFFFFF; } .myinfo-connected-platform { font-size: 0.7rem; color: rgba(255, 255, 255, 0.5); text-transform: uppercase; letter-spacing: 0.05em; } .myinfo-connected-actions { display: flex; align-items: center; gap: 0.75rem; } .myinfo-connected-badge { display: flex; align-items: center; gap: 0.375rem; font-size: 0.75rem; font-weight: 500; color: #a6ffea; } .myinfo-connected-disconnect { padding: 0.375rem 0.75rem; background: transparent; border: 1px solid rgba(255, 255, 255, 0.15); border-radius: 6px; color: rgba(255, 255, 255, 0.6); font-size: 0.75rem; cursor: pointer; transition: all 0.2s ease; } .myinfo-connected-disconnect:hover { background: rgba(248, 113, 113, 0.1); border-color: rgba(248, 113, 113, 0.3); color: #f87171; } .myinfo-loading { font-size: 0.85rem; color: rgba(255, 255, 255, 0.5); text-align: center; padding: 0.5rem; margin-top: 1rem; } /* 모바일 반응형 */ @media (max-width: 768px) { .myinfo-page { padding: 1.25rem; } .myinfo-title { font-size: 1.5rem; } .myinfo-tabs { overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; } .myinfo-tabs::-webkit-scrollbar { display: none; } .myinfo-tab { white-space: nowrap; padding: 0.625rem 0.75rem; font-size: 0.8rem; } .myinfo-business-input-row { flex-direction: column; } .myinfo-business-submit { width: 100%; } } /* ===================================================== Content Upload Button (ADO2 콘텐츠 페이지) ===================================================== */ .content-upload-btn { width: 34px; height: 34px; display: flex; align-items: center; justify-content: center; padding: 8px; background-color: #01393B; border: none; border-radius: 8px; color: #6AB0B3; cursor: pointer; transition: background-color 0.2s; } .content-upload-btn:hover:not(:disabled) { background-color: #024648; } .content-upload-btn:disabled { opacity: 0.5; cursor: not-allowed; } .content-upload-btn svg { stroke: #6AB0B3; } /* ===================================================== Social Posting Modal ===================================================== */ .social-posting-overlay { position: fixed; inset: 0; background-color: rgba(0, 0, 0, 0.7); display: flex; align-items: center; justify-content: center; z-index: 1000; padding: 1rem; } .social-posting-modal { width: 100%; max-width: 900px; max-height: 90vh; background-color: #002224; border-radius: 16px; border: 1px solid rgba(166, 255, 234, 0.1); display: flex; flex-direction: column; overflow: hidden; } .social-posting-header { display: flex; align-items: center; justify-content: space-between; padding: 1.25rem 1.5rem; border-bottom: 1px solid rgba(255, 255, 255, 0.08); } .social-posting-title { font-size: 1.125rem; font-weight: 600; color: #FFFFFF; margin: 0; } .social-posting-close { width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; background: transparent; border: none; color: rgba(255, 255, 255, 0.5); cursor: pointer; border-radius: 6px; transition: all 0.2s; } .social-posting-close:hover { color: #FFFFFF; background: rgba(255, 255, 255, 0.1); } .social-posting-content { display: flex; flex: 1; overflow: hidden; } @media (max-width: 768px) { .social-posting-content { flex-direction: column; } } /* Video Preview Section */ .social-posting-preview { width: 45%; display: flex; align-items: center; justify-content: center; padding: 1.5rem; background-color: #001a1c; border-right: 1px solid rgba(255, 255, 255, 0.08); } @media (max-width: 768px) { .social-posting-preview { width: 100%; max-height: 40vh; border-right: none; border-bottom: 1px solid rgba(255, 255, 255, 0.08); } } .social-posting-video-container { width: 100%; max-width: 280px; aspect-ratio: 9/16; background-color: #000; border-radius: 12px; overflow: hidden; } .social-posting-video { width: 100%; height: 100%; object-fit: cover; } /* Form Section */ .social-posting-form { flex: 1; padding: 1.5rem; overflow-y: auto; display: flex; flex-direction: column; gap: 1.25rem; } .social-posting-video-info { display: flex; align-items: center; gap: 0.5rem; } .social-posting-label-badge { padding: 0.375rem 0.75rem; background: rgba(166, 130, 255, 0.15); border: 1px solid rgba(166, 130, 255, 0.3); border-radius: 6px; font-size: 0.75rem; font-weight: 500; color: #a682ff; } .social-posting-add-btn { width: 26px; height: 26px; display: flex; align-items: center; justify-content: center; background: transparent; border: 1px dashed rgba(255, 255, 255, 0.2); border-radius: 6px; color: rgba(255, 255, 255, 0.4); font-size: 1rem; cursor: pointer; } .social-posting-video-meta { padding: 0.75rem 1rem; background: rgba(255, 255, 255, 0.03); border-radius: 8px; } .social-posting-video-title { font-size: 0.875rem; font-weight: 500; color: #FFFFFF; margin: 0 0 0.25rem 0; } .social-posting-video-specs { font-size: 0.75rem; color: rgba(255, 255, 255, 0.5); margin: 0; } .social-posting-field { display: flex; flex-direction: column; gap: 0.5rem; position: relative; } .social-posting-label { font-size: 0.8rem; font-weight: 500; color: rgba(255, 255, 255, 0.8); } .social-posting-label .required { color: #a6ffea; } .social-posting-input, .social-posting-select, .social-posting-textarea { width: 100%; padding: 0.75rem 1rem; background-color: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 8px; color: #FFFFFF; font-size: 0.875rem; font-family: 'Pretendard', sans-serif; transition: border-color 0.2s; } .social-posting-input::placeholder, .social-posting-textarea::placeholder { color: rgba(255, 255, 255, 0.3); } .social-posting-input:focus, .social-posting-select:focus, .social-posting-textarea:focus { outline: none; border-color: rgba(166, 255, 234, 0.4); } .social-posting-select { cursor: pointer; appearance: none; background-image: url("data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='rgba(255,255,255,0.5)' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 1rem center; padding-right: 2.5rem; } .social-posting-select option { background-color: #002224; color: #FFFFFF; } .social-posting-textarea { resize: vertical; min-height: 80px; } .social-posting-char-count { position: absolute; right: 0; top: 0; font-size: 0.7rem; color: rgba(255, 255, 255, 0.4); } .social-posting-loading, .social-posting-no-accounts { padding: 1rem; text-align: center; color: rgba(255, 255, 255, 0.5); font-size: 0.85rem; } .social-posting-no-accounts-hint { font-size: 0.75rem; color: rgba(255, 255, 255, 0.4); margin-top: 0.25rem; } /* Radio Group */ .social-posting-radio-group { display: flex; gap: 1.25rem; } .social-posting-radio { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; } .social-posting-radio input[type="radio"] { width: 16px; height: 16px; accent-color: #a6ffea; cursor: pointer; } .social-posting-radio .radio-label { font-size: 0.85rem; color: rgba(255, 255, 255, 0.8); } .social-posting-radio .radio-label.disabled { color: rgba(255, 255, 255, 0.4); } /* Footer */ .social-posting-footer { display: flex; align-items: center; justify-content: space-between; padding: 1rem 1.5rem; border-top: 1px solid rgba(255, 255, 255, 0.08); background: rgba(0, 0, 0, 0.2); } .social-posting-footer-note { font-size: 0.75rem; color: rgba(255, 255, 255, 0.5); margin: 0; } .social-posting-link { color: #a6ffea; text-decoration: underline; } .social-posting-actions { display: flex; gap: 0.75rem; } .social-posting-btn { padding: 0.625rem 1.25rem; border-radius: 8px; font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: all 0.2s; } .social-posting-btn.cancel { background: transparent; border: 1px solid rgba(255, 255, 255, 0.15); color: rgba(255, 255, 255, 0.7); } .social-posting-btn.cancel:hover:not(:disabled) { background: rgba(255, 255, 255, 0.05); border-color: rgba(255, 255, 255, 0.25); } .social-posting-btn.submit { background: linear-gradient(135deg, #a682ff 0%, #8b5cf6 100%); border: none; color: #FFFFFF; } .social-posting-btn.submit:hover:not(:disabled) { background: linear-gradient(135deg, #9570f0 0%, #7c4fe0 100%); } .social-posting-btn:disabled { opacity: 0.5; cursor: not-allowed; } /* Mobile Adjustments */ @media (max-width: 768px) { .social-posting-modal { max-height: 95vh; } .social-posting-header { padding: 1rem; } .social-posting-form { padding: 1rem; } .social-posting-footer { flex-direction: column; gap: 1rem; padding: 1rem; } .social-posting-footer-note { text-align: center; } .social-posting-actions { width: 100%; } .social-posting-btn { flex: 1; } .social-posting-radio-group { flex-direction: column; gap: 0.75rem; } } /* Custom Scrollbar for Social Posting Modal */ .social-posting-modal::-webkit-scrollbar, .social-posting-content::-webkit-scrollbar, .social-posting-form::-webkit-scrollbar { width: 6px; } .social-posting-modal::-webkit-scrollbar-track, .social-posting-content::-webkit-scrollbar-track, .social-posting-form::-webkit-scrollbar-track { background: #001a1c; } .social-posting-modal::-webkit-scrollbar-thumb, .social-posting-content::-webkit-scrollbar-thumb, .social-posting-form::-webkit-scrollbar-thumb { background: #003d40; border-radius: 3px; } .social-posting-modal::-webkit-scrollbar-thumb:hover, .social-posting-content::-webkit-scrollbar-thumb:hover, .social-posting-form::-webkit-scrollbar-thumb:hover { background: #004d50; } /* Firefox scrollbar */ .social-posting-modal, .social-posting-content, .social-posting-form { scrollbar-width: thin; scrollbar-color: #003d40 #001a1c; } /* Custom Channel Dropdown */ .social-posting-channel-dropdown { position: relative; } .social-posting-channel-trigger { width: 100%; padding: 0.75rem 1rem; background-color: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 8px; color: #FFFFFF; font-size: 0.875rem; font-family: 'Pretendard', sans-serif; cursor: pointer; display: flex; align-items: center; justify-content: space-between; transition: border-color 0.2s; } .social-posting-channel-trigger:hover { border-color: rgba(255, 255, 255, 0.2); } .social-posting-channel-trigger.open { border-color: rgba(166, 255, 234, 0.4); } .social-posting-channel-selected { display: flex; align-items: center; gap: 0.625rem; } .social-posting-channel-icon { width: 24px; height: 24px; border-radius: 4px; object-fit: cover; } .social-posting-channel-arrow { width: 12px; height: 12px; transition: transform 0.2s; } .social-posting-channel-trigger.open .social-posting-channel-arrow { transform: rotate(180deg); } .social-posting-channel-menu { position: absolute; top: 100%; left: 0; right: 0; margin-top: 4px; background-color: #003538; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 8px; overflow: hidden; z-index: 10; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); } .social-posting-channel-option { width: 100%; padding: 0.75rem 1rem; background: transparent; border: none; color: #FFFFFF; font-size: 0.875rem; font-family: 'Pretendard', sans-serif; cursor: pointer; display: flex; align-items: center; gap: 0.625rem; transition: background-color 0.15s; } .social-posting-channel-option:hover { background-color: rgba(166, 255, 234, 0.1); } .social-posting-channel-option.selected { background-color: rgba(166, 255, 234, 0.15); } .social-posting-channel-option-icon { width: 24px; height: 24px; border-radius: 4px; object-fit: cover; } /* ============================================ Upload Progress Modal Styles ============================================ */ .upload-progress-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.8); display: flex; align-items: center; justify-content: center; z-index: 1100; padding: 1rem; } .upload-progress-modal { width: 100%; max-width: 420px; background: linear-gradient(180deg, #003538 0%, #002224 100%); border-radius: 16px; border: 1px solid rgba(255, 255, 255, 0.1); overflow: hidden; } .upload-progress-header { display: flex; align-items: center; justify-content: space-between; padding: 1.25rem 1.5rem; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .upload-progress-title { font-size: 1.125rem; font-weight: 600; color: #FFFFFF; margin: 0; } .upload-progress-close { background: transparent; border: none; color: rgba(255, 255, 255, 0.5); cursor: pointer; padding: 0.25rem; display: flex; transition: color 0.2s; } .upload-progress-close:hover { color: #FFFFFF; } .upload-progress-content { padding: 2rem 1.5rem; display: flex; flex-direction: column; align-items: center; gap: 1.25rem; } /* Spinner */ .upload-progress-spinner { width: 64px; height: 64px; } .upload-spinner-svg { width: 100%; height: 100%; animation: upload-spinner-rotate 1.5s linear infinite; } .upload-spinner-svg circle { stroke: #a6ffea; stroke-dasharray: 90, 150; stroke-dashoffset: 0; stroke-linecap: round; animation: upload-spinner-dash 1.5s ease-in-out infinite; } @keyframes upload-spinner-rotate { 100% { transform: rotate(360deg); } } @keyframes upload-spinner-dash { 0% { stroke-dasharray: 1, 150; stroke-dashoffset: 0; } 50% { stroke-dasharray: 90, 150; stroke-dashoffset: -35; } 100% { stroke-dasharray: 90, 150; stroke-dashoffset: -124; } } /* Status Icons */ .upload-progress-icon { width: 64px; height: 64px; border-radius: 50%; display: flex; align-items: center; justify-content: center; } .upload-progress-icon.success { background: rgba(166, 255, 234, 0.15); color: #a6ffea; } .upload-progress-icon.error { background: rgba(248, 113, 113, 0.15); color: #f87171; } /* Status Text */ .upload-progress-status { font-size: 1.25rem; font-weight: 600; color: #FFFFFF; margin: 0; } .upload-progress-status.completed { color: #a6ffea; } .upload-progress-status.failed { color: #f87171; } /* Progress Bar */ .upload-progress-bar-container { width: 100%; max-width: 280px; position: relative; } .upload-progress-bar-container::before { content: ''; display: block; width: 100%; height: 8px; background: rgba(255, 255, 255, 0.1); border-radius: 4px; } .upload-progress-bar-fill { position: absolute; top: 0; left: 0; height: 8px; background: linear-gradient(90deg, #a6ffea 0%, #4fd1c5 100%); border-radius: 4px; transition: width 0.3s ease; } .upload-progress-percent { display: block; text-align: center; margin-top: 0.5rem; font-size: 0.875rem; color: rgba(255, 255, 255, 0.7); } /* Info Section */ .upload-progress-info { width: 100%; background: rgba(255, 255, 255, 0.05); border-radius: 8px; padding: 1rem; } .upload-progress-info-row { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; } .upload-progress-info-row + .upload-progress-info-row { margin-top: 0.75rem; padding-top: 0.75rem; border-top: 1px solid rgba(255, 255, 255, 0.1); } .upload-progress-label { font-size: 0.8125rem; color: rgba(255, 255, 255, 0.5); flex-shrink: 0; } .upload-progress-value { font-size: 0.875rem; color: #FFFFFF; text-align: right; word-break: break-word; } /* Error Message */ .upload-progress-error { width: 100%; background: rgba(248, 113, 113, 0.1); border: 1px solid rgba(248, 113, 113, 0.3); border-radius: 8px; padding: 0.875rem 1rem; } .upload-progress-error p { margin: 0; font-size: 0.875rem; color: #f87171; text-align: center; } /* YouTube Link */ .upload-progress-youtube-link { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1.5rem; background: #FF0000; color: #FFFFFF; font-size: 0.875rem; font-weight: 500; text-decoration: none; border-radius: 8px; transition: background-color 0.2s; } .upload-progress-youtube-link:hover { background: #CC0000; } .upload-youtube-icon { width: 20px; height: 20px; } /* Footer */ .upload-progress-footer { padding: 1.25rem 1.5rem; border-top: 1px solid rgba(255, 255, 255, 0.1); display: flex; justify-content: center; } .upload-progress-btn { padding: 0.75rem 2rem; border-radius: 8px; font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: all 0.2s; } .upload-progress-btn.primary { background: linear-gradient(135deg, #a6ffea 0%, #4fd1c5 100%); border: none; color: #002224; } .upload-progress-btn.primary:hover { opacity: 0.9; transform: translateY(-1px); } .upload-progress-note { margin: 0; font-size: 0.8125rem; color: rgba(255, 255, 255, 0.5); text-align: center; }