o2o-castad-frontend/index.css

5528 lines
97 KiB
CSS

/* =====================================================
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 */
--color-bg-dark: #121a1d;
--color-bg-darker: #0d1416;
--color-bg-card: #1c2a2e;
--color-bg-card-inner: #2a3a3e;
/* 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: #0d1416;
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: #0d1416;
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: relative;
}
}
.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;
}
/* 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 Container */
.analysis-container {
width: 100%;
height: 100dvh;
color: var(--color-text-white);
display: flex;
flex-direction: column;
align-items: center;
padding: 1.5rem 1rem;
background-color: var(--color-bg-dark);
overflow-y: auto;
overflow-x: hidden;
box-sizing: border-box;
}
@media (min-width: 768px) {
.analysis-container {
padding: 2rem 2rem;
}
}
@media (min-width: 1024px) {
.analysis-container {
padding: 2.5rem 5%;
}
}
@media (min-width: 1440px) {
.analysis-container {
/* 피그마: 1440px 화면에서 양쪽 200px 패딩 = 약 13.9% */
padding: 2.5rem calc((100% - 1040px) / 2);
}
}
/* Analysis Header */
.analysis-header {
width: 100%;
max-width: 1040px;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
margin-bottom: 1.5rem;
flex-shrink: 0;
}
@media (min-width: 768px) {
.analysis-header {
margin-bottom: 2rem;
}
}
.analysis-icon {
color: var(--color-purple);
margin-bottom: 0.75rem;
}
/* Analysis Grid */
.analysis-grid {
width: 100%;
max-width: 1040px;
display: flex;
flex-direction: column;
gap: 16px;
flex-shrink: 0;
box-sizing: border-box;
}
@media (min-width: 768px) {
.analysis-grid {
display: grid;
grid-template-columns: 1fr 1fr;
align-items: stretch;
min-height: 453px;
}
}
/* Brand Identity Card */
.brand-identity-card {
background-color: #01393B;
border-radius: 40px;
padding: 24px;
display: flex;
flex-direction: column;
gap: 20px;
border: none;
box-shadow: none;
width: 100%;
box-sizing: border-box;
}
@media (min-width: 768px) {
.brand-identity-card {
padding: 32px;
max-height: 500px;
}
}
.brand-header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 0;
}
.brand-name {
font-size: 28px;
font-weight: 600;
color: #E5F1F2;
letter-spacing: -0.006em;
margin-bottom: 0;
}
@media (min-width: 768px) {
.brand-name {
font-size: 32px;
}
}
.brand-location {
color: #6AB0B3;
font-size: 14px;
letter-spacing: -0.006em;
margin-bottom: 0;
}
.brand-subtitle {
color: #6AB0B3;
font-size: 14px;
font-weight: 400;
letter-spacing: -0.006em;
}
.brand-info {
display: flex;
flex-direction: column;
gap: 4px;
}
/* Report Section */
.report-section {
flex: 1;
display: flex;
flex-direction: column;
gap: 8px;
min-height: 0;
}
.report-toggle {
font-size: 14px;
color: #6AB0B3;
background: none;
border: none;
cursor: pointer;
transition: color 0.2s ease;
padding: 0;
text-align: left;
}
.report-toggle:hover {
color: #AE72F9;
}
.report-content {
color: #E5F1F2;
font-size: 17px;
line-height: 1.5;
letter-spacing: -0.006em;
overflow-y: auto;
flex: 1;
min-height: 0;
}
.report-sections {
display: flex;
flex-direction: column;
gap: 16px;
}
.report-content::-webkit-scrollbar {
width: 6px;
}
.report-content::-webkit-scrollbar-track {
background: transparent;
}
.report-content::-webkit-scrollbar-thumb {
background: #379599;
border-radius: 3px;
}
.report-content::-webkit-scrollbar-thumb:hover {
background: #4AABAF;
}
.report-section-title {
color: var(--color-mint);
font-size: var(--text-lg);
font-weight: 600;
margin-bottom: 0.5rem;
}
/* Image Preview */
.image-preview-section {
margin-top: auto;
padding-top: 1rem;
border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.image-preview-title {
color: #6AB0B3;
font-size: 14px;
font-weight: 600;
letter-spacing: -0.006em;
margin-bottom: 12px;
display: block;
}
.image-preview-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 0.5rem;
}
.image-preview-item {
aspect-ratio: 1;
border-radius: var(--radius-lg);
overflow: hidden;
background-color: var(--color-bg-dark);
}
.image-preview-item img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform var(--transition-normal);
}
.image-preview-item:hover img {
transform: scale(1.05);
}
.image-preview-more {
color: var(--color-text-gray-500);
font-size: var(--text-sm);
margin-top: 0.5rem;
text-align: center;
}
/* Right Side Cards Container */
.analysis-cards-column {
display: flex;
flex-direction: column;
gap: 16px;
width: 100%;
}
/* Feature Card for Analysis Page (Selling Points & Keywords) */
.analysis-cards-column .feature-card {
background-color: #01393B;
border-radius: 40px;
padding: 24px;
border: none;
box-shadow: none;
flex: 1;
display: flex;
flex-direction: column;
gap: 20px;
width: 100%;
box-sizing: border-box;
}
@media (min-width: 768px) {
.analysis-cards-column .feature-card {
padding: 32px;
}
}
/* Tags Wrapper */
.tags-wrapper {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
/* Feature Tag */
.feature-tag {
padding: 8px 16px;
background-color: #046266;
border-radius: 999px;
font-size: 17px;
font-weight: 400;
color: #FFFFFF;
border: none;
}
/* Analysis Bottom Button */
.analysis-bottom {
width: 100%;
max-width: 1040px;
margin-top: 2rem;
padding-bottom: 1rem;
display: flex;
justify-content: center;
flex-shrink: 0;
}
@media (min-width: 768px) {
.analysis-bottom {
padding-bottom: 1.5rem;
}
}
/* =====================================================
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;
}
.hero-input {
width: 100%;
background: transparent;
border: none;
color: #6AB0B3;
font-size: 14px;
font-weight: 600;
letter-spacing: -0.006em;
text-align: left;
}
.hero-input:focus {
outline: none;
}
.hero-input::placeholder {
color: #6AB0B3;
}
.hero-input.error {
box-shadow: none;
}
.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);
}
/* 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;
}
}
/* =====================================================
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-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;
}
}