@import "tailwindcss"; @layer base { /* ============ LIGHT THEME (Default) ============ */ :root { --main-header-height: 56px; --sub-nav-height: 48px; --combined-top-height: 104px; /* Light Theme Variables - Soft Parchment & Yale Blue */ --background: #f6f0ed; /* Parchment */ --background-alt: #f9fafb; /* Light Gray Alt */ --surface: #ffffff; /* Pure White for crisp card layers */ --surface-muted: #f3f4f6; /* Muted Surface */ --surface-hover: #f9fafb; /* Surface Hover */ --border: #e5e7eb; /* Light Border */ --border-light: #f3f4f6; /* Light Border Alt */ --text-primary: #28536b; /* Yale Blue (High contrast text) */ --text-secondary: #7ea8be; /* Steel Blue */ --text-accent: #c2948a; /* Rosy Taupe */ --text-muted: #9ca3af; /* Muted Text */ --text-disabled: #d1d5db; /* Disabled Text */ --primary: #28536b; /* Yale Blue for main buttons */ --primary-hover: #1f4154; /* Darker Yale Blue */ --primary-light: #eff6ff; /* Light Blue Background */ --secondary: #7ea8be; /* Steel Blue */ --secondary-light: #f0f9ff; /* Light Secondary */ --success: #10b981; /* Green */ --success-light: #ecfdf5; --danger: #ef4444; /* Red */ --danger-light: #fef2f2; --warning: #f59e0b; /* Amber */ --warning-light: #fffbeb; --info: #3b82f6; /* Blue */ --info-light: #eff6ff; --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); /* Smooth theme transition */ transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease; } /* ============ DARK THEME ============ */ :root.dark { /* Dark Theme Variables - Vintage Grape & Bondi Blue */ --background: #513b56; /* Vintage Grape */ --background-alt: #434354; /* Dark Alt */ --surface: #525174; /* Dusty Grape */ --surface-muted: #626186; /* Surface Muted */ --surface-hover: #5f6b7e; /* Surface Hover */ --border: #626186; /* Border */ --border-light: #525174; /* Border Light */ --text-primary: #f8fafc; /* Soft White */ --text-secondary: #cbd5e1; /* Secondary Text */ --text-accent: #bce784; /* Lime Cream */ --text-muted: #94a3b8; /* Muted Slate */ --text-disabled: #64748b; /* Disabled Text */ --primary: #348aa7; /* Bondi Blue */ --primary-hover: #296f86; /* Darker Bondi Blue */ --primary-light: #0c2340; /* Dark Blue Background */ --secondary: #5dd39e; /* Emerald */ --secondary-light: #064e3b; /* Dark Secondary */ --success: #10b981; /* Green */ --success-light: #064e3b; --danger: #ef4444; /* Red */ --danger-light: #3f0f0f; --warning: #f59e0b; /* Amber */ --warning-light: #3f2009; --info: #3b82f6; /* Blue */ --info-light: #0c2340; --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.3); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4); /* Smooth theme transition */ transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease; } html, body, #root, .app-container { height: 100%; margin: 0; padding: 0; max-width: 100vw !important; overflow-x: hidden !important; } /* Fix viewport overflow on all container levels */ body, html { width: 100%; max-width: 100vw; overflow-x: hidden; } .itinerary-timeline-page { width: 100%; max-width: 100%; overflow-x: hidden; } .main-top-bar { position: sticky; top: 0; height: var(--main-header-height); z-index: 50; background-color: var(--surface); color: var(--text-primary); } .sub-nav-menu { position: sticky; top: var(--main-header-height); height: var(--sub-nav-height); z-index: 40; width: 100% !important; margin: 0 !important; border-radius: 0 !important; box-shadow: none !important; border-bottom: 1px solid var(--border); background-color: var(--surface); color: var(--text-primary); } /* Master viewport wrapper - contains entire itinerary */ .itinerary-viewport { display: flex !important; flex-direction: column !important; height: 100dvh !important; width: 100vw !important; overflow: hidden !important; } .itinerary-viewport-wrapper { display: flex !important; flex-direction: column !important; height: 100dvh !important; width: 100vw !important; overflow: hidden !important; } /* Global sticky header zone - locks main header + sub-nav at top */ .global-sticky-header-zone { position: sticky !important; top: 0; z-index: 100 !important; background-color: var(--surface); color: var(--text-primary); flex-shrink: 0 !important; } /* Fixed header block (handled at parent TourDetailPage level) */ .fixed-top-header-block { flex-shrink: 0 !important; width: 100% !important; background-color: var(--surface); color: var(--text-primary); border-bottom: 1px solid var(--border); } /* Timeline scroll container - main scrollable region */ .directory-scroll-viewport { flex: 1 !important; overflow-y: auto !important; position: relative !important; z-index: 10 !important; width: 100% !important; padding: 0 !important; margin: 0 !important; background-color: var(--background); color: var(--text-primary); } .timeline-scroll-container { flex: 1 !important; overflow-y: auto !important; position: relative !important; z-index: 10 !important; width: 100% !important; padding: 0 !important; } /* Scrollable timeline area - removes all padding gaps */ .timeline-scroll-area { flex: 1 1 0% !important; overflow-y: auto !important; width: 100% !important; padding: 0 !important; margin-top: 0px !important; background-color: var(--background); color: var(--text-primary); } .timeline-scroll-viewport { flex: 1; overflow-y: auto; width: 100%; } /* Main timeline container with dynamic height support */ .itinerary-timeline-container { display: flex !important; flex-direction: column !important; width: 100% !important; max-width: 100vw !important; height: auto !important; overflow-x: hidden !important; position: relative !important; } /* Individual folder node wrapper - base stage container */ .folder-node-wrapper { width: 100% !important; background-color: var(--surface); color: var(--text-primary); margin-bottom: 0px !important; display: flex; flex-direction: column; border-bottom: 1px solid var(--border); } /* Individual stage card block - backwards compatibility */ .stage-card-block { width: 100% !important; background-color: var(--surface); color: var(--text-primary); margin-bottom: 1px !important; display: flex; flex-direction: column; } /* Stage section - semantic wrapper */ .stage-section { position: relative; width: 100%; display: block !important; margin: 0 !important; padding: 0 !important; } /* Folder header row - sticky positioning for pinned effect */ .folder-header-row { position: sticky !important; top: 0px !important; z-index: 30 !important; width: 100% !important; padding: 12px 16px !important; display: flex; align-items: center; background-color: var(--surface) !important; color: var(--text-primary); cursor: pointer; border-bottom: 1px solid var(--border); transition: background-color 0.2s; } .folder-header-row:hover { background-color: var(--surface-muted) !important; } /* Stage header row - sticky positioning for pinned effect */ .stage-header-row { position: sticky !important; top: 0px !important; z-index: 40 !important; width: 100% !important; padding: 12px 16px !important; display: flex; align-items: center; background-color: var(--surface) !important; color: var(--text-primary); cursor: pointer; border-bottom: 1px solid var(--border); transition: background-color 0.2s; } .stage-header-row:hover { background-color: var(--surface-muted) !important; } /* Alternate sticky header styling (kept for backwards compatibility) */ .stage-sticky-header { position: sticky; top: 0; z-index: 30; background-color: #ffffff; width: 100%; padding: 8px 16px; border-bottom: 1px solid #f3f4f6; display: flex; align-items: center; cursor: pointer; } /* Folder child content box - Grid accordion for exclusive expansion */ .folder-child-content-box { display: grid !important; grid-template-rows: 0fr; transition: grid-template-rows 0.25s cubic-bezier(0.4, 0, 0.2, 1) !important; width: 100%; } /* Expanded folder state - children visible */ .folder-child-content-box.expanded { grid-template-rows: 1fr !important; } /* Wrapper for child nodes list - proper z-index layering */ .child-nodes-list-wrapper { position: relative; z-index: 20 !important; width: 100%; } /* Child nodes list - content container within expanded folder */ .child-nodes-list { overflow: hidden; min-height: 0px; padding: 16px; display: flex; flex-direction: column; gap: 12px; } /* CSS Grid Accordion Engine - Smooth expand/collapse without layout shattering */ .stage-accordion-content { display: grid !important; grid-template-rows: 0fr; transition: grid-template-rows 0.25s ease-out !important; width: 100%; } /* Expanded state - opens to full content height */ .stage-accordion-content.expanded { grid-template-rows: 1fr !important; } /* Scrollable content body - lower z-index so it scrolls behind header */ .stage-scrollable-content-body { position: relative; z-index: 20 !important; width: 100%; padding: 16px; display: flex; flex-direction: column; gap: 12px; } /* Inner content wrapper - structural compliance */ .stage-points-list { overflow: hidden; min-height: 0px; padding: 0 16px 16px 16px; } /* Legacy accordion container classes (for backwards compatibility) */ .stage-accordion-transition-container { display: grid !important; grid-template-rows: 0fr; transition: grid-template-rows 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; width: 100% !important; } .stage-accordion-transition-container.expanded { grid-template-rows: 1fr !important; } .stage-accordion-inner-content { overflow: hidden !important; min-height: 0px !important; width: 100% !important; display: flex; flex-direction: column; } .stage-content-body { width: 100%; padding: 16px; } } @layer components { .banner-location-text { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; max-width: 80px; display: inline-block; vertical-align: bottom; cursor: help; /* Hiển thị biểu tượng giúp đỡ để gợi ý có tooltip */ } @media (min-width: 640px) { .banner-location-text { max-width: 150px; } } } @keyframes bell-ring { 0% { transform: rotate(0); } 5% { transform: rotate(30deg); } 10% { transform: rotate(-28deg); } 15% { transform: rotate(34deg); } 20% { transform: rotate(-32deg); } 25% { transform: rotate(30deg); } 30% { transform: rotate(-28deg); } 35% { transform: rotate(26deg); } 40% { transform: rotate(-24deg); } 45% { transform: rotate(22deg); } 50% { transform: rotate(-20deg); } 55% { transform: rotate(18deg); } 60% { transform: rotate(-16deg); } 65% { transform: rotate(14deg); } 70% { transform: rotate(-12deg); } 75% { transform: rotate(10deg); } 80% { transform: rotate(-8deg); } 85% { transform: rotate(6deg); } 90% { transform: rotate(-4deg); } 95% { transform: rotate(2deg); } 100% { transform: rotate(0); } } .animate-ring { display: inline-block !important; transform-origin: top center !important; transform-box: fill-box !important; animation: bell-ring 1.5s ease-in-out infinite !important; } /* Light theme overrides for Member Dashboard */ html.light body, html.light .app-container { background-color: #f8fafc; color: #334155; } html.light .bg-slate-950 { background-color: #f8fafc !important; color: #1e293b !important; } html.light .bg-slate-900 { background-color: #f1f5f9 !important; color: #1e293b !important; } html.light .bg-slate-900\/60 { background-color: rgba(255, 255, 255, 0.7) !important; border-color: #e2e8f0 !important; } html.light .bg-slate-900\/30 { background-color: rgba(255, 255, 255, 0.4) !important; border-color: #e2e8f0 !important; } html.light .bg-slate-950\/40 { background-color: #f1f5f9 !important; } html.light .text-white, html.light .text-white\/95, html.light .text-slate-100 { color: #0f172a !important; } html.light .text-slate-400, html.light .text-slate-350, html.light .text-slate-300 { color: #475569 !important; } html.light .border-slate-800, html.light .border-slate-800\/60, html.light .border-slate-800\/80, html.light .border-slate-900, html.light .border-slate-700\/50 { border-color: #cbd5e1 !important; } html.light .hover\:bg-slate-800\/50:hover { background-color: rgba(226, 232, 240, 0.5) !important; } html.light .hover\:bg-slate-850:hover, html.light .hover\:bg-slate-800:hover, html.light .hover\:bg-white\/10:hover, html.light .hover\:bg-white\/5:hover { background-color: #e2e8f0 !important; color: #0f172a !important; } /* Chat bubble styling overrides */ html.light .bg-slate-850\/50 { background-color: rgba(241, 245, 249, 0.5) !important; } html.light .bg-slate-850 { background-color: #f1f5f9 !important; color: #0f172a !important; } html.light .bg-slate-800\/60 { background-color: rgba(226, 232, 240, 0.6) !important; } html.light .bg-slate-800\/40 { background-color: rgba(226, 232, 240, 0.4) !important; } html.light .bg-slate-950\/60 { background-color: rgba(255, 255, 255, 0.8) !important; } html.light .bg-rose-950\/10 { background-color: #fef2f2 !important; border-color: #fee2e2 !important; } html.light .text-rose-400 { color: #dc2626 !important; } html.light .bg-rose-950\/40 { background-color: #fee2e2 !important; } html.light .border-rose-900\/50 { border-color: #fecaca !important; } /* Additional light mode overrides for MemberDashboard and complex classes */ html.light [class*="bg-slate-800"] { background-color: #f0f1f5 !important; color: #0f172a !important; } html.light [class*="bg-slate-900"] { background-color: #f1f5f9 !important; color: #0f172a !important; } html.light [class*="text-slate-400"], html.light [class*="text-slate-350"], html.light [class*="text-slate-300"] { color: #475569 !important; } html.light [class*="border-slate-900"], html.light [class*="border-slate-800"] { border-color: #cbd5e1 !important; } html.light .hover\:bg-slate-900:hover { background-color: #e2e8f0 !important; color: #0f172a !important; } html.light .hover\:bg-white:hover { background-color: #f8fafc !important; } /* Ensure text contrast in light mode */ html.light .text-white { color: #0f172a !important; } html.light .text-gray-50 { color: #0f172a !important; } html.light .text-gray-100 { color: #1e293b !important; } /* Tailwind Dark Mode - ensure dark classes work when in dark theme */ html.dark .dark\:bg-slate-800 { background-color: #1e293b !important; } html.dark .dark\:text-slate-200 { color: #e2e8f0 !important; } html.dark .dark\:border-slate-700 { border-color: #334155 !important; } html.dark .dark\:hover\:bg-slate-700:hover { background-color: #334155 !important; }