/* ===== CSS Variables & Reset ===== */ :root { --bg-primary: #0a0e17; --bg-secondary: #111827; --bg-card: rgba(17, 24, 39, 0.7); --bg-glass: rgba(255, 255, 255, 0.05); --text-primary: #f1f5f9; --text-secondary: #94a3b8; --text-muted: #64748b; --accent-1: #FF6B6B; --accent-2: #FFE66D; --accent-3: #4ECDC4; --accent-4: #A78BFA; --gradient-main: linear-gradient(135deg, #FF6B6B, #FFE66D, #4ECDC4); --gradient-text: linear-gradient(135deg, #FF6B6B 0%, #FFE66D 50%, #4ECDC4 100%); --shadow-glow: 0 0 40px rgba(78, 205, 196, 0.15); --shadow-card: 0 8px 32px rgba(0, 0, 0, 0.3); --border-glass: 1px solid rgba(255, 255, 255, 0.08); --radius-sm: 8px; --radius-md: 16px; --radius-lg: 24px; --radius-xl: 32px; --font-display: var(--font-outfit), "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif; --font-body: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", var(--font-outfit), sans-serif; --nav-height: 72px; --transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1); } [data-theme="light"] { --bg-primary: #f8fafc; --bg-secondary: #ffffff; --bg-card: rgba(255, 255, 255, 0.85); --bg-glass: rgba(0, 0, 0, 0.03); --text-primary: #0f172a; --text-secondary: #475569; --text-muted: #94a3b8; --shadow-glow: 0 0 40px rgba(78, 205, 196, 0.1); --shadow-card: 0 8px 32px rgba(0, 0, 0, 0.08); --border-glass: 1px solid rgba(0, 0, 0, 0.06); } /* * MUST stay in @layer base. Unlayered * { padding:0; margin:0 } beats * Tailwind @layer utilities (px-12 / mx-auto), which zeroed ebook paper * padding and broke reader centering. */ @layer base { *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } } html { scroll-behavior: smooth; scroll-padding-top: var(--nav-height); } /* Ebook routes: don't steal sticky chrome or pad for main nav */ html:has([data-ebook-root]) { scroll-padding-top: 0; } body { font-family: var(--font-body); background: var(--bg-primary); color: var(--text-primary); line-height: 1.6; overflow-x: hidden; transition: background var(--transition), color var(--transition); } /* * 任何祖先上的 overflow-x: hidden|clip 都会废掉 sticky 顶栏 *(滚一下顶栏整块飞走,只剩顶部残影 —— 用户截图那个状态)。 * ebook 路由 html/body 全部 visible。 */ html:has([data-ebook-root]) { overflow-x: visible; overflow-y: visible; } html:has([data-ebook-root]) body { overflow-x: visible !important; overflow-y: visible !important; background: transparent; color: inherit; } a { text-decoration: none; color: inherit; } img { max-width: 100%; display: block; } .container { max-width: 1200px; margin: 0 auto; padding: 0 24px; } /* ===== Particle Canvas ===== */ #particle-canvas { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 0; pointer-events: none; } /* ===== Navbar ===== */ .navbar { position: fixed; top: 0; left: 0; right: 0; height: var(--nav-height); z-index: 1000; transition: all var(--transition); background: transparent; } .navbar.scrolled { background: rgba(10, 14, 23, 0.85); backdrop-filter: blur(20px); border-bottom: var(--border-glass); box-shadow: 0 4px 30px rgba(0, 0, 0, 0.2); } [data-theme="light"] .navbar.scrolled { background: rgba(248, 250, 252, 0.9); } .nav-container { max-width: 1200px; margin: 0 auto; padding: 0 24px; height: 100%; display: flex; align-items: center; gap: 16px; } .nav-container > .logo { flex-shrink: 0; } .nav-container > .nav-links { flex: 1; justify-content: center; min-width: 0; } .nav-utils { display: flex; align-items: center; justify-content: flex-end; gap: 8px; margin-left: auto; flex-shrink: 0; } .nav-utils .nav-lang-btn, .nav-utils .nav-cta, .nav-utils .nav-notify { flex-shrink: 0; } .nav-utils .nav-cta { width: 36px; height: 36px; font-size: 1.05rem; } .nav-notify-guest { opacity: 0.85; } .logo { display: flex; align-items: center; gap: 10px; font-family: var(--font-display); font-weight: 800; font-size: 1.35rem; letter-spacing: -0.02em; } .logo span { background: linear-gradient(135deg, #FF6B6B, #FFE66D, #4ECDC4); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .logo-icon { width: 36px; height: 36px; animation: logoSpin 20s linear infinite; flex-shrink: 0; } @keyframes logoSpin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .nav-links { display: flex; gap: 8px; } .nav-links a { padding: 8px 16px; border-radius: var(--radius-sm); font-size: 0.9rem; font-weight: 500; color: var(--text-secondary); transition: all var(--transition); } .nav-links a:hover { color: var(--text-primary); background: var(--bg-glass); } .nav-cta { width: 44px; height: 44px; border-radius: 50%; border: var(--border-glass); background: var(--bg-glass); cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 1.2rem; transition: all var(--transition); backdrop-filter: blur(10px); } .nav-cta:hover { transform: scale(1.1); box-shadow: var(--shadow-glow); } .mobile-menu-btn { display: none; flex-direction: column; gap: 5px; background: none; border: none; cursor: pointer; padding: 8px; } .mobile-menu-btn span { display: block; width: 24px; height: 2px; background: var(--text-primary); border-radius: 2px; transition: all 0.3s ease; transform-origin: center; } .mobile-menu-btn.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); } .mobile-menu-btn.open span:nth-child(2) { opacity: 0; transform: scaleX(0); } .mobile-menu-btn.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); } /* ===== Hero ===== */ .hero { position: relative; min-height: 100vh; display: flex; flex-direction: column; justify-content: center; padding: calc(var(--nav-height) + 52px) 24px 80px; z-index: 1; overflow: hidden; } .hero-bg-shapes { position: absolute; inset: 0; pointer-events: none; z-index: 0; } .hero-inner { position: relative; z-index: 1; width: 100%; max-width: 1200px; margin: 0 auto; } .hero-top { display: grid; grid-template-columns: 1fr 1fr; align-items: center; gap: 32px 48px; } .hero-content { min-width: 0; } .hero-bottom { margin-top: 40px; } .hero-visual { display: flex; justify-content: center; align-items: center; position: relative; width: 100%; overflow: visible; } .globe-container { position: relative; width: 100%; max-width: 400px; margin: 0 auto; overflow: visible; } .hero-bg-shapes .shape { position: absolute; border-radius: 50%; filter: blur(80px); opacity: 0.4; animation: floatShape 8s ease-in-out infinite; } .shape-1 { width: 400px; height: 400px; background: var(--accent-1); top: 10%; left: -10%; animation-delay: 0s; } .shape-2 { width: 300px; height: 300px; background: var(--accent-3); top: 50%; right: -5%; animation-delay: -3s; } .shape-3 { width: 250px; height: 250px; background: var(--accent-2); bottom: 10%; left: 30%; animation-delay: -5s; } @keyframes floatShape { 0%, 100% { transform: translate(0, 0) scale(1); } 33% { transform: translate(30px, -30px) scale(1.05); } 66% { transform: translate(-20px, 20px) scale(0.95); } } .hero-badge { display: inline-flex; align-items: center; gap: 8px; padding: 8px 20px; border-radius: 100px; background: var(--bg-glass); border: var(--border-glass); font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 24px; backdrop-filter: blur(10px); } .badge-dot { width: 8px; height: 8px; border-radius: 50%; background: #22c55e; animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.5; transform: scale(1.5); } } .hero-title { font-family: var(--font-display); font-size: clamp(2.5rem, 5vw, 4rem); font-weight: 800; line-height: 1.15; margin-bottom: 20px; letter-spacing: -0.02em; } .gradient-text { background: var(--gradient-text); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; background-size: 200% auto; animation: gradientShift 4s ease-in-out infinite; } @keyframes gradientShift { 0%, 100% { background-position: 0% center; } 50% { background-position: 100% center; } } .hero-subtitle { font-size: 1.1rem; color: var(--text-secondary); margin-bottom: 0; max-width: 480px; line-height: 1.8; } .hero-actions { display: flex; gap: 16px; margin-bottom: 32px; flex-wrap: wrap; } .btn { display: inline-flex; align-items: center; gap: 8px; padding: 14px 28px; border-radius: var(--radius-md); font-weight: 600; font-size: 0.95rem; cursor: pointer; border: none; transition: all var(--transition); font-family: inherit; } .btn-primary { background: var(--gradient-main); color: #0a0e17; box-shadow: 0 4px 20px rgba(255, 107, 107, 0.3); } .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 8px 30px rgba(255, 107, 107, 0.4); } .btn-ghost { background: var(--bg-glass); border: var(--border-glass); color: var(--text-primary); backdrop-filter: blur(10px); } .btn-ghost:hover { background: rgba(255, 255, 255, 0.1); transform: translateY(-2px); } .hero-stats { display: flex; align-items: center; gap: 24px; padding: 24px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(20px); } .stat-item { display: flex; flex-direction: column; gap: 4px; } .stat-number { font-family: var(--font-display); font-size: 2rem; font-weight: 800; background: var(--gradient-text); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .stat-label { font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; } .stat-divider { width: 1px; height: 40px; background: var(--border-glass); } /* Globe Visual */ .globe-svg { width: 100%; height: auto; animation: globeFloat 6s ease-in-out infinite; } @keyframes globeFloat { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-15px); } } .orbit-ring { animation: orbitSpin 20s linear infinite; transform-origin: center; } .orbit-ring-2 { animation-direction: reverse; animation-duration: 15s; } @keyframes orbitSpin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .continent { animation: continentPulse 4s ease-in-out infinite; } .pulse-dot { animation: dotPulse 2s ease-in-out infinite; } .pulse-dot:nth-child(2) { animation-delay: 0.5s; } .pulse-dot:nth-child(3) { animation-delay: 1s; } .pulse-dot:nth-child(4) { animation-delay: 1.5s; } @keyframes dotPulse { 0%, 100% { r: 5; opacity: 1; } 50% { r: 8; opacity: 0.6; } } .flight-path { animation: dashMove 3s linear infinite; } @keyframes dashMove { to { stroke-dashoffset: -20; } } .floating-cards .float-card { position: absolute; padding: 10px 16px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-md); font-size: 0.8rem; font-weight: 600; backdrop-filter: blur(20px); box-shadow: var(--shadow-card); animation: cardFloat 4s ease-in-out infinite; white-space: nowrap; } .float-card small { display: block; font-weight: 400; color: var(--text-muted); font-size: 0.7rem; margin-top: 2px; } .fc-1 { top: 5%; right: -8%; animation-delay: 0s; } .fc-2 { top: 38%; left: -14%; animation-delay: -1.5s; } .fc-3 { bottom: 10%; right: -2%; animation-delay: -3s; } @keyframes cardFloat { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } .scroll-indicator { position: absolute; bottom: 30px; left: 50%; transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: 8px; color: var(--text-muted); font-size: 0.8rem; animation: bounce 2s ease-in-out infinite; } .scroll-arrow svg { opacity: 0.5; } @keyframes bounce { 0%, 100% { transform: translateX(-50%) translateY(0); } 50% { transform: translateX(-50%) translateY(8px); } } /* ===== Sections ===== */ .section { position: relative; padding: 100px 0; z-index: 1; content-visibility: auto; contain-intrinsic-size: auto 480px; } .section-header { text-align: center; margin-bottom: 60px; } .section-tag { display: inline-block; padding: 6px 16px; border-radius: 100px; background: var(--bg-glass); border: var(--border-glass); font-size: 0.75rem; font-weight: 600; letter-spacing: 0.1em; color: var(--accent-3); margin-bottom: 16px; } .section-header h2 { font-family: var(--font-display); font-size: clamp(2rem, 4vw, 2.75rem); font-weight: 800; margin-bottom: 12px; letter-spacing: -0.02em; } .section-header p { color: var(--text-secondary); font-size: 1.05rem; max-width: 500px; margin: 0 auto; } /* ===== Destinations ===== */ .dest-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; } .dest-card { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); overflow: hidden; transition: all var(--transition); backdrop-filter: blur(20px); cursor: pointer; } .dest-card:hover { transform: translateY(-8px); box-shadow: var(--shadow-glow); border-color: rgba(78, 205, 196, 0.3); } .dest-img { position: relative; height: 180px; background: linear-gradient( 135deg, hsl(var(--hue, 170), 60%, 20%), hsl(calc(var(--hue, 170) + 40), 50%, 30%) ); display: flex; align-items: center; justify-content: center; overflow: hidden; } .dest-img::before { content: ''; position: absolute; inset: 0; background: radial-gradient(circle at 30% 70%, rgba(255,255,255,0.1), transparent); } .dest-emoji { font-size: 4rem; animation: emojiBounce 3s ease-in-out infinite; filter: drop-shadow(0 4px 12px rgba(0,0,0,0.3)); } @keyframes emojiBounce { 0%, 100% { transform: scale(1) rotate(0deg); } 50% { transform: scale(1.1) rotate(5deg); } } .dest-overlay { position: absolute; bottom: 12px; left: 12px; } .dest-tag { padding: 4px 12px; border-radius: 100px; background: rgba(0, 0, 0, 0.5); backdrop-filter: blur(10px); font-size: 0.7rem; color: #fff; } .dest-body { padding: 20px; } .dest-body h3 { font-family: var(--font-display); font-size: 1.15rem; font-weight: 700; margin-bottom: 8px; } .dest-body > p { font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 16px; line-height: 1.6; } .dest-meta { display: flex; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; } .dest-meta span { font-size: 0.75rem; color: var(--text-muted); padding: 4px 8px; background: var(--bg-glass); border-radius: var(--radius-sm); } .dest-rating { display: flex; align-items: center; justify-content: space-between; font-size: 0.85rem; } .stars { font-size: 0.75rem; } /* ===== Timeline ===== */ .lifestyle { background: linear-gradient(180deg, transparent, rgba(78, 205, 196, 0.03), transparent); } .timeline { position: relative; max-width: 700px; margin: 0 auto; } .timeline-line { position: absolute; left: 50%; top: 0; bottom: 0; width: 4px; transform: translateX(-50%); } .timeline-svg-line { animation: dashFlow 2s linear infinite; } @keyframes dashFlow { to { stroke-dashoffset: -14; } } .timeline-item { display: flex; align-items: center; gap: 24px; margin-bottom: 40px; position: relative; } .timeline-item:nth-child(even) { flex-direction: row-reverse; } .timeline-item:nth-child(even) .timeline-card { text-align: right; } .timeline-time { flex: 0 0 100px; text-align: center; font-weight: 700; font-size: 0.9rem; color: var(--accent-2); font-family: var(--font-display); } .timeline-card { flex: 1; padding: 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(20px); transition: all var(--transition); position: relative; } .timeline-card:hover { transform: scale(1.02); box-shadow: var(--shadow-glow); } .timeline-icon { font-size: 2rem; margin-bottom: 8px; } .timeline-card h3 { font-family: var(--font-display); font-size: 1.1rem; margin-bottom: 6px; } .timeline-card p { font-size: 0.85rem; color: var(--text-secondary); } /* ===== Charts ===== */ .data-section { background: linear-gradient(180deg, transparent, rgba(255, 107, 107, 0.02), transparent); } .charts-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; } .chart-card { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); padding: 28px; backdrop-filter: blur(20px); transition: all var(--transition); } .chart-card:hover { box-shadow: var(--shadow-glow); } .chart-card h3 { font-family: var(--font-display); font-size: 1rem; margin-bottom: 20px; } .chart-wrap { position: relative; height: 280px; } .chart-radar { height: 300px; } .chart-wide { grid-column: span 2; } /* ===== Tools ===== */ .tools-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; } .tool-card { position: relative; padding: 32px 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(20px); transition: all var(--transition); overflow: hidden; } .tool-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--gradient-main); transform: scaleX(0); transition: transform var(--transition); } .tool-card:hover::before { transform: scaleX(1); } .tool-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-glow); } .tool-icon-wrap { width: 48px; height: 48px; color: var(--accent-3); margin-bottom: 12px; opacity: 0.6; } .tool-emoji { font-size: 2rem; display: block; margin-bottom: 12px; } .tool-card h3 { font-family: var(--font-display); font-size: 1.1rem; margin-bottom: 8px; } .tool-card > p { font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 16px; } .tool-tags { display: flex; gap: 6px; flex-wrap: wrap; } .tool-tags span { padding: 3px 10px; border-radius: 100px; font-size: 0.7rem; background: var(--bg-glass); color: var(--text-muted); border: var(--border-glass); } /* ===== Community ===== */ .testimonials { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; margin-bottom: 60px; } .testimonial-card { padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(20px); transition: all var(--transition); } .testimonial-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-glow); } .testimonial-avatar { font-size: 2.5rem; margin-bottom: 16px; } .testimonial-stars { font-size: 0.8rem; margin-bottom: 12px; } .testimonial-content p { font-size: 0.9rem; color: var(--text-secondary); line-height: 1.7; margin-bottom: 20px; font-style: italic; } .testimonial-author strong { display: block; font-size: 0.9rem; margin-bottom: 2px; } .testimonial-author span { font-size: 0.75rem; color: var(--text-muted); } .cta-banner { display: flex; align-items: center; justify-content: space-between; gap: 40px; padding: 48px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); position: relative; overflow: hidden; } .cta-banner::before { content: ''; position: absolute; inset: 0; background: var(--gradient-main); opacity: 0.05; } .cta-content { position: relative; z-index: 1; } .cta-content h2 { font-family: var(--font-display); font-size: 1.5rem; margin-bottom: 8px; } .cta-content p { color: var(--text-secondary); font-size: 0.9rem; } .cta-form { display: flex; gap: 12px; position: relative; z-index: 1; flex-shrink: 0; } .cta-form input { padding: 14px 20px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); font-family: inherit; font-size: 0.9rem; width: 280px; outline: none; transition: all var(--transition); } .cta-form input:focus { border-color: var(--accent-3); box-shadow: 0 0 0 3px rgba(78, 205, 196, 0.15); } .cta-form input::placeholder { color: var(--text-muted); } /* ===== Footer ===== */ .footer { position: relative; z-index: 1; padding: 60px 0 30px; border-top: var(--border-glass); background: var(--bg-secondary); } .footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 40px; margin-bottom: 40px; } .footer-brand p { color: var(--text-secondary); font-size: 0.85rem; margin: 16px 0; max-width: 280px; } .social-links { display: flex; gap: 12px; } .social-links a { width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; border-radius: 50%; background: var(--bg-glass); border: var(--border-glass); font-size: 1rem; transition: all var(--transition); } .social-links a:hover { transform: translateY(-3px); background: var(--accent-3); color: #0a0e17; } .footer-links h4 { font-family: var(--font-display); font-size: 0.9rem; margin-bottom: 16px; color: var(--text-primary); } .footer-links a { display: block; font-size: 0.85rem; color: var(--text-secondary); padding: 6px 0; transition: color var(--transition); } .footer-links a:hover { color: var(--accent-3); } .footer-bottom { text-align: center; padding-top: 30px; border-top: var(--border-glass); } .footer-bottom p { font-size: 0.8rem; color: var(--text-muted); } .footer-emoji-bar { margin-top: 12px; font-size: 1.2rem; letter-spacing: 8px; animation: emojiScroll 10s linear infinite; } @keyframes emojiScroll { 0%, 100% { letter-spacing: 8px; } 50% { letter-spacing: 16px; } } /* ===== Toast ===== */ .toast { position: fixed; bottom: 30px; right: 30px; padding: 16px 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-md); backdrop-filter: blur(20px); display: flex; align-items: center; gap: 10px; box-shadow: var(--shadow-card); transform: translateY(100px); opacity: 0; transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1); z-index: 2000; } .toast.show { transform: translateY(0); opacity: 1; } /* ===== Reveal Animation ===== */ .reveal { opacity: 0; transform: translateY(30px); transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1); } .reveal.visible { opacity: 1; transform: translateY(0); } /* Sub-pages use SiteShell, not HomeClient — ensure content is never stuck hidden */ :not(.home-flow) .reveal { opacity: 1; transform: translateY(0); } :not(.home-flow) .reveal.visible { transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1); } /* Deferred kits: once mounted, never stay invisible if JS timing races */ [data-deferred="ready"] .reveal { opacity: 1; transform: translateY(0); } .deferred-skeleton { height: 120px; margin: 24px auto; max-width: 1200px; border-radius: var(--radius-xl); background: linear-gradient(90deg, rgba(255,255,255,0.03), rgba(255,255,255,0.07), rgba(255,255,255,0.03)); background-size: 200% 100%; animation: deferredShimmer 1.2s ease-in-out infinite; } @keyframes deferredShimmer { 0% { background-position: 100% 0; } 100% { background-position: -100% 0; } } .focus-streak { text-align: center; color: var(--text-secondary); font-size: 0.9rem; margin: -4px 0 12px; } .focus-streak b { color: var(--accent-3); font-size: 1.1rem; } @media (prefers-reduced-motion: reduce) { .reveal { opacity: 1; transform: none; transition: none; } .deferred-skeleton { animation: none; } .loader-ring, .loader-progress { animation: none !important; } } /* ===== Responsive ===== */ @media (max-width: 1024px) { .hero-top { grid-template-columns: 1fr; text-align: center; gap: 28px; } .hero-subtitle { margin: 0 auto; max-width: 100%; } .hero-actions { justify-content: center; } .hero-stats { justify-content: center; } .hero-visual { order: -1; } .globe-container { max-width: 280px; } .dest-grid { grid-template-columns: repeat(2, 1fr); } .tools-grid { grid-template-columns: repeat(2, 1fr); } .testimonials { grid-template-columns: 1fr; } .footer-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { .nav-links { display: none; flex-direction: column; position: absolute; top: var(--nav-height); left: 0; right: 0; background: var(--bg-secondary); padding: 20px; border-bottom: var(--border-glass); opacity: 0; transform: translateY(-8px); pointer-events: none; transition: all 0.3s ease; } .nav-links.open { display: flex; opacity: 1; transform: translateY(0); pointer-events: auto; } .mobile-menu-btn { display: flex; } .hero-stats { flex-direction: column; gap: 16px; } .stat-divider { width: 40px; height: 1px; } .dest-grid { grid-template-columns: 1fr; } .charts-grid { grid-template-columns: 1fr; } .chart-wide { grid-column: span 1; } .tools-grid { grid-template-columns: 1fr; } .timeline-item, .timeline-item:nth-child(even) { flex-direction: column; text-align: center; } .timeline-item:nth-child(even) .timeline-card { text-align: center; } .timeline-line { display: none; } .timeline-time { flex: none; } .cta-banner { flex-direction: column; text-align: center; padding: 32px 24px; } .cta-form { flex-direction: column; width: 100%; } .cta-form input { width: 100%; } .footer-grid { grid-template-columns: 1fr; } } /* ===== Loader ===== */ .loader { position: fixed; inset: 0; z-index: 9999; background: var(--bg-primary); display: flex; align-items: center; justify-content: center; transition: opacity 0.6s ease, visibility 0.6s ease; } .loader.hidden, .loader.loader-done { opacity: 0; visibility: hidden; pointer-events: none; } .loader-inner { text-align: center; } .loader-globe { width: 80px; height: 80px; margin-bottom: 16px; } .loader-ring { animation: loaderSpin 1.5s linear infinite; transform-origin: center; } @keyframes loaderSpin { to { transform: rotate(360deg); } } .loader-text { font-family: var(--font-display); font-size: 1.5rem; font-weight: 800; background: var(--gradient-text); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; margin-bottom: 20px; } .loader-bar { width: 200px; height: 3px; background: var(--bg-glass); border-radius: 3px; overflow: hidden; margin: 0 auto; } .loader-progress { height: 100%; background: var(--gradient-main); border-radius: 3px; animation: loaderProgress 1.8s ease-in-out forwards; } @keyframes loaderProgress { from { width: 0; } to { width: 100%; } } /* ===== Ticker ===== */ .ticker-bar { position: fixed; top: var(--nav-height); left: 0; right: 0; z-index: 999; background: rgba(10, 14, 23, 0.9); backdrop-filter: blur(10px); border-bottom: var(--border-glass); overflow: hidden; height: 32px; } [data-theme="light"] .ticker-bar { background: rgba(248, 250, 252, 0.95); } .ticker-track { display: flex; gap: 60px; animation: tickerScroll 30s linear infinite; white-space: nowrap; padding: 6px 0; } .ticker-track span { font-size: 0.75rem; color: var(--text-muted); flex-shrink: 0; } @keyframes tickerScroll { from { transform: translateX(0); } to { transform: translateX(-50%); } } /* Adjust hero for ticker */ .hero { padding-top: calc(var(--nav-height) + 52px); } /* ===== Typewriter ===== */ .typewriter-cursor { color: var(--accent-3); animation: blink 1s step-end infinite; font-weight: 300; } @keyframes blink { 50% { opacity: 0; } } /* ===== Map Section ===== */ .map-section { background: linear-gradient(180deg, transparent, rgba(78, 205, 196, 0.02), transparent); } .map-wrapper { display: grid; grid-template-columns: 1.4fr 1fr; gap: 32px; align-items: stretch; } .map-svg-container { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 24px; backdrop-filter: blur(20px); overflow: hidden; } .world-map { width: 100%; height: auto; } .map-pin { cursor: pointer; transition: transform 0.3s ease; } .map-pin:hover { transform: scale(1.3); } .map-pin.active circle:nth-child(2) { fill: #fff; } .pin-pulse { animation: pinPulse 2s ease-in-out infinite; } @keyframes pinPulse { 0%, 100% { r: 20; opacity: 0.3; } 50% { r: 28; opacity: 0.1; } } .map-info-panel { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 32px; backdrop-filter: blur(20px); display: flex; flex-direction: column; justify-content: center; min-height: 300px; transition: all var(--transition); } .map-info-default { text-align: center; color: var(--text-muted); } .map-info-icon { font-size: 3rem; display: block; margin-bottom: 16px; } .map-info-default h3 { font-family: var(--font-display); color: var(--text-primary); margin-bottom: 8px; } .map-info-city { animation: fadeInUp 0.4s ease; } .map-info-city .city-emoji { font-size: 3.5rem; margin-bottom: 12px; } .map-info-city h3 { font-family: var(--font-display); font-size: 1.5rem; margin-bottom: 8px; } .map-info-city .city-desc { color: var(--text-secondary); font-size: 0.9rem; margin-bottom: 20px; line-height: 1.6; } .map-info-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } .map-stat { padding: 12px; background: var(--bg-glass); border-radius: var(--radius-md); text-align: center; font-size: 0.85rem; } .map-stat strong { display: block; font-size: 1.1rem; color: var(--accent-3); margin-bottom: 2px; } @keyframes fadeInUp { from { opacity: 0; transform: translateY(15px); } to { opacity: 1; transform: translateY(0); } } /* ===== Destination Filters ===== */ .dest-filters { display: flex; align-items: center; gap: 16px; margin-bottom: 32px; flex-wrap: wrap; } .filter-search { display: flex; align-items: center; gap: 10px; padding: 10px 16px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-md); flex: 1; min-width: 200px; max-width: 280px; } .filter-search svg { color: var(--text-muted); flex-shrink: 0; } .filter-search input { background: none; border: none; outline: none; color: var(--text-primary); font-family: inherit; font-size: 0.9rem; width: 100%; } .filter-search input::placeholder { color: var(--text-muted); } .filter-tags { display: flex; gap: 8px; flex-wrap: wrap; } .filter-btn { padding: 8px 16px; border-radius: 100px; border: var(--border-glass); background: var(--bg-glass); color: var(--text-secondary); font-family: inherit; font-size: 0.8rem; cursor: pointer; transition: all var(--transition); white-space: nowrap; } .filter-btn:hover, .filter-btn.active { background: var(--accent-3); color: #0a0e17; border-color: var(--accent-3); } .filter-sort select { padding: 10px 16px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); font-family: inherit; font-size: 0.85rem; cursor: pointer; outline: none; } .dest-card.hidden-card { display: none; } .dest-empty { text-align: center; padding: 60px 20px; color: var(--text-muted); font-size: 1.1rem; } /* ===== Visa Section ===== */ .visa-section { background: linear-gradient(180deg, transparent, rgba(255, 230, 109, 0.02), transparent); } .visa-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; } .visa-card { position: relative; padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(20px); transition: all var(--transition); } .visa-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-glow); border-color: rgba(255, 230, 109, 0.3); } .visa-flag { font-size: 2.5rem; margin-bottom: 12px; } .visa-card h3 { font-family: var(--font-display); font-size: 1.1rem; margin-bottom: 12px; } .visa-badge { display: inline-block; padding: 4px 12px; border-radius: 100px; font-size: 0.7rem; font-weight: 600; margin-bottom: 16px; } .visa-badge.easy { background: rgba(78, 205, 196, 0.2); color: var(--accent-3); } .visa-badge.hot { background: rgba(255, 107, 107, 0.2); color: var(--accent-1); } .visa-badge.budget { background: rgba(255, 230, 109, 0.2); color: var(--accent-2); } .visa-badge.new { background: rgba(167, 139, 250, 0.2); color: var(--accent-4); } .visa-badge.pioneer { background: rgba(96, 165, 250, 0.2); color: #60A5FA; } .visa-details { list-style: none; margin-bottom: 20px; } .visa-details li { font-size: 0.85rem; color: var(--text-secondary); padding: 6px 0; border-bottom: 1px solid rgba(255, 255, 255, 0.04); } .visa-progress { display: flex; align-items: center; gap: 10px; font-size: 0.75rem; color: var(--text-muted); } .progress-bar { flex: 1; height: 6px; background: var(--bg-glass); border-radius: 3px; overflow: hidden; } .progress-fill { height: 100%; background: var(--gradient-main); border-radius: 3px; transition: width 1s ease; } .progress-label { white-space: nowrap; font-weight: 600; color: var(--accent-3); } /* ===== FAQ ===== */ .faq-section { background: linear-gradient(180deg, transparent, rgba(167, 139, 250, 0.02), transparent); } .faq-list { max-width: 800px; margin: 0 auto; } .faq-item { margin-bottom: 12px; border: var(--border-glass); border-radius: var(--radius-lg); overflow: hidden; background: var(--bg-card); backdrop-filter: blur(20px); transition: all var(--transition); } .faq-item.active { border-color: rgba(78, 205, 196, 0.3); box-shadow: var(--shadow-glow); } .faq-question { width: 100%; display: flex; align-items: center; justify-content: space-between; padding: 20px 24px; background: none; border: none; color: var(--text-primary); font-family: inherit; font-size: 0.95rem; font-weight: 600; cursor: pointer; text-align: left; transition: color var(--transition); } .faq-question:hover { color: var(--accent-3); } .faq-chevron { flex-shrink: 0; transition: transform 0.3s ease; color: var(--text-muted); } .faq-item.active .faq-chevron { transform: rotate(180deg); color: var(--accent-3); } .faq-answer { max-height: 0; overflow: hidden; transition: max-height 0.4s ease, padding 0.4s ease; } .faq-item.active .faq-answer { max-height: 300px; } .faq-answer p { padding: 0 24px 20px; font-size: 0.9rem; color: var(--text-secondary); line-height: 1.7; } /* ===== Modal ===== */ .modal-overlay { position: fixed; inset: 0; z-index: 3000; background: rgba(0, 0, 0, 0.6); backdrop-filter: blur(8px); display: flex; align-items: center; justify-content: center; padding: 24px; opacity: 0; visibility: hidden; transition: all 0.3s ease; } .modal-overlay.open { opacity: 1; visibility: visible; } .modal { background: var(--bg-secondary); border: var(--border-glass); border-radius: var(--radius-xl); max-width: 560px; width: 100%; max-height: 85vh; overflow-y: auto; position: relative; transform: scale(0.9) translateY(20px); transition: transform 0.3s ease; } .modal-overlay.open .modal { transform: scale(1) translateY(0); } .modal-close { position: absolute; top: 16px; right: 16px; width: 36px; height: 36px; border-radius: 50%; border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); cursor: pointer; font-size: 1rem; display: flex; align-items: center; justify-content: center; transition: all var(--transition); z-index: 1; } .modal-close:hover { background: var(--accent-1); color: #fff; } .modal-hero { height: 200px; display: flex; align-items: center; justify-content: center; font-size: 5rem; position: relative; } .modal-hero::after { content: ''; position: absolute; inset: 0; background: linear-gradient(transparent 50%, var(--bg-secondary)); } .modal-body { padding: 24px 32px 32px; } .modal-body h2 { font-family: var(--font-display); font-size: 1.5rem; margin-bottom: 8px; } .modal-body .modal-tag { display: inline-block; padding: 4px 12px; border-radius: 100px; background: var(--bg-glass); font-size: 0.75rem; color: var(--accent-3); margin-bottom: 16px; } .modal-body p { color: var(--text-secondary); font-size: 0.9rem; line-height: 1.7; margin-bottom: 24px; } .modal-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 24px; } .modal-stat { text-align: center; padding: 16px 8px; background: var(--bg-glass); border-radius: var(--radius-md); } .modal-stat .stat-emoji { font-size: 1.5rem; display: block; margin-bottom: 4px; } .modal-stat strong { display: block; font-size: 1rem; margin-bottom: 2px; } .modal-stat span { font-size: 0.7rem; color: var(--text-muted); } .modal-highlights h4 { font-size: 0.9rem; margin-bottom: 12px; } .modal-highlights ul { list-style: none; } .modal-highlights li { padding: 8px 0; font-size: 0.85rem; color: var(--text-secondary); border-bottom: 1px solid rgba(255, 255, 255, 0.04); } /* ===== Back to Top ===== */ .back-to-top { position: fixed; bottom: 30px; left: 30px; width: 48px; height: 48px; border-radius: 50%; border: var(--border-glass); background: var(--bg-card); backdrop-filter: blur(20px); color: var(--text-primary); cursor: pointer; display: flex; align-items: center; justify-content: center; opacity: 0; visibility: hidden; transform: translateY(20px); transition: all var(--transition); z-index: 1000; box-shadow: var(--shadow-card); } .back-to-top.visible { opacity: 1; visibility: visible; transform: translateY(0); } .back-to-top:hover { background: var(--accent-3); color: #0a0e17; transform: translateY(-4px); } /* ===== Nav Active ===== */ .nav-links a.active { color: var(--accent-3); background: rgba(78, 205, 196, 0.1); } /* ===== Responsive additions ===== */ @media (max-width: 1024px) { .map-wrapper { grid-template-columns: 1fr; } .visa-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { .ticker-bar { display: none; } .hero { padding-top: calc(var(--nav-height) + 20px); } .dest-filters { flex-direction: column; align-items: stretch; } .filter-search { max-width: none; } .filter-tags { justify-content: center; } .visa-grid { grid-template-columns: 1fr; } .modal-stats { grid-template-columns: 1fr; } .back-to-top { bottom: 20px; left: 20px; } } /* ===== Calculator ===== */ .calculator-section { background: linear-gradient(180deg, transparent, rgba(167, 139, 250, 0.02), transparent); } .calculator-wrapper { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; align-items: start; } .calculator-form { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 32px; backdrop-filter: blur(20px); } .calc-field { margin-bottom: 24px; } .calc-field label { display: block; font-weight: 600; font-size: 0.9rem; margin-bottom: 10px; } .calc-field select, .calc-field input[type="range"] { width: 100%; padding: 12px 16px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); font-family: inherit; font-size: 0.9rem; } .calc-options { display: flex; gap: 8px; } .calc-option { flex: 1; padding: 10px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-secondary); font-family: inherit; font-size: 0.85rem; cursor: pointer; transition: all var(--transition); } .calc-option.active, .calc-option:hover { background: var(--accent-3); color: #0a0e17; border-color: var(--accent-3); } .calculator-result { min-height: 400px; } .result-card { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 32px; backdrop-filter: blur(20px); } .result-header { display: flex; align-items: center; gap: 16px; margin-bottom: 28px; } .result-header h3 { font-family: var(--font-display); font-size: 1.3rem; } .result-header p { color: var(--text-muted); font-size: 0.85rem; } .breakdown-item { display: grid; grid-template-columns: 100px 1fr 80px; align-items: center; gap: 12px; margin-bottom: 12px; font-size: 0.85rem; } .breakdown-bar { height: 8px; background: var(--bg-glass); border-radius: 4px; overflow: hidden; } .breakdown-fill { height: 100%; background: var(--gradient-main); border-radius: 4px; transition: width 0.8s ease; } .result-total { display: flex; justify-content: space-between; margin-top: 24px; padding-top: 24px; border-top: var(--border-glass); } .result-total strong { display: block; font-size: 1.5rem; font-family: var(--font-display); } .result-total span { font-size: 0.8rem; color: var(--text-muted); } .result-placeholder { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 400px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); color: var(--text-muted); text-align: center; gap: 16px; } /* ===== Blog ===== */ .blog-section { background: linear-gradient(180deg, transparent, rgba(78, 205, 196, 0.02), transparent); } .blog-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; } .blog-card { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); padding: 28px; backdrop-filter: blur(20px); transition: all var(--transition); } .blog-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-glow); } .blog-emoji { font-size: 2.5rem; margin-bottom: 12px; } .blog-meta { display: flex; gap: 16px; font-size: 0.75rem; color: var(--text-muted); margin-bottom: 12px; } .blog-card h3 { font-family: var(--font-display); font-size: 1.1rem; margin-bottom: 10px; line-height: 1.4; } .blog-card p { font-size: 0.85rem; color: var(--text-secondary); line-height: 1.6; margin-bottom: 16px; } .blog-tags { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 16px; } .blog-tag { padding: 3px 10px; border-radius: 100px; font-size: 0.7rem; background: var(--bg-glass); color: var(--accent-3); border: var(--border-glass); } .blog-read-more { font-size: 0.85rem; font-weight: 600; color: var(--accent-3); transition: color var(--transition); } .blog-read-more:hover { color: var(--accent-1); } /* ===== Compare Bar ===== */ .compare-bar { position: fixed; bottom: 30px; right: 30px; z-index: 1500; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); padding: 16px 24px; backdrop-filter: blur(20px); box-shadow: var(--shadow-card); display: flex; align-items: center; gap: 16px; } .compare-table { width: 100%; border-collapse: collapse; font-size: 0.85rem; } .compare-table th, .compare-table td { padding: 12px; border-bottom: 1px solid rgba(255, 255, 255, 0.06); } .compare-table th { text-align: center; } .compare-table td:first-child { color: var(--text-muted); } .compare-table td:not(:first-child) { text-align: center; } @media (max-width: 1024px) { .calculator-wrapper { grid-template-columns: 1fr; } .blog-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { .blog-grid { grid-template-columns: 1fr; } .compare-bar { left: 16px; right: 16px; bottom: 16px; flex-wrap: wrap; justify-content: center; } } /* ===== Auth Page ===== */ .auth-page { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 40px 24px; position: relative; z-index: 1; } .auth-card { width: 100%; max-width: 420px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 40px; backdrop-filter: blur(20px); } .auth-back { font-size: 0.85rem; color: var(--text-muted); margin-bottom: 24px; display: inline-block; } .auth-header { text-align: center; margin-bottom: 28px; } .auth-header h1 { font-family: var(--font-display); font-size: 1.5rem; margin: 12px 0 6px; } .auth-header p { color: var(--text-muted); font-size: 0.9rem; } .auth-tabs { display: flex; gap: 8px; margin-bottom: 24px; } .auth-tabs button { flex: 1; padding: 10px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-secondary); font-family: inherit; cursor: pointer; transition: all var(--transition); } .auth-tabs button.active { background: var(--accent-3); color: #0a0e17; border-color: var(--accent-3); } .auth-form .calc-field input { width: 100%; padding: 12px 16px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); font-family: inherit; font-size: 0.9rem; outline: none; } .auth-error { color: var(--accent-1); font-size: 0.85rem; margin-bottom: 12px; } .auth-divider { text-align: center; margin: 20px 0; color: var(--text-muted); font-size: 0.8rem; position: relative; } .auth-divider::before, .auth-divider::after { content: ''; position: absolute; top: 50%; width: 40%; height: 1px; background: var(--border-glass); } .auth-divider::before { left: 0; } .auth-divider::after { right: 0; } .auth-hint { text-align: center; font-size: 0.75rem; color: var(--text-muted); margin-top: 16px; } /* ===== Detail Pages ===== */ .detail-page { min-height: 100vh; padding: calc(var(--nav-height) + 40px) 24px 80px; max-width: 800px; margin: 0 auto; position: relative; z-index: 1; } .detail-nav { margin-bottom: 32px; } .detail-nav a { color: var(--accent-3); font-size: 0.9rem; font-weight: 500; } .blog-detail-header { margin-bottom: 40px; } .blog-detail-emoji { font-size: 4rem; margin-bottom: 16px; display: block; } .blog-detail-header h1 { font-family: var(--font-display); font-size: clamp(1.75rem, 4vw, 2.5rem); line-height: 1.3; margin: 16px 0; } .blog-detail-content { line-height: 1.8; color: var(--text-secondary); } .blog-detail-content h2 { font-family: var(--font-display); color: var(--text-primary); font-size: 1.3rem; margin: 32px 0 12px; } .blog-detail-content h3 { color: var(--text-primary); font-size: 1.1rem; margin: 24px 0 8px; } .blog-detail-content p { margin-bottom: 12px; } .blog-detail-content li { margin-left: 20px; margin-bottom: 6px; } .dest-detail-hero { height: 240px; border-radius: var(--radius-xl); display: flex; align-items: center; justify-content: center; margin-bottom: 32px; } .dest-detail-emoji { font-size: 6rem; } .dest-detail-top { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 16px; } .dest-detail-top h1 { font-family: var(--font-display); font-size: 2rem; margin-top: 8px; } .dest-detail-desc { color: var(--text-secondary); line-height: 1.7; margin-bottom: 24px; } /* ===== Nav User ===== */ .nav-notify { display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: 50%; background: var(--bg-glass); border: var(--border-glass); font-size: 1rem; text-decoration: none; } .nav-user { display: flex; align-items: center; gap: 8px; padding: 6px 12px; background: var(--bg-glass); border: var(--border-glass); border-radius: 100px; font-size: 0.85rem; } .nav-user-name { max-width: 80px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .nav-logout { background: none; border: none; color: var(--text-muted); cursor: pointer; font-size: 0.75rem; padding: 2px 4px; } .nav-logout:hover { color: var(--accent-1); } .nav-login-btn { padding: 8px 20px; border-radius: 100px; background: var(--gradient-main); color: #0a0e17; font-weight: 600; font-size: 0.85rem; transition: transform var(--transition); } .nav-login-btn:hover { transform: scale(1.05); } .blog-card { text-decoration: none; color: inherit; display: block; } @media (max-width: 768px) { .nav-user-name { display: none; } } /* ===== Profile Page ===== */ .profile-page { max-width: 900px; margin: 0 auto; padding: calc(var(--nav-height) + 40px) 24px 80px; position: relative; z-index: 1; } .profile-header { display: flex; align-items: center; gap: 20px; margin-bottom: 40px; flex-wrap: wrap; } .profile-avatar { font-size: 4rem; width: 80px; height: 80px; display: flex; align-items: center; justify-content: center; background: var(--bg-glass); border-radius: 50%; border: var(--border-glass); } .profile-info { flex: 1; } .profile-info h1 { font-family: var(--font-display); font-size: 1.75rem; margin-bottom: 4px; } .profile-info p { color: var(--text-muted); font-size: 0.9rem; } .profile-level { display: inline-block; margin-top: 8px; padding: 4px 14px; border-radius: 100px; background: rgba(78, 205, 196, 0.15); color: var(--accent-3); font-size: 0.8rem; font-weight: 600; } .profile-stats-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 48px; } .profile-stat-card { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); padding: 24px 16px; text-align: center; backdrop-filter: blur(20px); } .profile-stat-card strong { display: block; font-size: 1.75rem; font-family: var(--font-display); margin: 8px 0 4px; } .profile-stat-card span:last-child { font-size: 0.75rem; color: var(--text-muted); } .profile-link { color: var(--accent-3); font-size: 0.85rem; font-weight: 600; } .profile-favorites h2, .profile-quick h2 { font-family: var(--font-display); font-size: 1.25rem; margin-bottom: 20px; } .profile-fav-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; margin-bottom: 48px; } .profile-fav-card { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); padding: 20px; display: flex; justify-content: space-between; align-items: center; backdrop-filter: blur(20px); transition: all var(--transition); } .profile-fav-card:hover { border-color: rgba(78, 205, 196, 0.3); transform: translateY(-2px); } .profile-fav-card a { text-decoration: none; color: inherit; } .fav-emoji { font-size: 2rem; display: block; margin-bottom: 8px; } .profile-fav-card h3 { font-size: 1rem; margin-bottom: 4px; } .profile-fav-card p { font-size: 0.8rem; color: var(--text-muted); } .profile-empty { text-align: center; padding: 60px 20px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); margin-bottom: 48px; } .profile-empty p { color: var(--text-muted); margin: 12px 0 20px; } .profile-loading { color: var(--text-muted); padding: 40px; text-align: center; } .profile-quick-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; } .quick-card { padding: 20px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-md); text-align: center; font-size: 0.9rem; font-weight: 500; transition: all var(--transition); text-decoration: none; color: inherit; } .quick-card:hover { background: var(--accent-3); color: #0a0e17; transform: translateY(-2px); } /* ===== Not Found & Loading ===== */ .not-found-page, .page-loading { min-height: 80vh; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; position: relative; z-index: 1; gap: 16px; } .not-found-emoji { font-size: 5rem; } .not-found-page h1 { font-family: var(--font-display); font-size: 4rem; background: var(--gradient-text); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .not-found-page p { color: var(--text-muted); } .page-loading-spinner { width: 48px; height: 48px; border: 3px solid var(--bg-glass); border-top-color: var(--accent-3); border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .page-loading p { color: var(--text-muted); } @media (max-width: 768px) { .profile-stats-grid { grid-template-columns: repeat(2, 1fr); } .profile-fav-grid { grid-template-columns: 1fr; } .profile-quick-grid { grid-template-columns: repeat(2, 1fr); } } /* ===== Global Search ===== */ .search-trigger { display: flex; align-items: center; gap: 8px; padding: 8px 14px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-md); color: var(--text-muted); font-size: 0.8rem; cursor: pointer; transition: all var(--transition); position: fixed; top: calc(var(--nav-height) + 44px); right: 24px; z-index: 998; backdrop-filter: blur(10px); } .search-trigger:hover { border-color: var(--accent-3); color: var(--text-primary); } .search-trigger kbd { padding: 2px 6px; border-radius: 4px; background: var(--bg-glass); border: var(--border-glass); font-size: 0.7rem; font-family: inherit; } .search-overlay { position: fixed; inset: 0; z-index: 5000; background: rgba(0, 0, 0, 0.6); backdrop-filter: blur(8px); display: flex; align-items: flex-start; justify-content: center; padding-top: 15vh; } .search-modal { width: 100%; max-width: 560px; background: var(--bg-secondary); border: var(--border-glass); border-radius: var(--radius-xl); overflow: hidden; box-shadow: var(--shadow-card); animation: searchIn 0.2s ease; } @keyframes searchIn { from { opacity: 0; transform: scale(0.95) translateY(-10px); } to { opacity: 1; transform: scale(1) translateY(0); } } .search-input-wrap { display: flex; align-items: center; gap: 12px; padding: 16px 20px; border-bottom: var(--border-glass); } .search-input-wrap input { flex: 1; background: none; border: none; outline: none; color: var(--text-primary); font-size: 1rem; font-family: inherit; } .search-input-wrap button { padding: 4px 8px; border-radius: 4px; background: var(--bg-glass); border: var(--border-glass); color: var(--text-muted); font-size: 0.7rem; cursor: pointer; } .search-results { max-height: 360px; overflow-y: auto; padding: 8px; } .search-result { display: flex; align-items: center; gap: 12px; width: 100%; padding: 12px 16px; border: none; background: none; border-radius: var(--radius-md); cursor: pointer; text-align: left; color: inherit; font-family: inherit; transition: background var(--transition); } .search-result:hover, .search-result.active { background: var(--bg-glass); } .search-result-emoji { font-size: 1.5rem; flex-shrink: 0; } .search-result-text { flex: 1; min-width: 0; } .search-result-text strong { display: block; font-size: 0.9rem; margin-bottom: 2px; } .search-result-text span { font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; } .search-result-type { font-size: 0.7rem; padding: 3px 8px; border-radius: 100px; background: rgba(78, 205, 196, 0.15); color: var(--accent-3); flex-shrink: 0; } .search-empty { padding: 32px; text-align: center; color: var(--text-muted); font-size: 0.9rem; } .search-hints { padding: 24px; text-align: center; color: var(--text-muted); font-size: 0.8rem; line-height: 2; } /* ===== Trip Planner ===== */ .trip-section { background: linear-gradient(180deg, transparent, rgba(255, 107, 107, 0.02), transparent); } .trip-wrapper { display: grid; grid-template-columns: 320px 1fr; gap: 32px; align-items: start; } .trip-form { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 28px; backdrop-filter: blur(20px); position: sticky; top: calc(var(--nav-height) + 20px); } .trip-form h3 { font-family: var(--font-display); margin-bottom: 20px; } .trip-timeline { min-height: 300px; } .trip-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 300px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); color: var(--text-muted); gap: 12px; } .trip-route { display: flex; flex-direction: column; gap: 0; margin-bottom: 24px; } .trip-stop { display: flex; align-items: flex-start; gap: 16px; position: relative; } .trip-stop-dot { font-size: 1.5rem; width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; background: var(--bg-glass); border: var(--border-glass); border-radius: 50%; flex-shrink: 0; z-index: 1; } .trip-stop-line { position: absolute; left: 23px; top: 48px; width: 2px; height: calc(100% - 16px); background: linear-gradient(to bottom, var(--accent-3), var(--accent-1)); opacity: 0.3; } .trip-stop-card { flex: 1; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); padding: 16px 20px; margin-bottom: 16px; backdrop-filter: blur(20px); transition: all var(--transition); } .trip-stop-card:hover { border-color: rgba(78, 205, 196, 0.3); } .trip-stop-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .trip-remove { background: none; border: none; color: var(--text-muted); cursor: pointer; font-size: 0.8rem; padding: 4px; } .trip-remove:hover { color: var(--accent-1); } .trip-stop-controls { display: flex; align-items: center; gap: 8px; font-size: 0.85rem; color: var(--text-muted); } .trip-stop-controls input { width: 50px; padding: 4px 8px; border-radius: var(--radius-sm); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); font-family: inherit; text-align: center; } .trip-stop-cost { margin-left: auto; font-weight: 700; color: var(--accent-3); } .trip-summary { display: flex; align-items: center; gap: 24px; padding: 20px 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(20px); flex-wrap: wrap; } .trip-summary-stat { text-align: center; } .trip-summary-stat span { display: block; font-size: 0.75rem; color: var(--text-muted); margin-bottom: 4px; } .trip-summary-stat strong { font-family: var(--font-display); font-size: 1.25rem; } @media (max-width: 1024px) { .trip-wrapper { grid-template-columns: 1fr; } .trip-form { position: static; } .search-trigger { top: auto; bottom: 80px; right: 16px; } } @media (max-width: 768px) { .search-trigger span, .search-trigger kbd { display: none; } } /* ===== Scroll Progress ===== */ .scroll-progress { position: fixed; top: 0; left: 0; right: 0; height: 3px; z-index: 9999; background: rgba(255, 255, 255, 0.04); } .scroll-progress-bar { height: 100%; background: linear-gradient(90deg, #FF6B6B, #FFE66D, #4ECDC4); transition: width 0.1s linear; box-shadow: 0 0 12px rgba(78, 205, 196, 0.5); } /* ===== Toast Stack ===== */ .toast-stack { position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%); z-index: 10000; display: flex; flex-direction: column; gap: 10px; pointer-events: none; } .toast-stack .toast { position: relative; bottom: auto; left: auto; transform: translateY(20px); opacity: 0; animation: toastIn 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; } .toast-stack .toast.show { opacity: 1; transform: translateY(0); } @keyframes toastIn { from { opacity: 0; transform: translateY(20px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } } .toast-info { border-color: rgba(78, 205, 196, 0.3); } .toast-error { border-color: rgba(255, 107, 107, 0.3); } /* ===== Destination Matcher ===== */ .matcher-fab { position: fixed; bottom: 30px; left: 30px; z-index: 1400; display: flex; align-items: center; gap: 8px; padding: 12px 20px; background: linear-gradient(135deg, rgba(255, 107, 107, 0.9), rgba(78, 205, 196, 0.9)); border: none; border-radius: 50px; color: #fff; font-family: inherit; font-weight: 600; font-size: 0.9rem; cursor: pointer; box-shadow: 0 8px 32px rgba(255, 107, 107, 0.3); transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); backdrop-filter: blur(10px); } .matcher-fab:hover { transform: translateY(-3px) scale(1.03); box-shadow: 0 12px 40px rgba(255, 107, 107, 0.4); } .matcher-fab-icon { font-size: 1.2rem; } .matcher-modal { max-width: 560px; width: 95%; overflow: hidden; padding: 0; } .matcher-progress { height: 4px; background: rgba(255, 255, 255, 0.06); } .matcher-progress-bar { height: 100%; background: linear-gradient(90deg, #FF6B6B, #FFE66D, #4ECDC4); transition: width 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); } .matcher-body { padding: 36px 32px 28px; min-height: 420px; } .matcher-step-meta { text-align: center; margin-bottom: 28px; } .matcher-step-meta h2 { font-family: var(--font-display); font-size: 1.5rem; margin: 12px 0 8px; } .matcher-step-meta p { color: var(--text-muted); font-size: 0.9rem; } .matcher-options { display: flex; flex-direction: column; gap: 10px; } .matcher-option { display: flex; align-items: center; gap: 16px; padding: 16px 20px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-lg); cursor: pointer; transition: all 0.25s ease; font-family: inherit; color: var(--text-primary); text-align: left; } .matcher-option:hover { border-color: rgba(78, 205, 196, 0.4); background: rgba(78, 205, 196, 0.08); transform: translateX(6px); } .matcher-option-emoji { font-size: 1.8rem; flex-shrink: 0; } .matcher-option strong { display: block; font-size: 1rem; margin-bottom: 2px; } .matcher-option span { font-size: 0.8rem; color: var(--text-muted); } .matcher-option-arrow { margin-left: auto; opacity: 0.3; transition: all 0.2s; flex-shrink: 0; } .matcher-option:hover .matcher-option-arrow { opacity: 1; transform: translateX(4px); } .matcher-back { margin-top: 20px; background: none; border: none; color: var(--text-muted); font-family: inherit; cursor: pointer; font-size: 0.85rem; padding: 8px 0; } .matcher-back:hover { color: var(--text-primary); } .matcher-step, .matcher-results { animation: matcherSlide 0.35s ease forwards; } .matcher-forward { animation-name: matcherSlide; } .matcher-back { animation-name: matcherSlideBack; } @keyframes matcherSlide { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: translateX(0); } } @keyframes matcherSlideBack { from { opacity: 0; transform: translateX(-30px); } to { opacity: 1; transform: translateX(0); } } .matcher-result-list { display: flex; flex-direction: column; gap: 10px; margin-bottom: 20px; } .matcher-result-card { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; padding: 12px 12px 12px 16px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-lg); color: inherit; transition: all 0.25s ease; align-items: center; } .matcher-result-main { display: grid; grid-template-columns: auto auto 1fr auto; grid-template-rows: auto auto; gap: 4px 12px; align-items: center; text-decoration: none; color: inherit; min-width: 0; } .matcher-add-btn { flex-shrink: 0; padding: 8px 12px; border-radius: var(--radius-md); border: var(--border-glass); background: transparent; color: var(--accent-2); font-size: 0.8rem; font-weight: 600; cursor: pointer; white-space: nowrap; } .matcher-add-btn:hover { border-color: var(--accent-2); background: color-mix(in srgb, var(--accent-2) 12%, transparent); } .matcher-option.selected { border-color: rgba(78, 205, 196, 0.55); box-shadow: 0 0 0 1px rgba(78, 205, 196, 0.25); } .matcher-result-card:hover { border-color: rgba(78, 205, 196, 0.4); transform: translateY(-2px); box-shadow: var(--shadow-card); } .matcher-result-card.top { border-color: rgba(255, 230, 109, 0.4); background: linear-gradient(135deg, rgba(255, 107, 107, 0.06), rgba(78, 205, 196, 0.06)); } .matcher-result-rank { font-size: 1.2rem; grid-row: span 2; } .matcher-result-emoji { font-size: 2rem; grid-row: span 2; } .matcher-result-info strong { display: block; font-size: 1rem; } .matcher-result-info span { font-size: 0.75rem; color: var(--text-muted); } .matcher-result-score { grid-column: 4; grid-row: 1; text-align: right; font-size: 0.75rem; color: var(--accent-3); font-weight: 600; } .matcher-score-bar { width: 80px; height: 4px; background: rgba(255, 255, 255, 0.08); border-radius: 2px; margin-bottom: 4px; overflow: hidden; } .matcher-score-fill { height: 100%; background: linear-gradient(90deg, #FF6B6B, #4ECDC4); border-radius: 2px; transition: width 0.8s ease; } .matcher-result-tags { grid-column: 3 / -1; display: flex; gap: 12px; font-size: 0.75rem; color: var(--text-muted); } .matcher-actions { display: flex; gap: 12px; justify-content: center; } .dest-matcher-btn { margin-top: 16px; } .hero-matcher-btn { cursor: pointer; } /* ===== Compare Modal Enhanced ===== */ .compare-modal { max-width: 900px; width: 95%; } .compare-modal-body { padding: 36px 32px; } .compare-modal-header { text-align: center; margin-bottom: 28px; } .compare-modal-header h2 { font-family: var(--font-display); font-size: 1.5rem; margin: 8px 0; } .compare-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 16px; margin-bottom: 32px; } .compare-city-card { text-align: center; padding: 24px 16px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-lg); position: relative; transition: all 0.3s ease; } .compare-city-card.winner { border-color: rgba(255, 230, 109, 0.5); background: linear-gradient(180deg, rgba(255, 230, 109, 0.08), transparent); } .compare-winner-badge { position: absolute; top: -10px; left: 50%; transform: translateX(-50%); background: linear-gradient(135deg, #FF6B6B, #FFE66D); color: #0a0e17; font-size: 0.7rem; font-weight: 700; padding: 4px 12px; border-radius: 20px; white-space: nowrap; } .compare-city-emoji { font-size: 2.5rem; display: block; margin-bottom: 8px; } .compare-city-card h3 { font-family: var(--font-display); font-size: 1.1rem; } .compare-city-country { font-size: 0.8rem; color: var(--text-muted); } .compare-score-ring { position: relative; width: 80px; height: 80px; margin: 16px auto; } .compare-score-ring svg { width: 100%; height: 100%; } .compare-score-num { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-family: var(--font-display); font-weight: 700; font-size: 1.2rem; } .compare-city-link { font-size: 0.8rem; color: var(--accent-3); text-decoration: none; } .compare-city-link:hover { text-decoration: underline; } .compare-metrics { display: flex; flex-direction: column; gap: 20px; } .compare-metric-row { display: grid; grid-template-columns: 100px 1fr; gap: 16px; align-items: start; } .compare-metric-label { font-size: 0.85rem; color: var(--text-muted); padding-top: 4px; } .compare-metric-bars { display: flex; flex-direction: column; gap: 8px; } .compare-bar-item { flex: 1; } .compare-bar-header { display: flex; justify-content: space-between; font-size: 0.8rem; margin-bottom: 4px; } .compare-best { color: var(--accent-3); font-weight: 600; } .compare-bar-track { height: 8px; background: rgba(255, 255, 255, 0.06); border-radius: 4px; overflow: hidden; } .compare-bar-fill { height: 100%; background: rgba(255, 255, 255, 0.15); border-radius: 4px; transition: width 0.8s cubic-bezier(0.34, 1.56, 0.64, 1); animation: barGrow 0.8s ease forwards; } .compare-bar-fill.best { background: linear-gradient(90deg, #FF6B6B, #4ECDC4); } @keyframes barGrow { from { width: 0 !important; } } /* ===== Timezone Board ===== */ .timezone-section { background: linear-gradient(180deg, transparent, rgba(78, 205, 196, 0.03), transparent); } .tz-home-clock { display: flex; align-items: center; justify-content: space-between; gap: 32px; padding: 28px 32px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); margin-bottom: 28px; flex-wrap: wrap; } .tz-home-time { display: flex; align-items: center; gap: 16px; } .tz-live-dot { width: 10px; height: 10px; background: #4ECDC4; border-radius: 50%; animation: pulse 2s infinite; } @keyframes pulse { 0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(78, 205, 196, 0.4); } 50% { opacity: 0.8; box-shadow: 0 0 0 8px rgba(78, 205, 196, 0); } } .tz-home-label { font-size: 0.9rem; color: var(--text-muted); } .tz-home-digits { font-family: var(--font-display); font-size: 2rem; font-weight: 700; font-variant-numeric: tabular-nums; } .tz-seconds { font-size: 1rem; color: var(--text-muted); font-weight: 400; } .tz-work-slider { flex: 1; min-width: 240px; } .tz-work-slider label { display: block; font-size: 0.85rem; color: var(--text-muted); margin-bottom: 12px; } .tz-slider-row { display: flex; align-items: center; gap: 12px; font-size: 0.8rem; color: var(--text-muted); margin-bottom: 8px; } .tz-slider-row input[type="range"] { flex: 1; accent-color: var(--accent-3); } .tz-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 16px; } .tz-card { padding: 20px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(20px); transition: all 0.3s ease; } .tz-card:hover { border-color: rgba(78, 205, 196, 0.3); transform: translateY(-3px); } .tz-card.working { border-color: rgba(78, 205, 196, 0.4); box-shadow: 0 0 20px rgba(78, 205, 196, 0.1); } .tz-card-header { display: flex; align-items: center; gap: 10px; margin-bottom: 16px; } .tz-card-emoji { font-size: 1.5rem; } .tz-card-header strong { display: block; font-size: 0.95rem; } .tz-card-header span { font-size: 0.7rem; color: var(--text-muted); } .tz-overlap-badge { margin-left: auto; font-size: 0.7rem; font-weight: 600; padding: 3px 10px; border-radius: 20px; } .tz-overlap-badge.excellent { background: rgba(78, 205, 196, 0.2); color: #4ECDC4; } .tz-overlap-badge.good { background: rgba(255, 230, 109, 0.2); color: #FFE66D; } .tz-overlap-badge.fair { background: rgba(255, 165, 0, 0.2); color: #ffa500; } .tz-overlap-badge.poor { background: rgba(255, 107, 107, 0.2); color: #FF6B6B; } .tz-analog { position: relative; width: 100px; height: 100px; margin: 0 auto 12px; } .tz-analog svg { width: 100%; height: 100%; } .tz-digital { position: absolute; bottom: -4px; left: 50%; transform: translateX(-50%); font-family: var(--font-display); font-size: 0.85rem; font-weight: 600; font-variant-numeric: tabular-nums; } .tz-overlap-bar { display: flex; align-items: center; gap: 10px; font-size: 0.75rem; color: var(--text-muted); margin-bottom: 8px; } .tz-overlap-track { flex: 1; height: 6px; background: rgba(255, 255, 255, 0.06); border-radius: 3px; overflow: hidden; } .tz-overlap-fill { height: 100%; border-radius: 3px; transition: width 0.6s ease; } .tz-overlap-fill.excellent { background: #4ECDC4; } .tz-overlap-fill.good { background: #FFE66D; } .tz-overlap-fill.fair { background: #ffa500; } .tz-overlap-fill.poor { background: #FF6B6B; } .tz-status { text-align: center; font-size: 0.75rem; color: var(--text-muted); } /* ===== Keyboard Shortcuts ===== */ .shortcuts-modal { max-width: 480px; width: 95%; } .shortcuts-body { padding: 36px 32px; text-align: center; } .shortcuts-body h2 { font-family: var(--font-display); font-size: 1.5rem; margin: 8px 0; } .shortcuts-body p { color: var(--text-muted); font-size: 0.9rem; margin-bottom: 24px; } .shortcuts-grid { display: flex; flex-direction: column; gap: 8px; text-align: left; } .shortcut-item { display: flex; align-items: center; gap: 12px; padding: 12px 16px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-md); } .shortcut-icon { font-size: 1.2rem; } .shortcut-label { flex: 1; font-size: 0.9rem; } .shortcut-keys { display: flex; gap: 4px; } .shortcut-keys kbd, .shortcuts-body kbd { display: inline-block; padding: 3px 8px; background: rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 6px; font-family: inherit; font-size: 0.75rem; color: var(--text-secondary); } @media (max-width: 768px) { .matcher-fab .matcher-fab-text { display: none; } .matcher-fab { padding: 14px; border-radius: 50%; bottom: 90px; left: 16px; } .compare-metric-row { grid-template-columns: 1fr; } .tz-home-clock { flex-direction: column; text-align: center; } .matcher-result-card { grid-template-columns: 1fr; } .matcher-result-main { grid-template-columns: auto 1fr; } .matcher-result-score { grid-column: 2; grid-row: 2; } .matcher-result-tags { grid-column: 1 / -1; } .matcher-add-btn { width: 100%; } } /* ===== Visa Filters Enhancement ===== */ .visa-filters { display: flex; gap: 8px; justify-content: center; flex-wrap: wrap; margin-bottom: 28px; } .visa-card { transition: all 0.3s ease; } .visa-card:hover { transform: translateY(-4px); border-color: rgba(255, 230, 109, 0.3); } .tool-card { transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); } .tool-card:hover { transform: translateY(-6px); border-color: rgba(78, 205, 196, 0.3); box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2); } /* ===== Section Nav ===== */ .section-nav { position: fixed; right: 20px; top: 50%; transform: translateY(-50%) translateX(60px); z-index: 1300; display: flex; flex-direction: column; gap: 6px; opacity: 0; transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1); pointer-events: none; } .section-nav.visible { opacity: 1; transform: translateY(-50%) translateX(0); pointer-events: auto; } .section-nav-dot { display: flex; align-items: center; gap: 10px; padding: 8px 12px 8px 10px; background: var(--bg-card); border: var(--border-glass); border-radius: 50px; cursor: pointer; transition: all 0.25s ease; font-family: inherit; color: var(--text-muted); backdrop-filter: blur(16px); justify-content: flex-end; } .section-nav-dot:hover, .section-nav-dot.active { border-color: rgba(78, 205, 196, 0.4); color: var(--text-primary); background: rgba(78, 205, 196, 0.1); transform: translateX(-4px); } .section-nav-dot.active { box-shadow: 0 0 16px rgba(78, 205, 196, 0.2); } .section-nav-emoji { font-size: 1rem; } .section-nav-label { font-size: 0.75rem; font-weight: 500; max-width: 0; overflow: hidden; white-space: nowrap; transition: max-width 0.3s ease; } .section-nav-dot:hover .section-nav-label, .section-nav-dot.active .section-nav-label { max-width: 60px; } /* ===== Currency Converter ===== */ .currency-section { background: linear-gradient(180deg, transparent, rgba(255, 230, 109, 0.02), transparent); } .currency-wrapper { display: grid; grid-template-columns: 1.2fr 1fr; gap: 24px; align-items: start; } .currency-card { padding: 32px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .currency-input-group label, .currency-result label, .currency-to-select label { display: block; font-size: 0.85rem; color: var(--text-muted); margin-bottom: 10px; } .currency-input-row { display: flex; gap: 12px; } .currency-input-row input { flex: 1; padding: 14px 18px; font-size: 1.5rem; font-family: var(--font-display); font-weight: 700; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); } .currency-input-row select { padding: 12px 16px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); font-family: inherit; cursor: pointer; } .currency-swap { display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; margin: 20px auto; border-radius: 50%; border: var(--border-glass); background: var(--bg-glass); color: var(--accent-3); cursor: pointer; transition: all 0.3s ease; } .currency-swap:hover { background: rgba(78, 205, 196, 0.15); transform: rotate(180deg); } .currency-swap.swapping { transform: rotate(360deg); } .currency-result { text-align: center; padding: 24px; background: rgba(78, 205, 196, 0.06); border-radius: var(--radius-lg); margin-bottom: 20px; } .currency-result-display { display: flex; align-items: baseline; justify-content: center; gap: 10px; margin: 12px 0 8px; } .currency-result-flag { font-size: 2rem; } .currency-result-amount { font-family: var(--font-display); font-size: 2.5rem; font-weight: 800; background: linear-gradient(135deg, #FF6B6B, #4ECDC4); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .currency-result-code { font-size: 1rem; color: var(--text-muted); font-weight: 600; } .currency-rate-hint { font-size: 0.8rem; color: var(--text-muted); } .currency-chips { display: flex; flex-wrap: wrap; gap: 8px; } .currency-chip { padding: 8px 14px; border-radius: 50px; border: var(--border-glass); background: var(--bg-glass); color: var(--text-secondary); font-family: inherit; font-size: 0.8rem; cursor: pointer; transition: all 0.2s ease; } .currency-chip:hover, .currency-chip.active { border-color: rgba(78, 205, 196, 0.4); background: rgba(78, 205, 196, 0.12); color: var(--accent-3); } .currency-presets { padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .currency-presets h3 { font-family: var(--font-display); margin-bottom: 4px; } .currency-presets-desc { font-size: 0.85rem; color: var(--text-muted); margin-bottom: 20px; } .currency-preset-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 20px; } .currency-preset-card { padding: 16px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-md); cursor: pointer; text-align: left; font-family: inherit; color: inherit; transition: all 0.25s ease; } .currency-preset-card:hover { border-color: rgba(255, 230, 109, 0.4); transform: translateY(-2px); } .preset-emoji { font-size: 1.5rem; display: block; margin-bottom: 8px; } .currency-preset-card strong { display: block; font-size: 0.9rem; margin-bottom: 4px; } .currency-preset-card span:last-child { font-size: 0.75rem; color: var(--text-muted); } .currency-tip { display: flex; gap: 10px; padding: 14px; background: rgba(255, 230, 109, 0.06); border-radius: var(--radius-md); font-size: 0.8rem; color: var(--text-muted); } /* ===== Nomad Score ===== */ .nomad-score-section { background: linear-gradient(180deg, transparent, rgba(167, 139, 250, 0.03), transparent); } .nomad-score-card { max-width: 560px; margin: 0 auto; padding: 36px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .nomad-quiz-progress { display: flex; gap: 8px; justify-content: center; margin-bottom: 20px; } .nomad-quiz-dot { width: 40px; height: 4px; border-radius: 2px; background: rgba(255, 255, 255, 0.08); transition: all 0.3s ease; } .nomad-quiz-dot.filled { background: var(--accent-3); } .nomad-quiz-dot.current { box-shadow: 0 0 8px rgba(78, 205, 196, 0.5); } .nomad-quiz-step { display: block; text-align: center; font-size: 0.8rem; color: var(--text-muted); margin-bottom: 12px; } .nomad-quiz h3 { text-align: center; font-family: var(--font-display); font-size: 1.25rem; margin-bottom: 24px; } .nomad-quiz-options { display: flex; flex-direction: column; gap: 10px; } .nomad-quiz-option { display: flex; align-items: center; gap: 14px; padding: 16px 20px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-lg); cursor: pointer; font-family: inherit; color: var(--text-primary); text-align: left; transition: all 0.25s ease; } .nomad-quiz-option:hover { border-color: rgba(167, 139, 250, 0.4); background: rgba(167, 139, 250, 0.08); transform: translateX(6px); } .nomad-quiz-option span:first-child { font-size: 1.5rem; } .nomad-quiz.animating { opacity: 0; transform: translateX(-20px); transition: all 0.3s ease; } .nomad-result { text-align: center; } .nomad-score-ring { position: relative; width: 140px; height: 140px; margin: 0 auto 20px; } .nomad-score-ring svg { width: 100%; height: 100%; } .nomad-score-arc { transition: stroke-dasharray 1s cubic-bezier(0.34, 1.56, 0.64, 1); } .nomad-score-center { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; } .nomad-score-center strong { font-family: var(--font-display); font-size: 2.5rem; font-weight: 800; color: var(--score-color, var(--accent-3)); } .nomad-score-center span { font-size: 0.75rem; color: var(--text-muted); } .nomad-level-label { font-family: var(--font-display); font-size: 1.5rem; margin-bottom: 8px; } .nomad-level-desc { color: var(--text-muted); font-size: 0.9rem; margin-bottom: 24px; max-width: 360px; margin-left: auto; margin-right: auto; } .nomad-result-actions { display: flex; gap: 12px; justify-content: center; } /* ===== Lifestyle Interactive ===== */ .lifestyle-layout { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; align-items: start; } .timeline-item { cursor: pointer; transition: all 0.3s ease; } .timeline-item.active .timeline-card { border-color: rgba(78, 205, 196, 0.5); background: rgba(78, 205, 196, 0.08); transform: scale(1.02); box-shadow: 0 8px 32px rgba(78, 205, 196, 0.15); } .timeline-item.active .timeline-time { color: var(--accent-3); font-weight: 700; } .lifestyle-detail-card { position: sticky; top: 100px; padding: 32px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); text-align: center; } .lifestyle-detail-icon { font-size: 3rem; display: block; margin-bottom: 12px; } .lifestyle-detail-time { font-size: 0.85rem; color: var(--text-muted); } .lifestyle-detail-card h3 { font-family: var(--font-display); font-size: 1.5rem; margin: 12px 0; } .lifestyle-detail-card p { color: var(--text-secondary); line-height: 1.7; margin-bottom: 20px; } .lifestyle-tip { display: flex; gap: 10px; padding: 16px; background: rgba(255, 230, 109, 0.08); border-radius: var(--radius-md); text-align: left; font-size: 0.85rem; color: var(--text-muted); margin-bottom: 20px; } .lifestyle-dots { display: flex; gap: 8px; justify-content: center; } .lifestyle-dot { width: 10px; height: 10px; border-radius: 50%; border: none; background: rgba(255, 255, 255, 0.15); cursor: pointer; transition: all 0.2s ease; padding: 0; } .lifestyle-dot.active { background: var(--accent-3); transform: scale(1.3); } /* ===== Destination Detail Enhanced ===== */ .dest-detail-actions { display: flex; flex-wrap: wrap; gap: 10px; margin: 24px 0; } .dest-detail-extras { display: grid; grid-template-columns: 1.2fr 1fr; gap: 20px; margin: 28px 0; } .dest-depth-block { margin: 28px 0; padding: 22px 0; border-top: 1px solid color-mix(in srgb, var(--text-muted) 22%, transparent); } .dest-depth-block h3 { font-size: 1.05rem; margin-bottom: 12px; } .dest-depth-muted { color: var(--text-muted); font-size: 0.92rem; margin-top: 8px; } .dest-depth-tags { margin-top: 10px; font-size: 0.9rem; } .dest-depth-list { margin: 10px 0 0; padding-left: 1.1rem; display: grid; gap: 6px; } .dest-cost-grid { display: grid; gap: 8px; max-width: 420px; } .dest-cost-row { display: flex; justify-content: space-between; gap: 16px; padding: 8px 0; border-bottom: 1px dashed color-mix(in srgb, var(--text-muted) 25%, transparent); } .dest-pros-cons { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; } .dest-review-grid { display: grid; gap: 14px; } .dest-review-grid blockquote { margin: 0; padding: 14px 0; border-top: 1px solid color-mix(in srgb, var(--text-muted) 18%, transparent); } .dest-review-grid footer { margin-top: 8px; color: var(--text-muted); font-size: 0.85rem; } @media (max-width: 720px) { .dest-pros-cons { grid-template-columns: 1fr; } } .dest-radar-card { padding: 24px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-lg); } .dest-radar-card h3 { font-size: 1rem; margin-bottom: 16px; } .dest-radar-row { display: grid; grid-template-columns: 80px 1fr 36px; gap: 10px; align-items: center; margin-bottom: 10px; } .dest-radar-label { font-size: 0.8rem; color: var(--text-muted); } .dest-radar-track { height: 8px; background: rgba(255, 255, 255, 0.06); border-radius: 4px; overflow: hidden; } .dest-radar-fill { height: 100%; background: linear-gradient(90deg, #FF6B6B, #4ECDC4); border-radius: 4px; transition: width 0.8s ease; } .dest-radar-val { font-size: 0.8rem; font-weight: 600; text-align: right; color: var(--accent-3); } .dest-info-cards { display: flex; flex-direction: column; gap: 10px; } .dest-info-mini { display: flex; align-items: center; gap: 14px; padding: 16px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-md); } .dest-info-mini span:first-child { font-size: 1.5rem; } .dest-info-mini strong { display: block; font-size: 0.85rem; } .dest-info-mini span:last-child { font-size: 0.75rem; color: var(--text-muted); } .dest-related { margin-top: 32px; padding-top: 28px; border-top: 1px solid rgba(255, 255, 255, 0.06); } .dest-related h3 { margin-bottom: 16px; } .dest-related-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; } .dest-related-card { display: flex; align-items: center; gap: 12px; padding: 16px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-md); text-decoration: none; color: inherit; transition: all 0.25s ease; } .dest-related-card:hover { border-color: rgba(78, 205, 196, 0.4); transform: translateY(-2px); } .dest-related-card span:first-child { font-size: 1.8rem; } .dest-related-card strong { display: block; font-size: 0.9rem; } .dest-related-card span:last-child { font-size: 0.75rem; color: var(--text-muted); } /* ===== Blog Reading Progress ===== */ .blog-reading-progress { position: fixed; top: 3px; left: 0; right: 0; height: 3px; z-index: 9998; background: rgba(255, 255, 255, 0.04); } .blog-reading-bar { height: 100%; background: linear-gradient(90deg, #A78BFA, #4ECDC4); transition: width 0.1s linear; } .blog-reading-pct { position: fixed; top: 12px; right: 20px; z-index: 9998; font-size: 0.7rem; font-weight: 600; color: var(--accent-3); background: var(--bg-card); padding: 4px 10px; border-radius: 20px; border: var(--border-glass); } /* ===== Map Actions ===== */ .map-info-actions { display: flex; gap: 10px; margin-top: 16px; } .btn-sm { padding: 8px 16px !important; font-size: 0.8rem !important; } /* ===== Profile Trip ===== */ .profile-trip { margin: 40px 0; } .profile-trip h2 { font-family: var(--font-display); margin-bottom: 20px; } .profile-trip-list { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); padding: 20px; } .profile-trip-item { display: flex; align-items: center; gap: 14px; padding: 14px 0; border-bottom: 1px solid rgba(255, 255, 255, 0.06); } .profile-trip-item:last-of-type { border-bottom: none; } .trip-item-num { width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; background: rgba(78, 205, 196, 0.15); border-radius: 50%; font-size: 0.75rem; font-weight: 700; color: var(--accent-3); } .profile-trip-total { padding: 16px 0 12px; font-size: 0.9rem; color: var(--text-muted); text-align: center; } @media (max-width: 1024px) { .currency-wrapper { grid-template-columns: 1fr; } .lifestyle-layout { grid-template-columns: 1fr; } .lifestyle-detail-card { position: static; } .dest-detail-extras { grid-template-columns: 1fr; } .section-nav { display: none; } } @media (max-width: 768px) { .currency-preset-grid { grid-template-columns: 1fr; } .currency-result-amount { font-size: 1.8rem; } } /* ===== Cost Compare ===== */ .cost-compare-section { background: linear-gradient(180deg, transparent, rgba(78, 205, 196, 0.03), transparent); } .cost-compare-card { max-width: 720px; margin: 0 auto; padding: 32px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .cost-compare-selectors { display: flex; flex-direction: column; gap: 20px; margin-bottom: 28px; } .cost-compare-select label { display: block; font-size: 0.85rem; color: var(--text-muted); margin-bottom: 10px; } .cost-city-chips { display: flex; flex-wrap: wrap; gap: 8px; } .cost-city-chip { padding: 8px 14px; border-radius: 50px; border: var(--border-glass); background: var(--bg-glass); color: var(--text-secondary); font-family: inherit; font-size: 0.85rem; cursor: pointer; transition: all 0.2s ease; } .cost-city-chip:hover, .cost-city-chip.active { border-color: rgba(78, 205, 196, 0.4); background: rgba(78, 205, 196, 0.12); color: var(--accent-3); } .cost-compare-select select { width: 100%; padding: 12px 16px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); font-family: inherit; cursor: pointer; } .cost-compare-bars { display: flex; flex-direction: column; gap: 16px; margin-bottom: 24px; } .cost-bar-label { display: flex; justify-content: space-between; margin-bottom: 8px; font-size: 0.9rem; } .cost-bar-track { height: 12px; background: rgba(255, 255, 255, 0.06); border-radius: 6px; overflow: hidden; } .cost-bar-fill { height: 100%; border-radius: 6px; transition: width 0.8s cubic-bezier(0.34, 1.56, 0.64, 1); } .cost-bar-fill.home { background: linear-gradient(90deg, #FF6B6B, #FFE66D); } .cost-bar-fill.dest { background: rgba(255, 255, 255, 0.2); } .cost-bar-fill.dest.cheaper { background: linear-gradient(90deg, #4ECDC4, #6ee7b7); } .cost-compare-result { display: flex; align-items: center; gap: 16px; padding: 20px; background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-lg); } .cost-compare-result.saving { background: rgba(78, 205, 196, 0.08); border-color: rgba(78, 205, 196, 0.3); } .cost-result-emoji { font-size: 2rem; } .cost-compare-result strong { display: block; font-family: var(--font-display); font-size: 1.15rem; margin-bottom: 4px; } .cost-compare-result p { font-size: 0.85rem; color: var(--text-muted); margin: 0; } /* ===== Tools Filters ===== */ .tools-filters { display: flex; gap: 8px; justify-content: center; flex-wrap: wrap; margin-bottom: 28px; } .tool-links { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0; } .tool-link { font-size: 0.8rem; color: var(--accent-3); text-decoration: none; padding: 4px 10px; background: rgba(78, 205, 196, 0.08); border-radius: 20px; transition: all 0.2s ease; } .tool-link:hover { background: rgba(78, 205, 196, 0.2); } .tool-link-static { font-size: 0.8rem; color: var(--text-muted); padding: 4px 10px; background: var(--bg-glass); border-radius: 20px; } /* ===== Blog Tables ===== */ .blog-table-wrap { overflow-x: auto; margin: 20px 0; border-radius: var(--radius-md); border: var(--border-glass); } .blog-table { width: 100%; border-collapse: collapse; font-size: 0.9rem; } .blog-table th, .blog-table td { padding: 12px 16px; text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.06); } .blog-table th { background: rgba(78, 205, 196, 0.08); font-weight: 600; color: var(--accent-3); } .blog-table tr:last-child td { border-bottom: none; } .blog-table tr:hover td { background: rgba(255, 255, 255, 0.02); } /* ===== Cookie Consent ===== */ .cookie-consent { position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%); z-index: 9000; width: min(560px, calc(100% - 32px)); animation: toastIn 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); } .cookie-consent-inner { display: flex; align-items: center; gap: 14px; padding: 16px 20px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(20px); box-shadow: var(--shadow-card); } .cookie-emoji { font-size: 1.5rem; flex-shrink: 0; } .cookie-consent-inner p { flex: 1; font-size: 0.85rem; color: var(--text-secondary); margin: 0; line-height: 1.5; } .cookie-consent-inner a { color: var(--accent-3); margin-left: 4px; } @media (max-width: 768px) { .cookie-consent-inner { flex-wrap: wrap; justify-content: center; text-align: center; } .cost-compare-card { padding: 20px; } .nav-links.open { animation: menuSlide 0.3s ease; } } @keyframes menuSlide { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } /* ===== Visa Wizard ===== */ .visa-wizard { margin-top: 48px; padding: 32px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .visa-wizard-header { text-align: center; margin-bottom: 28px; } .visa-wizard-header h3 { font-size: 1.5rem; margin: 12px 0 8px; } .visa-wizard-header p { color: var(--text-secondary); font-size: 0.9rem; } .visa-wizard-steps { display: flex; justify-content: center; gap: 32px; margin-bottom: 28px; } .wizard-step-dot { display: flex; flex-direction: column; align-items: center; gap: 6px; opacity: 0.4; transition: opacity 0.3s; } .wizard-step-dot span { width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: rgba(255, 255, 255, 0.06); border: 2px solid rgba(255, 255, 255, 0.1); font-weight: 600; font-size: 0.85rem; } .wizard-step-dot small { font-size: 0.75rem; color: var(--text-secondary); } .wizard-step-dot.active { opacity: 1; } .wizard-step-dot.active span { border-color: var(--accent-3); background: rgba(78, 205, 196, 0.15); color: var(--accent-3); } .wizard-step-dot.done span { background: var(--accent-3); color: #0a0e17; border-color: var(--accent-3); } .wizard-options { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-bottom: 24px; } .wizard-option { padding: 16px 20px; background: rgba(255, 255, 255, 0.03); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: var(--radius-md); color: var(--text-primary); font-size: 0.9rem; cursor: pointer; transition: all 0.25s; text-align: left; } .wizard-option:hover { border-color: rgba(78, 205, 196, 0.4); background: rgba(78, 205, 196, 0.06); } .wizard-option.selected { border-color: var(--accent-3); background: rgba(78, 205, 196, 0.12); box-shadow: 0 0 20px rgba(78, 205, 196, 0.15); } .wizard-nav { display: flex; justify-content: center; gap: 12px; } .wizard-result-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 16px; margin-bottom: 20px; } .wizard-result-card { position: relative; padding: 20px; background: rgba(255, 255, 255, 0.03); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: var(--radius-lg); transition: transform 0.3s; } .wizard-result-card.winner { border-color: var(--accent-2); background: rgba(255, 230, 109, 0.06); } .wizard-winner-badge { position: absolute; top: -10px; right: 12px; font-size: 0.75rem; padding: 4px 10px; background: linear-gradient(135deg, #FFE66D, #FF6B6B); color: #0a0e17; border-radius: 20px; font-weight: 600; } .wizard-result-top { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; } .wizard-result-flag { font-size: 2rem; } .wizard-result-card h4 { font-size: 1rem; margin-bottom: 4px; } .wizard-match-score { font-size: 0.8rem; color: var(--accent-3); font-weight: 600; } .wizard-result-card ul { list-style: none; padding: 0; margin: 0; } .wizard-result-card li { font-size: 0.85rem; color: var(--text-secondary); padding: 4px 0; } .wizard-empty { text-align: center; color: var(--text-secondary); padding: 20px; } /* ===== Coworking Guide ===== */ .coworking-section { background: linear-gradient(180deg, transparent, rgba(78, 205, 196, 0.03)); } .coworking-controls { display: flex; flex-wrap: wrap; gap: 16px; justify-content: space-between; align-items: center; margin-bottom: 28px; } .coworking-filters { display: flex; flex-wrap: wrap; gap: 8px; } .coworking-sort { padding: 8px 14px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-md); color: var(--text-primary); font-size: 0.85rem; cursor: pointer; } .coworking-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 20px; } .coworking-card { padding: 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(16px); transition: transform 0.3s, box-shadow 0.3s; } .coworking-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-card); } .coworking-card-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .coworking-emoji { font-size: 1.8rem; } .coworking-rating { display: flex; flex-direction: column; align-items: flex-end; font-size: 0.8rem; gap: 2px; } .coworking-wifi { color: var(--accent-3); } .coworking-card h3 { font-size: 1.15rem; margin-bottom: 4px; } .coworking-city { font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 10px; } .coworking-price { font-size: 1.1rem; font-weight: 700; color: var(--accent-2); margin-bottom: 12px; } .coworking-perks { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 14px; } .coworking-perk { font-size: 0.75rem; padding: 4px 10px; background: rgba(255, 255, 255, 0.05); border-radius: 20px; color: var(--text-secondary); } .coworking-link { font-size: 0.85rem; color: var(--accent-3); font-weight: 500; } /* ===== FAQ Toolbar ===== */ .faq-toolbar { display: flex; flex-wrap: wrap; gap: 16px; justify-content: space-between; align-items: center; margin-bottom: 24px; } .faq-search-wrap { position: relative; flex: 1; min-width: 240px; max-width: 480px; } .faq-search-icon { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); font-size: 0.9rem; pointer-events: none; } .faq-search { width: 100%; padding: 12px 40px 12px 40px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-md); color: var(--text-primary); font-size: 0.9rem; } .faq-search:focus { outline: none; border-color: rgba(78, 205, 196, 0.5); } .faq-search-clear { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); background: none; border: none; color: var(--text-secondary); cursor: pointer; padding: 4px 8px; } .faq-toolbar-actions { display: flex; gap: 8px; } .btn-sm { padding: 8px 14px !important; font-size: 0.8rem !important; } .faq-empty { text-align: center; color: var(--text-secondary); padding: 32px; } /* ===== Blog Filters ===== */ .blog-filters { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-bottom: 28px; } /* ===== Share Button ===== */ .share-dropdown { position: relative; } .share-trigger { font-size: 0.85rem; } .share-backdrop { position: fixed; inset: 0; z-index: 100; } .share-menu { position: absolute; top: calc(100% + 8px); right: 0; z-index: 101; min-width: 160px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-md); backdrop-filter: blur(20px); box-shadow: var(--shadow-card); overflow: hidden; animation: toastIn 0.2s ease; } .share-menu button { display: block; width: 100%; padding: 12px 16px; background: none; border: none; color: var(--text-primary); font-size: 0.85rem; text-align: left; cursor: pointer; transition: background 0.2s; } .share-menu button:hover { background: rgba(78, 205, 196, 0.1); } .share-btn-compact { background: rgba(255, 255, 255, 0.06); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: var(--radius-md); padding: 8px 12px; font-size: 1rem; cursor: pointer; transition: all 0.2s; } .share-btn-compact:hover { background: rgba(78, 205, 196, 0.12); border-color: rgba(78, 205, 196, 0.3); } /* ===== Blog Related ===== */ .blog-related { margin-top: 48px; padding-top: 32px; border-top: 1px solid rgba(255, 255, 255, 0.06); } .blog-related h2 { font-size: 1.3rem; margin-bottom: 20px; } .blog-related-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 16px; } .blog-related-card { padding: 20px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); transition: transform 0.3s; } .blog-related-card:hover { transform: translateY(-3px); } .blog-related-emoji { font-size: 2rem; display: block; margin-bottom: 8px; } .blog-related-card h3 { font-size: 1rem; margin-bottom: 8px; } .blog-related-card p { font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 10px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .detail-nav { display: flex; justify-content: space-between; align-items: center; } /* ===== Profile Badges ===== */ .profile-badges { margin: 32px 0; } .profile-badges h2 { font-size: 1.2rem; margin-bottom: 16px; } .badge-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 12px; } .badge-card { padding: 16px; text-align: center; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); transition: transform 0.3s; } .badge-card.earned { border-color: rgba(255, 230, 109, 0.3); background: rgba(255, 230, 109, 0.05); } .badge-card.locked { opacity: 0.45; filter: grayscale(0.5); } .badge-card.earned:hover { transform: scale(1.04); } .badge-emoji { font-size: 2rem; display: block; margin-bottom: 6px; } .badge-card strong { display: block; font-size: 0.85rem; margin-bottom: 4px; } .badge-card small { font-size: 0.7rem; color: var(--text-secondary); } /* ===== Auth Enhancements ===== */ .auth-bg-shapes { position: absolute; inset: 0; pointer-events: none; overflow: hidden; } .auth-shape { position: absolute; font-size: 3rem; opacity: 0.08; animation: authFloat 8s ease-in-out infinite; } .auth-shape-1 { top: 15%; left: 10%; animation-delay: 0s; } .auth-shape-2 { top: 60%; right: 15%; animation-delay: -3s; font-size: 2.5rem; } .auth-shape-3 { bottom: 20%; left: 30%; animation-delay: -5s; font-size: 2rem; } @keyframes authFloat { 0%, 100% { transform: translateY(0) rotate(0deg); } 50% { transform: translateY(-20px) rotate(5deg); } } .auth-logo-emoji { font-size: 3rem; display: block; animation: authPulse 2s ease-in-out infinite; } @keyframes authPulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.08); } } .auth-pwd-wrap { position: relative; } .auth-pwd-wrap input { width: 100%; padding-right: 44px; } .auth-pwd-toggle { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); background: none; border: none; cursor: pointer; font-size: 1rem; padding: 4px; } .auth-submit { width: 100%; } .auth-loading { display: inline-block; animation: authPulse 1s ease-in-out infinite; } /* ===== 404 Enhancements ===== */ .not-found-compass { position: relative; width: 120px; height: 120px; margin: 0 auto 24px; } .compass-ring { font-size: 5rem; display: block; animation: compassSpin 6s linear infinite; } .compass-plane { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 1.8rem; animation: planeOrbit 4s ease-in-out infinite; } @keyframes compassSpin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes planeOrbit { 0%, 100% { transform: translate(-50%, -50%) translateX(30px); } 50% { transform: translate(-50%, -50%) translateX(-30px); } } .not-found-title { font-size: 5rem; background: linear-gradient(135deg, var(--accent-1), var(--accent-2), var(--accent-3)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .not-found-sub { color: var(--text-secondary); margin-bottom: 24px; } .not-found-actions { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; } @media (max-width: 768px) { .visa-wizard { padding: 20px; } .visa-wizard-steps { gap: 16px; } .wizard-step-dot small { display: none; } .coworking-controls { flex-direction: column; align-items: stretch; } .faq-toolbar { flex-direction: column; } .faq-search-wrap { max-width: 100%; } .badge-grid { grid-template-columns: repeat(3, 1fr); } .season-grid { grid-template-columns: repeat(3, 1fr); } .packing-filters { flex-direction: column; align-items: stretch; } .nomad-tips { left: 12px; right: 12px; bottom: 80px; max-width: none; } } /* ===== Packing Checklist ===== */ .packing-card { max-width: 720px; margin: 0 auto; padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .packing-progress { margin-bottom: 24px; } .packing-progress-info { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; font-size: 0.9rem; } .packing-progress-info strong { font-size: 1.4rem; } .packing-count { margin-left: auto; color: var(--text-secondary); } .packing-bar { height: 8px; background: rgba(255, 255, 255, 0.06); border-radius: 4px; overflow: hidden; } .packing-bar-fill { height: 100%; background: linear-gradient(90deg, var(--accent-1), var(--accent-3)); border-radius: 4px; transition: width 0.4s ease; } .packing-ready { margin-top: 10px; color: var(--accent-3); font-weight: 600; text-align: center; } .packing-filters { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 20px; } .packing-actions { margin-left: auto; display: flex; gap: 6px; } .packing-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; } .packing-item { display: flex; align-items: center; gap: 12px; padding: 12px 14px; background: rgba(255, 255, 255, 0.03); border: 1px solid rgba(255, 255, 255, 0.06); border-radius: var(--radius-md); cursor: pointer; transition: all 0.25s; } .packing-item:hover { border-color: rgba(78, 205, 196, 0.3); background: rgba(78, 205, 196, 0.05); } .packing-item.checked { opacity: 0.65; border-color: rgba(78, 205, 196, 0.35); } .packing-item.checked .packing-label { text-decoration: line-through; color: var(--text-secondary); } .packing-item input { display: none; } .packing-check { width: 22px; height: 22px; border-radius: 6px; border: 2px solid rgba(255, 255, 255, 0.2); display: flex; align-items: center; justify-content: center; font-size: 0.75rem; color: #0a0e17; flex-shrink: 0; transition: all 0.2s; } .packing-item.checked .packing-check { background: var(--accent-3); border-color: var(--accent-3); } .packing-emoji { font-size: 1.2rem; } .packing-label { font-size: 0.9rem; } /* ===== Season Guide ===== */ .season-card { padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .season-cities { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 24px; justify-content: center; } .season-city-btn { padding: 8px 14px; background: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 20px; color: var(--text-primary); font-size: 0.85rem; cursor: pointer; transition: all 0.25s; } .season-city-btn:hover, .season-city-btn.active { border-color: var(--accent-3); background: rgba(78, 205, 196, 0.12); } .season-header-row { display: flex; justify-content: space-between; align-items: center; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; } .season-header-row h3 { font-size: 1.3rem; margin-bottom: 4px; } .season-header-row p { color: var(--text-secondary); font-size: 0.9rem; } .season-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px; margin-bottom: 20px; } .season-month { position: relative; padding: 14px 8px; text-align: center; background: rgba(255, 255, 255, 0.03); border: 1px solid color-mix(in srgb, var(--season-color) 40%, transparent); border-radius: var(--radius-md); border-top: 3px solid var(--season-color); transition: transform 0.2s; } .season-month:hover { transform: translateY(-2px); } .season-month.now { box-shadow: 0 0 16px color-mix(in srgb, var(--season-color) 30%, transparent); } .season-month-emoji { display: block; font-size: 1.2rem; margin-bottom: 4px; } .season-month strong { display: block; font-size: 0.9rem; } .season-month small { color: var(--text-secondary); font-size: 0.7rem; } .season-now-tag { position: absolute; top: -8px; right: -4px; font-size: 0.65rem; padding: 2px 6px; background: var(--accent-1); color: #fff; border-radius: 8px; font-weight: 600; } .season-legend { display: flex; flex-wrap: wrap; gap: 16px; justify-content: center; } .season-legend-item { display: flex; align-items: center; gap: 6px; font-size: 0.8rem; color: var(--text-secondary); } .season-legend-item i { width: 10px; height: 10px; border-radius: 50%; display: inline-block; } /* ===== Testimonial Carousel ===== */ .testimonial-carousel { max-width: 680px; margin: 0 auto 40px; text-align: center; } .testimonial-featured { padding: 32px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); animation: toastIn 0.4s ease; } .testimonial-featured .testimonial-avatar { font-size: 3rem; margin-bottom: 12px; } .testimonial-featured p { font-size: 1.1rem; line-height: 1.7; margin: 12px 0 16px; } .testimonial-dots { display: flex; justify-content: center; gap: 8px; margin-top: 16px; } .testimonial-dot { width: 8px; height: 8px; border-radius: 50%; border: none; background: rgba(255, 255, 255, 0.2); cursor: pointer; padding: 0; transition: all 0.3s; } .testimonial-dot.active { width: 24px; border-radius: 4px; background: var(--accent-3); } /* ===== Nomad Tips ===== */ .nomad-tips { position: fixed; bottom: 100px; left: 24px; z-index: 8500; max-width: 340px; display: flex; align-items: flex-start; gap: 12px; padding: 16px 18px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(20px); box-shadow: var(--shadow-card); animation: toastIn 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); } .nomad-tips-emoji { font-size: 1.5rem; flex-shrink: 0; } .nomad-tips-body strong { display: block; font-size: 0.8rem; color: var(--accent-3); margin-bottom: 4px; } .nomad-tips-body p { font-size: 0.85rem; color: var(--text-secondary); margin: 0; line-height: 1.45; animation: toastIn 0.3s ease; } .nomad-tips-close { position: absolute; top: 8px; right: 10px; background: none; border: none; color: var(--text-secondary); cursor: pointer; font-size: 0.85rem; padding: 2px 6px; } .nomad-tips-dots { position: absolute; bottom: 8px; right: 16px; display: flex; gap: 4px; } .nomad-tips-dots span { width: 5px; height: 5px; border-radius: 50%; background: rgba(255, 255, 255, 0.2); } .nomad-tips-dots span.active { background: var(--accent-3); } /* ===== Spin Globe ===== */ .spin-card { max-width: 520px; margin: 0 auto; padding: 40px 28px; text-align: center; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .spin-orb { position: relative; width: 140px; height: 140px; margin: 0 auto 20px; display: flex; align-items: center; justify-content: center; } .spin-emoji { font-size: 4rem; position: relative; z-index: 2; transition: transform 0.1s; } .spin-orb.spinning .spin-emoji { animation: spinBounce 0.18s ease infinite; } @keyframes spinBounce { 0%, 100% { transform: scale(1) rotate(-4deg); } 50% { transform: scale(1.12) rotate(4deg); } } .spin-orb-ring { position: absolute; inset: 0; border-radius: 50%; border: 2px dashed rgba(78, 205, 196, 0.35); animation: compassSpin 12s linear infinite; } .spin-orb-ring-2 { inset: 12px; border-style: solid; border-color: rgba(255, 230, 109, 0.25); animation-direction: reverse; animation-duration: 8s; } .spin-orb.spinning .spin-orb-ring { animation-duration: 1.2s; border-color: var(--accent-3); } .spin-city-name { font-size: 1.5rem; margin-bottom: 8px; } .spin-hint { color: var(--text-secondary); font-size: 0.9rem; margin-bottom: 20px; } .spin-btn { min-width: 200px; } .spin-result { margin-top: 8px; animation: toastIn 0.4s ease; } .spin-result-tag { color: var(--accent-2); font-weight: 600; margin-bottom: 10px; } .spin-result-meta { display: flex; justify-content: center; gap: 14px; flex-wrap: wrap; font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 12px; } .spin-result-desc { font-size: 0.9rem; color: var(--text-secondary); line-height: 1.6; margin-bottom: 18px; } .spin-result-actions { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; } /* ===== Flight Cost ===== */ .flight-card { display: grid; grid-template-columns: 1.1fr 0.9fr; gap: 28px; padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .flight-form { display: flex; flex-direction: column; gap: 16px; } .flight-arrow { text-align: center; font-size: 1.4rem; color: var(--accent-3); opacity: 0.7; } .flight-result { display: flex; flex-direction: column; justify-content: center; padding: 24px; background: rgba(78, 205, 196, 0.06); border: 1px solid rgba(78, 205, 196, 0.15); border-radius: var(--radius-lg); } .flight-route { display: flex; align-items: center; justify-content: center; gap: 12px; font-weight: 600; margin-bottom: 20px; flex-wrap: wrap; } .flight-plane { animation: planeOrbit 3s ease-in-out infinite; } .flight-nums { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; } .flight-nums div { text-align: center; } .flight-nums small { display: block; font-size: 0.75rem; color: var(--text-secondary); margin-bottom: 4px; } .flight-nums strong { font-size: 1.25rem; } .flight-total { grid-column: 1 / -1; padding-top: 10px; border-top: 1px solid rgba(255, 255, 255, 0.08); } .flight-total strong { font-size: 1.75rem; } .flight-note { margin-top: 16px; font-size: 0.75rem; color: var(--text-secondary); text-align: center; } /* ===== Nomad Events ===== */ .events-filters { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-bottom: 28px; } .events-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 20px; } .event-card { padding: 22px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(16px); transition: transform 0.3s, box-shadow 0.3s; } .event-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-card); } .event-card-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .event-emoji { font-size: 2rem; } .event-badge { font-size: 0.75rem; padding: 4px 10px; background: rgba(255, 255, 255, 0.06); border-radius: 20px; color: var(--text-secondary); } .event-badge.online { background: rgba(78, 205, 196, 0.12); color: var(--accent-3); } .event-card h3 { font-size: 1.05rem; margin-bottom: 6px; } .event-date { font-size: 0.85rem; color: var(--accent-2); margin-bottom: 8px; } .event-desc { font-size: 0.85rem; color: var(--text-secondary); line-height: 1.5; margin-bottom: 14px; } /* ===== Legal / Privacy ===== */ .legal-page { max-width: 720px; margin: 0 auto; padding: calc(var(--nav-height) + 40px) 24px 80px; position: relative; z-index: 1; } .legal-content .section-tag { margin-bottom: 12px; display: inline-block; } .legal-content h1 { font-size: 2rem; margin-bottom: 8px; } .legal-updated { color: var(--text-secondary); font-size: 0.85rem; margin-bottom: 32px; } .legal-content section { margin-bottom: 28px; } .legal-content h2 { font-size: 1.2rem; margin-bottom: 10px; color: var(--accent-3); } .legal-content p { color: var(--text-secondary); line-height: 1.7; } .legal-content a { color: var(--accent-3); } @media (max-width: 768px) { .flight-card { grid-template-columns: 1fr; } .spin-card { padding: 28px 20px; } } /* ===== Daily Quote ===== */ .quote-section { padding-top: 40px; padding-bottom: 40px; } .quote-card { max-width: 720px; margin: 0 auto; padding: 36px 32px; text-align: center; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); position: relative; overflow: hidden; } .quote-card::before { content: ""; position: absolute; inset: 0; background: linear-gradient(135deg, rgba(255,107,107,0.06), rgba(78,205,196,0.08)); pointer-events: none; } .quote-emoji { font-size: 2.5rem; display: block; margin-bottom: 12px; position: relative; } .quote-card blockquote { font-family: var(--font-display); font-size: clamp(1.15rem, 2.5vw, 1.5rem); font-weight: 600; line-height: 1.6; margin: 0 0 20px; position: relative; } .quote-footer { display: flex; justify-content: center; align-items: center; gap: 16px; flex-wrap: wrap; position: relative; } /* ===== Wifi Work Score ===== */ .wifi-layout { display: grid; grid-template-columns: 1.2fr 0.8fr; gap: 24px; } .wifi-picker { padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .wifi-meter { display: flex; align-items: center; gap: 24px; margin-top: 20px; flex-wrap: wrap; } .wifi-meter-ring { width: 120px; height: 120px; border-radius: 50%; border: 4px solid var(--wifi-color); display: flex; flex-direction: column; align-items: center; justify-content: center; box-shadow: 0 0 24px color-mix(in srgb, var(--wifi-color) 35%, transparent); flex-shrink: 0; } .wifi-meter-ring strong { font-size: 1.8rem; line-height: 1; } .wifi-meter-ring small { color: var(--text-secondary); font-size: 0.75rem; } .wifi-meter-info h3 { font-size: 1.3rem; margin-bottom: 6px; } .wifi-level { font-weight: 700; font-size: 1rem; display: block; margin-bottom: 8px; } .wifi-meter-info p { color: var(--text-secondary); font-size: 0.9rem; margin-bottom: 10px; } .wifi-link { color: var(--accent-3); font-size: 0.85rem; } .wifi-rank { padding: 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .wifi-rank h4 { margin-bottom: 14px; font-size: 1rem; } .wifi-rank ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; } .wifi-rank li { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: var(--radius-md); cursor: pointer; transition: background 0.2s; font-size: 0.9rem; } .wifi-rank li:hover, .wifi-rank li.active { background: rgba(78, 205, 196, 0.1); } .wifi-rank-num { width: 22px; height: 22px; border-radius: 50%; background: rgba(255,255,255,0.08); display: flex; align-items: center; justify-content: center; font-size: 0.75rem; font-weight: 700; } .wifi-rank-speed { margin-left: auto; font-weight: 600; font-size: 0.85rem; } /* ===== Savings Goal ===== */ .savings-card { display: grid; grid-template-columns: 1.1fr 0.9fr; gap: 28px; padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .savings-form { display: flex; flex-direction: column; gap: 16px; } .savings-result { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 20px; padding: 20px; background: rgba(78, 205, 196, 0.05); border-radius: var(--radius-lg); } .savings-ring { width: 140px; height: 140px; border-radius: 50%; display: flex; align-items: center; justify-content: center; } .savings-ring-inner { width: 110px; height: 110px; border-radius: 50%; background: var(--bg-card); display: flex; flex-direction: column; align-items: center; justify-content: center; } .savings-ring-inner strong { font-size: 1.8rem; } .savings-ring-inner small { color: var(--text-secondary); font-size: 0.75rem; } .savings-stats { text-align: center; width: 100%; } .savings-stats > div { margin-bottom: 12px; } .savings-stats small { display: block; font-size: 0.75rem; color: var(--text-secondary); margin-bottom: 2px; } .savings-stats strong { font-size: 1.3rem; } .savings-hint { font-size: 0.8rem; color: var(--text-secondary); line-height: 1.5; margin-top: 8px; } @media (max-width: 768px) { .wifi-layout, .savings-card { grid-template-columns: 1fr; } } /* ===== Jet Lag ===== */ .jetlag-card { display: grid; grid-template-columns: 1fr 1.1fr; gap: 28px; padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .jetlag-form { display: flex; flex-direction: column; gap: 16px; } .jetlag-result { padding: 24px; background: rgba(167, 139, 250, 0.06); border: 1px solid rgba(167, 139, 250, 0.15); border-radius: var(--radius-lg); } .jetlag-diff { text-align: center; margin-bottom: 20px; } .jetlag-emoji { font-size: 2.5rem; display: block; margin-bottom: 8px; } .jetlag-diff strong { font-size: 1.8rem; display: block; } .jetlag-diff small { color: var(--text-secondary); font-size: 0.85rem; } .jetlag-recovery { text-align: center; margin-bottom: 16px; padding-bottom: 16px; border-bottom: 1px solid rgba(255,255,255,0.06); } .jetlag-recovery span { display: block; font-size: 0.8rem; color: var(--text-secondary); margin-bottom: 4px; } .jetlag-recovery strong { font-size: 1.5rem; } .jetlag-note { margin-top: 8px; font-size: 0.8rem; color: var(--accent-2); } .jetlag-tips { list-style: none; padding: 0; margin: 0; } .jetlag-tips li { font-size: 0.9rem; color: var(--text-secondary); padding: 6px 0; line-height: 1.45; } /* ===== Housing ===== */ .housing-cities { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-bottom: 24px; } .housing-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; flex-wrap: wrap; gap: 12px; } .housing-header h3 { font-size: 1.2rem; } .housing-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 18px; } .housing-card { padding: 22px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(16px); transition: transform 0.3s; } .housing-card:hover { transform: translateY(-4px); } .housing-card-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .housing-emoji { font-size: 1.8rem; } .housing-price { font-size: 0.85rem; color: var(--accent-2); font-weight: 600; } .housing-card h4 { font-size: 1.05rem; margin-bottom: 6px; } .housing-best { font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 12px; } .housing-pros { display: flex; flex-wrap: wrap; gap: 6px; } .housing-pro { font-size: 0.75rem; padding: 4px 10px; background: rgba(255,255,255,0.05); border-radius: 20px; color: var(--text-secondary); } /* ===== Phrasebook ===== */ .phrase-card { padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .phrase-lang { text-align: center; font-weight: 600; margin-bottom: 20px; color: var(--accent-3); } .phrase-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; } .phrase-item { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; padding: 14px 16px; background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.08); border-radius: var(--radius-md); color: var(--text-primary); cursor: pointer; text-align: left; transition: all 0.25s; } .phrase-item:hover { border-color: rgba(78, 205, 196, 0.4); background: rgba(78, 205, 196, 0.08); transform: translateY(-2px); } .phrase-item strong { font-size: 1rem; } .phrase-pinyin { font-size: 0.75rem; color: var(--accent-3); } .phrase-zh { font-size: 0.85rem; color: var(--text-secondary); } /* ===== Feedback Widget ===== */ .feedback-fab { position: fixed; bottom: 100px; right: 24px; z-index: 8600; width: 48px; height: 48px; border-radius: 50%; border: var(--border-glass); background: var(--bg-card); backdrop-filter: blur(16px); font-size: 1.3rem; cursor: pointer; box-shadow: var(--shadow-card); transition: transform 0.25s; } .feedback-fab:hover { transform: scale(1.08); } .feedback-modal { max-width: 420px; } .feedback-body { padding: 8px 4px 4px; text-align: center; } .feedback-body h2 { margin: 12px 0 8px; font-size: 1.4rem; } .feedback-body > p { color: var(--text-secondary); font-size: 0.9rem; margin-bottom: 20px; } .feedback-types { display: flex; gap: 8px; justify-content: center; margin-bottom: 14px; flex-wrap: wrap; } .feedback-textarea { width: 100%; padding: 14px; margin-bottom: 14px; background: rgba(255,255,255,0.04); border: var(--border-glass); border-radius: var(--radius-md); color: var(--text-primary); font-size: 0.9rem; resize: vertical; font-family: inherit; } .feedback-textarea:focus { outline: none; border-color: rgba(78, 205, 196, 0.5); } @media (max-width: 768px) { .jetlag-card { grid-template-columns: 1fr; } .feedback-fab { bottom: 160px; right: 16px; } } /* ===== Insurance ===== */ .insurance-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 18px; } .insurance-card { padding: 22px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(16px); cursor: pointer; transition: transform 0.3s, border-color 0.3s; } .insurance-card:hover { transform: translateY(-3px); } .insurance-card.selected { border-color: var(--accent-3); box-shadow: 0 0 20px rgba(78, 205, 196, 0.15); } .insurance-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .insurance-emoji { font-size: 1.8rem; } .insurance-price { font-size: 0.85rem; color: var(--accent-2); font-weight: 600; } .insurance-card h3 { font-size: 1.05rem; margin-bottom: 6px; } .insurance-best { font-size: 0.85rem; color: var(--accent-3); margin-bottom: 10px; } .insurance-cover { list-style: none; padding: 0; margin: 0 0 12px; } .insurance-cover li { font-size: 0.85rem; color: var(--text-secondary); padding: 3px 0; } .insurance-note { font-size: 0.8rem; color: var(--text-secondary); line-height: 1.45; } .insurance-picked { display: inline-block; margin-top: 10px; font-size: 0.75rem; color: var(--accent-3); font-weight: 600; } /* ===== Expense Tracker ===== */ .expense-card { display: grid; grid-template-columns: 0.95fr 1.05fr; gap: 28px; padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .expense-form { display: flex; flex-direction: column; gap: 14px; } .expense-cats { display: flex; flex-wrap: wrap; gap: 6px; } .expense-total { text-align: center; margin-bottom: 16px; } .expense-total small { display: block; color: var(--text-secondary); font-size: 0.8rem; margin-bottom: 4px; } .expense-total strong { font-size: 2rem; } .expense-bars { margin-bottom: 16px; } .expense-bar-row { display: grid; grid-template-columns: 70px 1fr 70px; gap: 8px; align-items: center; margin-bottom: 8px; font-size: 0.8rem; } .expense-bar { height: 6px; background: rgba(255,255,255,0.06); border-radius: 3px; overflow: hidden; } .expense-bar i { display: block; height: 100%; background: linear-gradient(90deg, var(--accent-1), var(--accent-3)); border-radius: 3px; } .expense-list { list-style: none; padding: 0; margin: 0 0 12px; max-height: 280px; overflow-y: auto; } .expense-list li { display: flex; align-items: center; gap: 10px; padding: 10px 0; border-bottom: 1px solid rgba(255,255,255,0.05); font-size: 0.9rem; } .expense-list li div { flex: 1; min-width: 0; } .expense-list li strong { display: block; } .expense-list li small { color: var(--text-secondary); font-size: 0.75rem; } .expense-amt { color: var(--accent-2); } .expense-del { background: none; border: none; color: var(--text-secondary); cursor: pointer; padding: 4px 8px; } .expense-empty { text-align: center; color: var(--text-secondary); padding: 20px !important; border: none !important; justify-content: center; } /* ===== SIM Guide ===== */ .sim-city-title { text-align: center; font-size: 1.15rem; margin-bottom: 20px; } .sim-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 16px; } .sim-card { padding: 22px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(16px); transition: transform 0.3s; } .sim-card:hover { transform: translateY(-3px); } .sim-emoji { font-size: 1.8rem; display: block; margin-bottom: 8px; } .sim-card h4 { font-size: 1.05rem; margin-bottom: 10px; } .sim-meta { display: flex; justify-content: space-between; gap: 8px; font-size: 0.85rem; margin-bottom: 10px; flex-wrap: wrap; } .sim-price { color: var(--accent-2); font-weight: 600; } .sim-card p { font-size: 0.85rem; color: var(--text-secondary); line-height: 1.45; } /* ===== About ===== */ .about-list { list-style: none; padding: 0; margin: 0; } .about-list li { padding: 8px 0; color: var(--text-secondary); line-height: 1.5; } .about-actions { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 32px; } @media (max-width: 768px) { .expense-card { grid-template-columns: 1fr; } .expense-bar-row { grid-template-columns: 60px 1fr 60px; } } /* ===== Tax Day Counter ===== */ .tax-card { padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .tax-meter { display: flex; gap: 28px; align-items: center; margin-bottom: 24px; flex-wrap: wrap; } .tax-ring { width: 140px; height: 140px; border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .tax-risk-warn { background: conic-gradient(#FFE66D var(--pct, 50%), rgba(255,255,255,0.08) 0) !important; } .tax-risk-high { background: conic-gradient(#FF6B6B var(--pct, 50%), rgba(255,255,255,0.08) 0) !important; } .tax-ring-inner { width: 110px; height: 110px; border-radius: 50%; background: var(--bg-card); display: flex; flex-direction: column; align-items: center; justify-content: center; } .tax-ring-inner strong { font-size: 1.8rem; } .tax-ring-inner small { color: var(--text-secondary); font-size: 0.75rem; } .tax-stats { flex: 1; display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; min-width: 240px; } .tax-stats > div small { display: block; font-size: 0.75rem; color: var(--text-secondary); margin-bottom: 2px; } .tax-stats > div strong { font-size: 1.2rem; } .tax-danger { color: #FF6B6B; } .tax-hint { grid-column: 1 / -1; font-size: 0.85rem; color: var(--text-secondary); margin: 4px 0 0; } .tax-form { display: flex; flex-direction: column; gap: 14px; margin-bottom: 20px; padding-top: 16px; border-top: 1px solid rgba(255,255,255,0.06); } .tax-log { list-style: none; padding: 0; margin: 0; max-height: 220px; overflow-y: auto; } .tax-log li { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.05); font-size: 0.9rem; } .tax-log li button { margin-left: auto; background: none; border: none; color: var(--text-secondary); cursor: pointer; } .tax-empty { justify-content: center; color: var(--text-secondary); border: none !important; } /* ===== Arrival Checklist ===== */ .arrival-card { padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .arrival-progress { display: flex; justify-content: space-between; align-items: center; gap: 20px; margin-bottom: 24px; flex-wrap: wrap; } .arrival-progress h3 { font-size: 1.15rem; margin-bottom: 4px; } .arrival-progress p { color: var(--text-secondary); font-size: 0.9rem; } .arrival-days { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 18px; } .arrival-day h4 { font-size: 0.95rem; color: var(--accent-3); margin-bottom: 10px; } .arrival-day ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; } /* ===== Cafe Guide ===== */ .cafe-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 16px; } .cafe-card { padding: 20px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(16px); transition: transform 0.3s; } .cafe-card:hover { transform: translateY(-3px); } .cafe-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; margin-bottom: 10px; } .cafe-top h4 { font-size: 1.05rem; } .cafe-vibe { font-size: 0.75rem; padding: 4px 8px; background: rgba(255,230,109,0.12); color: var(--accent-2); border-radius: 12px; white-space: nowrap; } .cafe-tags { display: flex; gap: 10px; flex-wrap: wrap; font-size: 0.8rem; color: var(--accent-3); margin-bottom: 8px; } .cafe-card p { font-size: 0.85rem; color: var(--text-secondary); line-height: 1.45; } /* ===== Onboarding ===== */ .onboard-card { position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%); z-index: 9200; width: min(380px, calc(100% - 32px)); padding: 20px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); box-shadow: var(--shadow-card); animation: toastIn 0.45s cubic-bezier(0.34, 1.56, 0.64, 1); text-align: center; } .onboard-skip { position: absolute; top: 10px; right: 12px; background: none; border: none; color: var(--text-secondary); cursor: pointer; font-size: 0.8rem; } .onboard-emoji { font-size: 2rem; display: block; margin-bottom: 8px; } .onboard-step strong { display: block; font-size: 1.15rem; margin-bottom: 6px; } .onboard-step p { color: var(--text-secondary); font-size: 0.9rem; margin-bottom: 14px; } .onboard-dots { display: flex; justify-content: center; gap: 6px; margin-bottom: 14px; } .onboard-dots span { width: 6px; height: 6px; border-radius: 50%; background: rgba(255,255,255,0.2); } .onboard-dots span.active { width: 18px; border-radius: 4px; background: var(--accent-3); } @media (max-width: 768px) { .tax-stats { grid-template-columns: 1fr 1fr 1fr; } .onboard-card { bottom: 90px; } } /* ===== Power Plug ===== */ .plug-card { max-width: 720px; margin: 0 auto; padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .plug-hero { display: flex; justify-content: space-between; align-items: center; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; } .plug-city { font-size: 1.3rem; font-weight: 700; } .plug-types { display: flex; gap: 8px; flex-wrap: wrap; } .plug-type { padding: 6px 12px; background: rgba(78, 205, 196, 0.12); color: var(--accent-3); border-radius: 20px; font-size: 0.85rem; font-weight: 600; } .plug-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-bottom: 16px; } .plug-grid div { padding: 14px; background: rgba(255,255,255,0.03); border-radius: var(--radius-md); } .plug-grid small { display: block; font-size: 0.75rem; color: var(--text-secondary); margin-bottom: 4px; } .plug-grid strong { font-size: 0.95rem; } .plug-tip { font-size: 0.9rem; color: var(--text-secondary); line-height: 1.5; } /* ===== Emergency ===== */ .emergency-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; } .emergency-card { display: flex; gap: 14px; padding: 18px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(16px); } .emergency-emoji { font-size: 1.8rem; } .emergency-card h4 { font-size: 0.9rem; margin-bottom: 4px; color: var(--text-secondary); } .emergency-value { font-size: 1.1rem; display: block; margin-bottom: 4px; } .emergency-card p { font-size: 0.8rem; color: var(--text-secondary); margin: 0; } .emergency-disclaimer { text-align: center; font-size: 0.75rem; color: var(--text-secondary); margin-top: 16px; } /* ===== City Notes ===== */ .notes-card { display: grid; grid-template-columns: 220px 1fr; gap: 20px; padding: 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); min-height: 360px; } .notes-sidebar { display: flex; flex-direction: column; gap: 6px; border-right: 1px solid rgba(255,255,255,0.06); padding-right: 12px; } .notes-city { display: flex; justify-content: space-between; align-items: center; padding: 10px 12px; background: transparent; border: 1px solid transparent; border-radius: var(--radius-md); color: var(--text-primary); cursor: pointer; font-size: 0.9rem; text-align: left; } .notes-city:hover, .notes-city.active { background: rgba(78, 205, 196, 0.1); border-color: rgba(78, 205, 196, 0.25); } .notes-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--accent-3); } .notes-count { margin-top: auto; font-size: 0.75rem; color: var(--text-secondary); padding: 8px 4px 0; } .notes-editor h3 { font-size: 1.15rem; margin-bottom: 12px; } .notes-textarea { width: 100%; padding: 14px; background: rgba(255,255,255,0.03); border: var(--border-glass); border-radius: var(--radius-md); color: var(--text-primary); font-size: 0.9rem; font-family: inherit; resize: vertical; line-height: 1.55; margin-bottom: 12px; } .notes-textarea:focus { outline: none; border-color: rgba(78, 205, 196, 0.45); } .notes-actions { display: flex; gap: 10px; } /* ===== Focus Timer ===== */ .focus-card { max-width: 420px; margin: 0 auto; padding: 36px 28px; text-align: center; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(20px); } .focus-ring { width: 180px; height: 180px; border-radius: 50%; margin: 0 auto 24px; display: flex; align-items: center; justify-content: center; } .focus-ring-inner { width: 148px; height: 148px; border-radius: 50%; background: var(--bg-card); display: flex; flex-direction: column; align-items: center; justify-content: center; } .focus-ring-inner strong { font-size: 2.4rem; font-variant-numeric: tabular-nums; letter-spacing: 0.02em; } .focus-ring-inner small { color: var(--text-secondary); font-size: 0.85rem; margin-top: 4px; } .focus-presets { display: flex; justify-content: center; gap: 8px; margin-bottom: 18px; } .focus-actions { display: flex; justify-content: center; gap: 10px; } .focus-done { margin-top: 14px; color: var(--accent-3); font-weight: 600; } @media (max-width: 768px) { .plug-grid { grid-template-columns: 1fr; } .notes-card { grid-template-columns: 1fr; } .notes-sidebar { flex-direction: row; flex-wrap: wrap; border-right: none; border-bottom: 1px solid rgba(255,255,255,0.06); padding-right: 0; padding-bottom: 12px; } .notes-count { width: 100%; margin-top: 4px; } } /* ===== Tools Hub ===== */ .tools-hub-page { padding: calc(var(--nav-height) + 40px) 0 80px; position: relative; z-index: 1; } .tools-hub-page .section-header h1 { font-size: clamp(1.8rem, 4vw, 2.4rem); margin: 12px 0 8px; } .tools-hub-toolbar { margin: 28px auto 32px; max-width: 900px; } .tools-hub-search { width: 100%; padding: 14px 18px; margin-bottom: 14px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-md); color: var(--text-primary); font-size: 0.95rem; } .tools-hub-search:focus { outline: none; border-color: rgba(78, 205, 196, 0.5); } .tools-hub-filters { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; } .tools-hub-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 16px; } .tools-hub-card { padding: 20px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(16px); transition: transform 0.25s, border-color 0.25s; display: flex; flex-direction: column; } .tools-hub-card:hover { transform: translateY(-4px); border-color: rgba(78, 205, 196, 0.35); } .tools-hub-emoji { font-size: 1.8rem; margin-bottom: 8px; } .tools-hub-card h3 { font-size: 1.05rem; margin-bottom: 6px; } .tools-hub-card p { font-size: 0.85rem; color: var(--text-secondary); line-height: 1.45; flex: 1; margin-bottom: 12px; } .tools-hub-go { font-size: 0.85rem; color: var(--accent-3); font-weight: 600; } .section-nav-tools { text-decoration: none; color: inherit; border: 1px dashed rgba(78, 205, 196, 0.35) !important; } /* ===== ATM Guide ===== */ .atm-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 16px; } .atm-card { padding: 22px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); backdrop-filter: blur(16px); transition: transform 0.3s; } .atm-card:hover { transform: translateY(-3px); } .atm-emoji { font-size: 1.8rem; display: block; margin-bottom: 8px; } .atm-card h4 { font-size: 1.05rem; margin-bottom: 8px; } .atm-card p { font-size: 0.85rem; color: var(--text-secondary); line-height: 1.5; } /* ===== Changelog ===== */ .changelog-list { margin: 28px 0; } .changelog-item { padding: 20px 0; border-bottom: 1px solid rgba(255,255,255,0.06); } .changelog-meta { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; } .changelog-meta time { font-size: 0.85rem; color: var(--text-secondary); } .changelog-tag { font-size: 0.75rem; padding: 3px 10px; background: rgba(78, 205, 196, 0.12); color: var(--accent-3); border-radius: 12px; font-weight: 600; } .changelog-item ul { list-style: none; padding: 0; margin: 0; } .changelog-item li { position: relative; padding: 6px 0 6px 16px; color: var(--text-secondary); line-height: 1.5; font-size: 0.95rem; } .changelog-item li::before { content: "\2022"; position: absolute; left: 0; color: var(--accent-3); } /* ===== Tools Strip ===== */ .tools-strip { padding: 12px 0 28px; position: relative; z-index: 1; } .tools-strip-inner { padding: 18px 20px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(16px); } .tools-strip-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; gap: 12px; } .tools-strip-head strong { font-size: 0.95rem; } .tools-strip-head a { font-size: 0.85rem; color: var(--accent-3); font-weight: 600; } .tools-strip-list { display: grid; grid-template-columns: repeat(8, 1fr); gap: 8px; } .tools-strip-item { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 12px 6px; background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.06); border-radius: var(--radius-md); transition: all 0.2s; text-align: center; } .tools-strip-item:hover { border-color: rgba(78, 205, 196, 0.35); background: rgba(78, 205, 196, 0.08); transform: translateY(-2px); } .tools-strip-item span { font-size: 1.3rem; } .tools-strip-item small { font-size: 0.75rem; color: var(--text-secondary); } @media (max-width: 900px) { .tools-strip-list { grid-template-columns: repeat(4, 1fr); } } @media (max-width: 480px) { .tools-strip-list { grid-template-columns: repeat(4, 1fr); } } /* ===== Runway Calculator ===== */ .runway-card { display: grid; grid-template-columns: minmax(220px, 280px) 1fr; gap: 28px; padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(16px); } .runway-pulse { animation: runwayPulse 0.45s ease; } @keyframes runwayPulse { 0% { transform: scale(1); } 50% { transform: scale(1.01); box-shadow: var(--shadow-glow); } 100% { transform: scale(1); } } .runway-meter { text-align: center; } .runway-ring { width: 168px; height: 168px; border-radius: 50%; margin: 0 auto 16px; display: grid; place-items: center; } .runway-ring-inner { width: 128px; height: 128px; border-radius: 50%; background: var(--bg-secondary); display: flex; flex-direction: column; align-items: center; justify-content: center; } .runway-ring-inner strong { font-family: var(--font-display); font-size: 2.4rem; line-height: 1; } .runway-ring-inner small { color: var(--text-muted); margin-top: 4px; } .runway-level span { font-weight: 700; font-size: 1.05rem; } .runway-level p { color: var(--text-secondary); font-size: 0.88rem; margin-top: 6px; line-height: 1.45; } .runway-form { display: flex; flex-direction: column; gap: 14px; } .runway-form > label { display: flex; flex-direction: column; gap: 6px; } .runway-form > label > span { font-size: 0.85rem; color: var(--text-secondary); } .runway-form input[type=number], .meeting-controls select { background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.1); border-radius: var(--radius-sm); color: var(--text-primary); padding: 10px 12px; font-size: 1rem; } .runway-dests small { display: block; color: var(--text-muted); margin-bottom: 8px; } .runway-dest-list { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; } .runway-dest { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; padding: 10px; background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.08); border-radius: var(--radius-md); cursor: pointer; transition: all 0.2s; text-align: left; color: inherit; } .runway-dest:hover, .runway-dest.active { border-color: rgba(78, 205, 196, 0.4); background: rgba(78, 205, 196, 0.08); } .runway-dest em { font-style: normal; font-weight: 600; font-size: 0.88rem; } .runway-dest small { color: var(--text-muted); } .runway-summary { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; padding: 12px; background: rgba(255,255,255,0.03); border-radius: var(--radius-md); } .runway-summary small { color: var(--text-muted); display: block; } .runway-summary strong { font-size: 1.1rem; } .runway-milestones { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-top: 4px; } .runway-ms { text-align: center; opacity: 0.35; transition: opacity 0.25s; } .runway-ms.on { opacity: 1; } .runway-ms i { display: block; height: 4px; border-radius: 4px; background: var(--accent-3); margin-bottom: 6px; } .runway-ms span { font-size: 0.75rem; color: var(--text-secondary); } /* ===== Meeting Window ===== */ .meeting-card { padding: 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(16px); display: flex; flex-direction: column; gap: 20px; } .meeting-controls { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 18px; } .meeting-controls label { display: flex; flex-direction: column; gap: 6px; } .meeting-controls label > span { font-size: 0.85rem; color: var(--text-secondary); } .meeting-range { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; align-items: center; } .meeting-range em { grid-column: 1 / -1; font-style: normal; font-size: 0.9rem; color: var(--accent-3); font-weight: 600; } .meeting-range input[type=range] { width: 100%; accent-color: var(--accent-3); } .meeting-score { padding: 16px 18px; border-radius: var(--radius-md); border: 1px solid; background: rgba(255,255,255,0.03); display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px 14px; } .meeting-score strong { font-family: var(--font-display); font-size: 1.8rem; } .meeting-score > span { font-weight: 700; } .meeting-score p { flex: 1 1 100%; color: var(--text-secondary); font-size: 0.92rem; margin: 0; } .meeting-legend { display: flex; flex-wrap: wrap; gap: 14px; margin-bottom: 10px; font-size: 0.8rem; color: var(--text-secondary); } .meeting-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-right: 6px; vertical-align: middle; } .meeting-legend .m-home { background: rgba(167, 139, 250, 0.7); } .meeting-legend .m-peer { background: rgba(255, 230, 109, 0.7); } .meeting-legend .m-both { background: #4ECDC4; } .meeting-bars { display: grid; grid-template-columns: repeat(24, 1fr); gap: 3px; min-height: 56px; } .meeting-cell { border-radius: 4px; background: rgba(255,255,255,0.05); position: relative; transition: transform 0.15s, background 0.15s; min-height: 48px; } .meeting-cell.home { background: rgba(167, 139, 250, 0.28); } .meeting-cell.peer { background: rgba(255, 230, 109, 0.22); } .meeting-cell.home.peer { background: rgba(78, 205, 196, 0.25); } .meeting-cell.overlap { background: linear-gradient(180deg, #4ECDC4, #3db8b0); box-shadow: 0 0 12px rgba(78, 205, 196, 0.35); } .meeting-cell:hover { transform: translateY(-2px); } .meeting-cell span { position: absolute; bottom: 4px; left: 0; right: 0; text-align: center; font-size: 0.65rem; color: var(--text-muted); } .meeting-axis { display: flex; justify-content: space-between; margin-top: 8px; font-size: 0.75rem; color: var(--text-muted); } /* Tools hub featured */ .tools-featured { margin: 8px 0 28px; padding: 18px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); } .tools-featured-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; gap: 12px; } .tools-featured-head span { font-size: 0.85rem; color: var(--accent-3); } .tools-featured-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; } .tools-featured-card { display: flex; gap: 12px; align-items: flex-start; padding: 14px; border-radius: var(--radius-md); background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.06); transition: all 0.2s; } .tools-featured-card:hover { border-color: rgba(78, 205, 196, 0.35); background: rgba(78, 205, 196, 0.08); transform: translateY(-2px); } .tools-featured-card > span { font-size: 1.5rem; line-height: 1; } .tools-featured-card h3 { font-size: 0.95rem; margin-bottom: 4px; } .tools-featured-card p { font-size: 0.8rem; color: var(--text-secondary); margin: 0; } @media (max-width: 900px) { .runway-card { grid-template-columns: 1fr; } .runway-dest-list { grid-template-columns: repeat(2, 1fr); } .meeting-controls { grid-template-columns: 1fr; } .tools-featured-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 560px) { .tools-featured-grid { grid-template-columns: 1fr; } .meeting-bars { gap: 2px; } .meeting-cell { min-height: 36px; } } /* ===== Daylight Work Hours ===== */ .daylight-card { padding: 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(16px); display: flex; flex-direction: column; gap: 20px; } .daylight-controls { display: flex; flex-direction: column; gap: 12px; } .daylight-controls label { display: flex; flex-direction: column; gap: 6px; max-width: 320px; } .daylight-controls label > span, .bag-extra > span { font-size: 0.85rem; color: var(--text-secondary); } .daylight-controls select { background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.1); border-radius: var(--radius-sm); color: var(--text-primary); padding: 10px 12px; } .daylight-months { display: flex; flex-wrap: wrap; gap: 6px; } .daylight-month { padding: 6px 10px; border-radius: 999px; border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03); color: var(--text-secondary); cursor: pointer; font-size: 0.8rem; transition: all 0.2s; } .daylight-month:hover, .daylight-month.active { color: var(--text-primary); border-color: rgba(255, 230, 109, 0.45); background: rgba(255, 230, 109, 0.12); } .daylight-sky { position: relative; height: 72px; border-radius: var(--radius-md); background: linear-gradient(90deg, #0b1224, #1a2744 40%, #2a1f3d 70%, #0b1224); overflow: hidden; border: 1px solid rgba(255,255,255,0.06); } .daylight-band { position: absolute; top: 0; bottom: 0; background: linear-gradient(180deg, rgba(255,230,109,0.45), rgba(255,107,107,0.15)); } .daylight-deep { position: absolute; top: 18px; bottom: 18px; background: rgba(78, 205, 196, 0.55); border-radius: 6px; box-shadow: 0 0 16px rgba(78, 205, 196, 0.35); } .daylight-markers { position: absolute; inset: 0; pointer-events: none; } .daylight-markers span { position: absolute; bottom: 6px; transform: translateX(-50%); font-size: 0.65rem; color: rgba(241,245,249,0.7); } .daylight-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-top: 12px; } .daylight-stats small { display: block; color: var(--text-muted); font-size: 0.75rem; } .daylight-stats strong { font-family: var(--font-display); font-size: 1.25rem; } .daylight-tips { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } .daylight-tip { display: flex; gap: 12px; padding: 14px; border-radius: var(--radius-md); background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.06); } .daylight-tip > span { font-size: 1.4rem; } .daylight-tip strong { display: block; margin-bottom: 4px; font-size: 0.95rem; } .daylight-tip p { margin: 0; color: var(--text-secondary); font-size: 0.85rem; line-height: 1.45; } /* ===== Bag Weight ===== */ .bag-card { padding: 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(16px); display: flex; flex-direction: column; gap: 18px; } .bag-gauge { height: 10px; border-radius: 999px; background: rgba(255,255,255,0.08); overflow: hidden; } .bag-gauge-fill { height: 100%; border-radius: 999px; transition: width 0.35s ease, background 0.25s; } .bag-meter-row { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin-top: 10px; } .bag-meter-row strong { font-family: var(--font-display); font-size: 1.8rem; } .bag-meter-row small { color: var(--text-muted); } .bag-status { font-weight: 700; } .bag-tip { color: var(--text-secondary); font-size: 0.9rem; margin: 6px 0 0; } .bag-limits { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; } .bag-limit { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 10px 6px; border-radius: var(--radius-md); border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03); cursor: pointer; color: inherit; transition: all 0.2s; } .bag-limit:hover, .bag-limit.active { border-color: rgba(78, 205, 196, 0.4); background: rgba(78, 205, 196, 0.1); } .bag-limit em { font-style: normal; font-size: 0.8rem; font-weight: 600; } .bag-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; } .bag-item { display: flex; align-items: center; gap: 10px; padding: 12px; border-radius: var(--radius-md); border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03); cursor: pointer; color: inherit; text-align: left; transition: all 0.2s; } .bag-item:hover { transform: translateY(-1px); } .bag-item.on { border-color: rgba(78, 205, 196, 0.4); background: rgba(78, 205, 196, 0.1); } .bag-item > span { font-size: 1.25rem; } .bag-item strong { display: block; font-size: 0.88rem; } .bag-item small { color: var(--text-muted); } .bag-item i { margin-left: auto; font-style: normal; width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; background: rgba(255,255,255,0.08); font-size: 0.75rem; } .bag-item.on i { background: var(--accent-3); color: #0a0e17; font-weight: 700; } .bag-extra { display: grid; grid-template-columns: auto 1fr auto; gap: 12px; align-items: center; } .bag-extra input[type=range] { width: 100%; accent-color: var(--accent-3); } .bag-extra em { font-style: normal; font-weight: 600; color: var(--accent-3); min-width: 3.5rem; text-align: right; } @media (max-width: 900px) { .daylight-tips { grid-template-columns: 1fr; } .daylight-stats { grid-template-columns: repeat(2, 1fr); } .bag-grid { grid-template-columns: repeat(2, 1fr); } .bag-limits { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 560px) { .bag-grid { grid-template-columns: 1fr; } .bag-extra { grid-template-columns: 1fr; } } /* ===== Visa Stay Countdown ===== */ .visa-stay-card { display: grid; grid-template-columns: minmax(220px, 280px) 1fr; gap: 28px; padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(16px); } .visa-stay-meter { text-align: center; } .visa-stay-ring { width: 168px; height: 168px; border-radius: 50%; margin: 0 auto 16px; display: grid; place-items: center; } .visa-stay-ring-inner { width: 128px; height: 128px; border-radius: 50%; background: var(--bg-secondary); display: flex; flex-direction: column; align-items: center; justify-content: center; } .visa-stay-ring-inner strong { font-family: var(--font-display); font-size: 2.6rem; line-height: 1; } .visa-stay-ring-inner small { color: var(--text-muted); margin-top: 4px; } .visa-stay-level span { font-weight: 700; font-size: 1.05rem; } .visa-stay-level p { color: var(--text-secondary); font-size: 0.88rem; margin-top: 6px; line-height: 1.45; } .visa-stay-form { display: flex; flex-direction: column; gap: 14px; } .visa-stay-form > label, .workspot-controls > label { display: flex; flex-direction: column; gap: 6px; } .visa-stay-form > label > span, .workspot-controls > label > span { font-size: 0.85rem; color: var(--text-secondary); } .visa-stay-form input, .visa-stay-form select, .workspot-controls select { background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.1); border-radius: var(--radius-sm); color: var(--text-primary); padding: 10px 12px; font-size: 1rem; } .visa-stay-hint { margin: 0; font-size: 0.85rem; color: var(--accent-3); } .visa-stay-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; padding: 12px; background: rgba(255,255,255,0.03); border-radius: var(--radius-md); } .visa-stay-stats small { display: block; color: var(--text-muted); } .visa-stay-stats strong { font-size: 1.05rem; } /* ===== Work Spot Cost ===== */ .workspot-card { display: grid; grid-template-columns: 1fr 1.1fr; gap: 22px; padding: 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(16px); } .workspot-controls { display: flex; flex-direction: column; gap: 14px; } .workspot-controls input[type=range], .visa-stay-form input[type=range] { width: 100%; accent-color: var(--accent-3); } .workspot-modes { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; } .workspot-mode { padding: 10px 8px; border-radius: var(--radius-md); border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03); color: inherit; cursor: pointer; font-weight: 600; font-size: 0.85rem; transition: all 0.2s; } .workspot-mode:hover, .workspot-mode.active { border-color: rgba(78, 205, 196, 0.4); background: rgba(78, 205, 196, 0.1); } .workspot-result { display: flex; flex-direction: column; gap: 14px; } .workspot-hero { padding: 18px; border-radius: var(--radius-md); background: linear-gradient(135deg, rgba(78,205,196,0.12), rgba(255,107,107,0.08)); border: 1px solid rgba(255,255,255,0.08); } .workspot-hero small { color: var(--text-muted); display: block; } .workspot-hero strong { font-family: var(--font-display); font-size: 2.2rem; display: block; margin: 4px 0 6px; } .workspot-hero > span { font-weight: 600; font-size: 0.92rem; } .workspot-compare { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; } .workspot-compare > div { padding: 12px; border-radius: var(--radius-md); background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.06); transition: all 0.2s; } .workspot-compare > div.on { border-color: rgba(78, 205, 196, 0.4); background: rgba(78, 205, 196, 0.1); } .workspot-compare small { display: block; color: var(--text-muted); font-size: 0.75rem; } .workspot-compare strong { display: block; margin: 4px 0; font-size: 1.05rem; } .workspot-compare em { font-style: normal; font-size: 0.75rem; color: var(--text-secondary); line-height: 1.35; } .workspot-tip { margin: 0; color: var(--text-secondary); font-size: 0.9rem; line-height: 1.45; } @media (max-width: 900px) { .visa-stay-card, .workspot-card { grid-template-columns: 1fr; } .workspot-compare { grid-template-columns: 1fr; } .visa-stay-stats { grid-template-columns: 1fr; } } /* ===== First Month Cost ===== */ .firstmonth-card { display: grid; grid-template-columns: 0.9fr 1.2fr; gap: 22px; padding: 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(16px); } .firstmonth-controls { display: flex; flex-direction: column; gap: 14px; } .firstmonth-controls > label { display: flex; flex-direction: column; gap: 6px; } .firstmonth-controls > label > span { font-size: 0.85rem; color: var(--text-secondary); } .firstmonth-controls select { background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.1); border-radius: var(--radius-sm); color: var(--text-primary); padding: 10px 12px; } .firstmonth-housing { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; } .firstmonth-chip { padding: 10px 8px; border-radius: var(--radius-md); border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03); color: inherit; cursor: pointer; font-weight: 600; font-size: 0.85rem; transition: all 0.2s; } .firstmonth-chip:hover, .firstmonth-chip.active { border-color: rgba(78, 205, 196, 0.4); background: rgba(78, 205, 196, 0.1); } .firstmonth-check { flex-direction: row !important; align-items: center; gap: 10px !important; font-size: 0.9rem; color: var(--text-secondary); } .firstmonth-total { padding: 18px; border-radius: var(--radius-md); background: linear-gradient(135deg, rgba(255,107,107,0.12), rgba(78,205,196,0.1)); border: 1px solid rgba(255,255,255,0.08); margin-bottom: 14px; } .firstmonth-total small { color: var(--text-muted); display: block; } .firstmonth-total strong { font-family: var(--font-display); font-size: 2.2rem; display: block; margin: 4px 0 6px; } .firstmonth-total span { font-size: 0.85rem; color: var(--text-secondary); } .firstmonth-bars { display: flex; flex-direction: column; gap: 10px; } .firstmonth-bar-row { display: grid; grid-template-columns: 110px 1fr 72px; gap: 10px; align-items: center; font-size: 0.88rem; } .firstmonth-bar-track { height: 8px; border-radius: 999px; background: rgba(255,255,255,0.08); overflow: hidden; } .firstmonth-bar-track i { display: block; height: 100%; border-radius: 999px; background: linear-gradient(90deg, #FF6B6B, #4ECDC4); } .firstmonth-bar-row em { font-style: normal; text-align: right; font-weight: 600; color: var(--text-secondary); } /* ===== Data Budget ===== */ .data-budget-card { padding: 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(16px); display: flex; flex-direction: column; gap: 18px; } .data-budget-gauge { height: 10px; border-radius: 999px; background: rgba(255,255,255,0.08); overflow: hidden; } .data-budget-fill { height: 100%; border-radius: 999px; background: linear-gradient(90deg, #4ECDC4, #A78BFA); transition: width 0.3s ease; } .data-budget-hero { display: flex; align-items: baseline; gap: 8px; margin-top: 10px; } .data-budget-hero strong { font-family: var(--font-display); font-size: 2.2rem; } .data-budget-hero span { color: var(--text-muted); } .data-budget-plan { margin: 6px 0 0; color: var(--text-secondary); font-size: 0.92rem; } .data-budget-plan b { color: var(--accent-3); } .data-budget-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; } .data-budget-item { display: flex; align-items: center; gap: 10px; padding: 12px; border-radius: var(--radius-md); border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03); cursor: pointer; color: inherit; text-align: left; transition: all 0.2s; } .data-budget-item:hover { transform: translateY(-1px); } .data-budget-item.on { border-color: rgba(167, 139, 250, 0.45); background: rgba(167, 139, 250, 0.12); } .data-budget-item > span { font-size: 1.25rem; } .data-budget-item strong { display: block; font-size: 0.88rem; } .data-budget-item small { color: var(--text-muted); } .data-budget-item i { margin-left: auto; font-style: normal; width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; background: rgba(255,255,255,0.08); font-size: 0.75rem; } .data-budget-item.on i { background: #A78BFA; color: #0a0e17; font-weight: 700; } .data-budget-sliders { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; } .data-budget-sliders label { display: flex; flex-direction: column; gap: 6px; font-size: 0.85rem; color: var(--text-secondary); } .data-budget-sliders input[type=range] { width: 100%; accent-color: #A78BFA; } @media (max-width: 900px) { .firstmonth-card { grid-template-columns: 1fr; } .data-budget-grid { grid-template-columns: repeat(2, 1fr); } .data-budget-sliders { grid-template-columns: 1fr; } .firstmonth-bar-row { grid-template-columns: 1fr; gap: 4px; } .firstmonth-bar-row em { text-align: left; } } @media (max-width: 560px) { .data-budget-grid { grid-template-columns: 1fr; } } /* ===== Shared kit cards (batch tools) ===== */ .kit-card { padding: 22px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(16px); display: flex; flex-direction: column; gap: 14px; } .kit-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; align-items: end; } .kit-field { display: flex; flex-direction: column; gap: 6px; } .kit-field > span { font-size: 0.85rem; color: var(--text-secondary); } .kit-field input, .kit-field select { background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.1); border-radius: var(--radius-sm); color: var(--text-primary); padding: 10px 12px; } .kit-field input[type=range] { accent-color: var(--accent-3); padding: 0; border: 0; background: transparent; } .kit-stat { text-align: right; } .kit-stat strong { font-family: var(--font-display); font-size: 1.8rem; display: block; } .kit-stat small { color: var(--text-muted); } .kit-bar { height: 8px; border-radius: 999px; background: rgba(255,255,255,0.08); overflow: hidden; } .kit-bar i { display: block; height: 100%; background: linear-gradient(90deg,#4ECDC4,#A78BFA); border-radius: 999px; } .kit-actions { display: flex; flex-wrap: wrap; gap: 8px; } .kit-grid-3 { display: grid; grid-template-columns: repeat(3,1fr); gap: 8px; } .kit-grid-3 > div, .kit-list-item { padding: 12px; border-radius: var(--radius-md); background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.06); } .kit-grid-3 small { display: block; color: var(--text-muted); font-size: 0.75rem; } .kit-grid-3 strong { font-size: 1rem; } .kit-note { margin: 0; color: var(--text-secondary); font-size: 0.9rem; line-height: 1.45; } .kit-note b { color: var(--accent-3); } .kit-chips { display: flex; flex-wrap: wrap; gap: 8px; } .kit-chips.wrap { gap: 8px; } .kit-chip { padding: 8px 12px; border-radius: 999px; border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03); color: inherit; cursor: pointer; font-size: 0.85rem; font-weight: 600; } .kit-chip:hover, .kit-chip.active { border-color: rgba(78,205,196,0.4); background: rgba(78,205,196,0.1); } .kit-hero { display: flex; gap: 14px; align-items: flex-start; padding: 14px; border-radius: var(--radius-md); background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.06); } .kit-hero > span { font-size: 2rem; line-height: 1; } .kit-hero small { color: var(--text-muted); display: block; } .kit-hero strong { display: block; font-size: 1.25rem; margin: 4px 0; } .kit-hero p { margin: 0; color: var(--text-secondary); font-size: 0.88rem; } .kit-list { display: flex; flex-direction: column; gap: 8px; } .kit-list-item { display: flex; gap: 12px; align-items: flex-start; text-align: left; } .kit-list-item > span { font-size: 1.25rem; } .kit-list-item strong { display: block; font-size: 0.92rem; } .kit-list-item small { color: var(--text-secondary); font-size: 0.8rem; } .kit-list-item.btnish { width: 100%; cursor: pointer; color: inherit; transition: all 0.2s; } .kit-list-item.btnish.on { border-color: rgba(78,205,196,0.4); background: rgba(78,205,196,0.1); } .kit-list-item i { margin-left: auto; font-style: normal; opacity: 0.7; } /* Weekend */ .weekend-card, .deposit-card { padding: 22px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); backdrop-filter: blur(16px); display: flex; flex-direction: column; gap: 16px; } .weekend-controls { display: flex; flex-direction: column; gap: 12px; } .weekend-controls label, .deposit-fields label { display: flex; flex-direction: column; gap: 6px; } .weekend-controls span, .deposit-fields span { font-size: 0.85rem; color: var(--text-secondary); } .weekend-controls select, .deposit-fields input { background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.1); border-radius: var(--radius-sm); color: var(--text-primary); padding: 10px 12px; } .weekend-energy { display: flex; flex-wrap: wrap; gap: 8px; } .weekend-chip { padding: 8px 12px; border-radius: 999px; border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03); color: inherit; cursor: pointer; font-weight: 600; font-size: 0.85rem; } .weekend-chip.active, .weekend-chip:hover { border-color: rgba(255,230,109,0.45); background: rgba(255,230,109,0.12); } .weekend-hero { display: flex; gap: 16px; padding: 18px; border-radius: var(--radius-md); background: linear-gradient(135deg, rgba(255,107,107,0.12), rgba(78,205,196,0.1)); } .weekend-emoji { font-size: 2.6rem; } .weekend-hero small { color: var(--text-muted); } .weekend-hero h3 { margin: 4px 0 8px; font-size: 1.35rem; } .weekend-hero p { margin: 0 0 6px; color: var(--text-secondary); } .weekend-hero em { font-style: normal; color: var(--accent-3); font-weight: 600; } .weekend-list { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; } .weekend-mini { padding: 8px 10px; border-radius: var(--radius-md); border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03); color: inherit; cursor: pointer; font-size: 0.8rem; } .weekend-mini.on { border-color: rgba(78,205,196,0.4); background: rgba(78,205,196,0.1); } /* Deposit */ .deposit-top { display: grid; grid-template-columns: 1.2fr 1fr; gap: 14px; } .deposit-gauge { height: 8px; border-radius: 999px; background: rgba(255,255,255,0.08); overflow: hidden; margin-bottom: 8px; } .deposit-gauge i { display: block; height: 100%; border-radius: 999px; } .deposit-meta strong { font-size: 1.6rem; margin-right: 8px; } .deposit-meta span { color: var(--text-secondary); font-size: 0.9rem; } .deposit-fields { display: grid; gap: 10px; } .deposit-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; } .deposit-item { display: flex; gap: 10px; align-items: flex-start; text-align: left; padding: 12px; border-radius: var(--radius-md); border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03); color: inherit; cursor: pointer; } .deposit-item.on { border-color: rgba(78,205,196,0.4); background: rgba(78,205,196,0.1); } .deposit-item strong { display: block; font-size: 0.88rem; } .deposit-item small { color: var(--text-secondary); font-size: 0.75rem; } .deposit-item i { margin-left: auto; font-style: normal; } .deposit-actions { display: flex; gap: 8px; flex-wrap: wrap; } @media (max-width: 900px) { .kit-row, .deposit-top, .deposit-grid, .kit-grid-3 { grid-template-columns: 1fr; } .kit-stat { text-align: left; } } /* ===== Move Plan Hub (/plan) ===== */ .plan-page { padding: 100px 0 80px; min-height: 70vh; } .plan-loading { color: var(--text-secondary); padding: 48px 0; } .plan-hero { margin-bottom: 28px; } .plan-hero p { max-width: 640px; color: var(--text-secondary); margin: 8px 0 20px; line-height: 1.6; } .plan-title-input { display: block; width: 100%; max-width: 720px; background: transparent; border: none; border-bottom: 1px solid transparent; color: var(--text-primary); font-size: clamp(1.8rem, 4vw, 2.6rem); font-weight: 700; letter-spacing: -0.02em; padding: 4px 0; margin: 8px 0 0; } .plan-title-input:focus { outline: none; border-bottom-color: var(--accent-2); } .plan-meta-row { display: flex; flex-wrap: wrap; gap: 16px; } .plan-meta-field { display: flex; flex-direction: column; gap: 6px; font-size: 0.8rem; color: var(--text-secondary); } .plan-meta-field input { min-width: 180px; padding: 10px 12px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-card); color: var(--text-primary); } .plan-stats { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; margin-bottom: 20px; } .plan-stat { padding: 16px 18px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); display: flex; flex-direction: column; gap: 6px; } .plan-stat span { font-size: 0.75rem; color: var(--text-secondary); } .plan-stat strong { font-size: 1.25rem; } .plan-warn-text { color: var(--accent-1) !important; } .plan-alert { margin-bottom: 20px; padding: 12px 16px; border-radius: var(--radius-md); border: 1px solid color-mix(in srgb, var(--accent-1) 40%, transparent); background: color-mix(in srgb, var(--accent-1) 12%, transparent); color: var(--text-primary); font-size: 0.9rem; line-height: 1.5; } .plan-layout { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(280px, 0.9fr); gap: 24px; align-items: start; } .plan-panel { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 22px 24px; margin-bottom: 20px; backdrop-filter: blur(16px); } .plan-panel h2 { font-size: 1.1rem; margin: 0; } .plan-panel-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 16px; } .plan-actions { display: flex; flex-wrap: wrap; gap: 6px; } .plan-empty { text-align: center; padding: 40px 16px; color: var(--text-secondary); } .plan-empty-icon { font-size: 2.8rem; display: block; margin-bottom: 8px; } .plan-empty .btn { margin-top: 12px; } .plan-timeline { list-style: none; margin: 0; padding: 0; } .plan-stop { display: grid; grid-template-columns: 44px 1fr; gap: 12px; } .plan-stop-rail { display: flex; flex-direction: column; align-items: center; } .plan-stop-dot { width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; background: var(--bg-secondary, rgba(255,255,255,0.06)); border: var(--border-glass); font-size: 1.2rem; flex-shrink: 0; } .plan-stop-line { width: 2px; flex: 1; min-height: 24px; background: linear-gradient(to bottom, var(--accent-2), transparent); opacity: 0.5; margin: 4px 0; } .plan-stop-body { padding-bottom: 22px; } .plan-stop-top { display: flex; justify-content: space-between; gap: 12px; align-items: flex-start; } .plan-stop-top strong a { color: var(--text-primary); text-decoration: none; } .plan-stop-top strong a:hover { color: var(--accent-2); } .plan-stop-country { font-weight: 500; color: var(--text-secondary); } .plan-stop-range { display: block; margin-top: 4px; font-size: 0.8rem; color: var(--accent-2); } .plan-stop-tools { display: flex; gap: 4px; } .plan-stop-tools button { width: 28px; height: 28px; border-radius: 8px; border: var(--border-glass); background: transparent; color: var(--text-secondary); cursor: pointer; } .plan-stop-tools button:disabled { opacity: 0.35; cursor: not-allowed; } .plan-stop-tools button:not(:disabled):hover { color: var(--text-primary); border-color: var(--accent-2); } .plan-remove:hover { color: var(--accent-1) !important; } .plan-stop-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 10px 0; font-size: 0.9rem; color: var(--text-secondary); } .plan-stop-controls input { width: 56px; margin: 0 6px; padding: 6px 8px; border-radius: 8px; border: var(--border-glass); background: transparent; color: var(--text-primary); } .plan-stop-cost { font-weight: 700; color: var(--text-primary); } .plan-stop-unit { font-size: 0.8rem; } .plan-note { width: 100%; resize: vertical; min-height: 56px; padding: 10px 12px; border-radius: var(--radius-md); border: var(--border-glass); background: transparent; color: var(--text-primary); font: inherit; line-height: 1.45; } .plan-visa { margin: 8px 0 0; font-size: 0.82rem; color: var(--text-secondary); line-height: 1.45; } .plan-visa.warn { color: var(--accent-1); } .plan-compare-wrap { overflow-x: auto; } .plan-compare { width: 100%; border-collapse: collapse; font-size: 0.88rem; } .plan-compare th, .plan-compare td { text-align: left; padding: 10px 8px; border-bottom: 1px solid color-mix(in srgb, var(--text-secondary) 20%, transparent); } .plan-compare th { color: var(--text-secondary); font-weight: 500; } .plan-ready-pill { font-size: 0.8rem; color: var(--accent-2); } .plan-ready-bar { height: 6px; border-radius: 99px; background: color-mix(in srgb, var(--text-secondary) 20%, transparent); margin-bottom: 16px; overflow: hidden; } .plan-ready-bar > div { height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--accent-1), var(--accent-2)); transition: width 0.25s ease; } .plan-check-group { margin-bottom: 14px; } .plan-check-group h3 { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-secondary); margin: 0 0 8px; } .plan-check-group ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; } .plan-check-group label { display: flex; gap: 10px; align-items: flex-start; cursor: pointer; font-size: 0.9rem; } .plan-check-group input { margin-top: 3px; accent-color: var(--accent-2); } .plan-check-group strong { display: block; font-weight: 600; } .plan-check-group small { display: block; color: var(--text-secondary); font-size: 0.75rem; margin-top: 2px; } .plan-side .btn { width: 100%; margin-top: 8px; } @media (max-width: 960px) { .plan-stats { grid-template-columns: repeat(2, 1fr); } .plan-layout { grid-template-columns: 1fr; } } @media (max-width: 520px) { .plan-stats { grid-template-columns: 1fr 1fr; } .plan-page { padding-top: 88px; } } /* ===== Compare page + modal actions ===== */ .compare-modal-actions, .compare-page-actions { display: flex; flex-wrap: wrap; gap: 10px; justify-content: flex-end; margin-top: 24px; padding-top: 16px; border-top: 1px solid color-mix(in srgb, var(--text-secondary) 18%, transparent); } .compare-page { padding: 100px 0 80px; min-height: 70vh; } .compare-page-hero { margin-bottom: 24px; } .compare-page-hero h1 { font-size: clamp(1.8rem, 4vw, 2.4rem); margin: 8px 0; } .compare-page-hero p { max-width: 560px; color: var(--text-secondary); line-height: 1.6; } .compare-pick-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; } .compare-pick-chip { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; padding: 12px; border-radius: var(--radius-lg); border: var(--border-glass); background: transparent; color: var(--text-primary); cursor: pointer; text-align: left; transition: border-color 0.2s, background 0.2s; } .compare-pick-chip span { font-size: 1.4rem; } .compare-pick-chip strong { font-size: 0.92rem; } .compare-pick-chip small { font-size: 0.75rem; color: var(--text-secondary); } .compare-pick-chip:hover { border-color: var(--accent-2); } .compare-pick-chip.on { border-color: var(--accent-2); background: color-mix(in srgb, var(--accent-2) 12%, transparent); } .compare-page-empty { margin-top: 12px; } @media (max-width: 700px) { .compare-modal-actions, .compare-page-actions { justify-content: stretch; } .compare-modal-actions .btn, .compare-page-actions .btn { flex: 1; } } /* ===== Plan cloud sync + profile hub ===== */ .plan-sync-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 0 0 16px; } .plan-sync-pill { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 999px; font-size: 0.8rem; border: var(--border-glass); color: var(--text-secondary); text-decoration: none; } .plan-sync-pill.synced { color: var(--accent-2); border-color: color-mix(in srgb, var(--accent-2) 40%, transparent); } .plan-sync-pill.syncing { color: var(--accent-3, #FFE66D); } .plan-sync-pill.offline { color: var(--accent-1); } .profile-section-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; } .profile-section-head h2 { margin: 0; } .profile-plan-meta { display: flex; flex-wrap: wrap; gap: 10px 16px; font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid color-mix(in srgb, var(--text-secondary) 18%, transparent); } .profile-trip-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; } .dest-months-pick { display: inline-flex; align-items: center; gap: 6px; font-size: 0.85rem; color: var(--text-secondary); padding: 8px 10px; border-radius: var(--radius-md); border: var(--border-glass); } .dest-months-pick input { width: 48px; padding: 4px 6px; border-radius: 6px; border: var(--border-glass); background: transparent; color: var(--text-primary); } .dest-plan-hints { margin: 12px 0 4px; display: flex; flex-direction: column; gap: 6px; } /* ===== Plan visas + ICS ===== */ .plan-alert-visa { border-color: color-mix(in srgb, #FFE66D 45%, transparent); background: color-mix(in srgb, #FFE66D 10%, transparent); } .plan-stop-visas { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; } .plan-visa-chip { font-size: 0.75rem; padding: 4px 8px; border-radius: 999px; border: var(--border-glass); color: var(--text-secondary); background: color-mix(in srgb, var(--accent-2) 8%, transparent); } .plan-visa-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; } .plan-visa-card { padding: 14px; border-radius: var(--radius-lg); border: var(--border-glass); background: color-mix(in srgb, var(--bg-card) 80%, transparent); } .plan-visa-card header { display: flex; gap: 10px; align-items: flex-start; margin-bottom: 10px; } .plan-visa-card header span { font-size: 1.5rem; } .plan-visa-card strong { display: block; font-size: 0.95rem; } .plan-visa-card small { color: var(--text-secondary); font-size: 0.75rem; } .plan-visa-card ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; font-size: 0.82rem; color: var(--text-secondary); } .plan-visa-card p { margin: 8px 0 0; font-size: 0.8rem; color: var(--accent-2); } .plan-visa-missing { margin: 12px 0 0; font-size: 0.85rem; color: var(--text-secondary); line-height: 1.5; } /* ===== Product discovery polish ===== */ .trip-hero-actions { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; margin-top: 14px; } .auth-sync-note { margin: 0 0 16px; padding: 10px 14px; border-radius: var(--radius-md); border: var(--border-glass); background: color-mix(in srgb, var(--accent-2) 10%, transparent); font-size: 0.85rem; color: var(--text-secondary); line-height: 1.5; } .auth-sync-note a { color: var(--accent-2); margin-left: 4px; } .auth-redirect-card { margin: 0 0 18px; padding: 12px 14px; border-radius: var(--radius-md); border: var(--border-glass); background: color-mix(in srgb, var(--accent-2) 8%, transparent); } .auth-redirect-merge { margin: 0 0 8px; font-size: 0.82rem; color: var(--text-secondary); line-height: 1.45; } .auth-redirect-dest { margin: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 0.88rem; color: var(--text-secondary); } .auth-redirect-badge { display: inline-flex; align-items: center; padding: 4px 10px; border-radius: 999px; background: color-mix(in srgb, var(--accent-2) 18%, transparent); color: var(--accent-2); font-weight: 600; font-size: 0.85rem; } .auth-demo-btn { width: 100%; } .tools-core-banner { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin: 0 0 28px; } .tools-core-banner-secondary { margin-top: -12px; } .tools-core-card { display: flex; gap: 12px; align-items: center; padding: 16px 18px; border-radius: var(--radius-xl); border: var(--border-glass); background: var(--bg-card); text-decoration: none; color: inherit; transition: border-color 0.2s, transform 0.2s; } .tools-core-card:hover { border-color: var(--accent-2); transform: translateY(-2px); } .tools-core-card span { font-size: 1.6rem; } .tools-core-card strong { display: block; font-size: 0.95rem; } .tools-core-card p { margin: 2px 0 0; font-size: 0.78rem; color: var(--text-secondary); } @media (max-width: 800px) { .tools-core-banner { grid-template-columns: 1fr; } } /* ===== Lang toggle + H5 polish (PWA / i18n) ===== */ .nav-lang-btn { min-width: 44px; min-height: 36px; padding: 6px 12px; border-radius: 10px; border: var(--border-glass); background: color-mix(in srgb, var(--bg-card) 80%, transparent); color: var(--text-primary); font-size: 0.8rem; font-weight: 600; cursor: pointer; transition: border-color 0.2s, background 0.2s; } .nav-lang-btn:hover { border-color: var(--accent-2); } .nav-mobile-extras { display: none; flex-direction: column; gap: 12px; margin-top: 12px; padding-top: 12px; border-top: var(--border-glass); } @media (max-width: 768px) { .nav-login-desktop, .nav-user-desktop { display: none; } .nav-mobile-extras { display: flex; } .nav-mobile-extras .nav-login-btn { text-align: center; display: block; } .nav-utils { gap: 6px; } .nav-utils .nav-lang-btn { min-width: 40px; padding: 6px 8px; } .plan-page, .compare-page, .tools-hub-page { padding-top: calc(var(--nav-height) + 16px); padding-bottom: calc(48px + env(safe-area-inset-bottom, 0px)); } .plan-panel-head { align-items: flex-start; } .plan-actions { width: 100%; } .plan-actions .btn { flex: 1 1 auto; min-height: 40px; } .plan-meta-field input { min-width: 0; width: 100%; } .plan-compare-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; } .compare-pick-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; } .compare-cards { grid-template-columns: 1fr !important; } .hero-actions, .trip-hero-actions { flex-direction: column; align-items: stretch; } .hero-actions .btn, .trip-hero-actions .btn { width: 100%; justify-content: center; } .compare-bar, .matcher-fab { bottom: calc(16px + env(safe-area-inset-bottom, 0px)) !important; } .section-nav { padding-bottom: env(safe-area-inset-bottom, 0px); } .auth-card { margin: 16px; width: auto; } } @supports (padding: max(0px)) { .navbar { padding-left: max(16px, env(safe-area-inset-left)); padding-right: max(16px, env(safe-area-inset-right)); } } /* ===== Journey path (homepage funnel) ===== */ .journey-strip { padding: 48px 0 32px; } .journey-head { margin-bottom: 28px; } .journey-rail { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; position: relative; } .journey-step { position: relative; display: flex; flex-direction: column; } .journey-connector { display: none; } .journey-card { height: 100%; padding: 20px 18px; border-radius: var(--radius-xl); border: var(--border-glass); background: var(--bg-card); display: flex; flex-direction: column; gap: 8px; transition: border-color 0.2s, transform 0.2s; } .journey-card:hover { border-color: var(--accent-2); transform: translateY(-2px); } .journey-card-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px; } .journey-n { font-size: 0.75rem; font-weight: 700; letter-spacing: 0.08em; color: var(--accent-2); } .journey-emoji { font-size: 1.5rem; } .journey-card h3 { margin: 0; font-size: 1.05rem; } .journey-card p { margin: 0; flex: 1; font-size: 0.85rem; line-height: 1.5; color: var(--text-secondary); } .journey-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; } @media (max-width: 960px) { .journey-rail { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 560px) { .journey-strip { padding: 32px 0 20px; } .journey-rail { grid-template-columns: 1fr; } } /* ===== Homepage flow (shorter scroll) ===== */ .home-flow .section-compact { padding: 64px 0; } .home-flow .section-compact .section-header { margin-bottom: 36px; } .home-flow .trip-section.section-compact { padding-bottom: 48px; } .dest-compare-hint { text-align: center; margin: -24px 0 20px; padding: 10px 16px; border-radius: var(--radius-md); border: var(--border-glass); background: color-mix(in srgb, var(--accent-2) 10%, transparent); font-size: 0.88rem; color: var(--text-secondary); } .dest-card { position: relative; } .dest-card-link { display: block; text-decoration: none; color: inherit; } .compare-check { position: absolute; top: 12px; right: 12px; z-index: 2; background: var(--bg-glass); border: var(--border-glass); border-radius: 50%; width: 36px; height: 36px; cursor: pointer; font-size: 0.85rem; display: grid; place-items: center; transition: background 0.2s, transform 0.2s; } .compare-check.on { background: var(--accent-3); color: #0a0e17; font-weight: 700; } .dest-card-actions { padding: 0 16px 16px; display: flex; gap: 8px; align-items: center; justify-content: space-between; } .dest-expand-wrap { text-align: center; margin-top: 24px; } .map-browse-link { margin-top: 12px; } .visa-plan-cta { margin-top: 8px; } .faq-plan-hint { text-align: center; margin-top: 28px; font-size: 0.9rem; color: var(--text-secondary); } .faq-plan-hint a { color: var(--accent-2); margin-left: 4px; } .compare-bar-meta { display: flex; flex-direction: column; gap: 2px; min-width: 72px; } .compare-bar-meta strong { font-size: 0.95rem; } .compare-bar-hint { font-size: 0.72rem; color: var(--text-secondary); white-space: nowrap; } @media (max-width: 768px) { .home-flow .section-compact { padding: 48px 0; } .compare-bar { left: 12px; right: 12px; bottom: calc(12px + env(safe-area-inset-bottom, 0px)); flex-wrap: wrap; justify-content: space-between; padding: 12px 14px; gap: 8px; } .compare-bar .btn { flex: 1; min-width: 0; } } /* ===== Next Stop / Meetups / Community (NomadCNA → nomadro) ===== */ .next-stop-page, .meetups-page, .community-page, .community-detail-page, .tool-runner-page { padding: 100px 0 80px; min-height: 60vh; } .next-stop-layout { display: grid; grid-template-columns: 280px 1fr; gap: 28px; align-items: start; } .next-stop-filters { display: flex; flex-direction: column; gap: 16px; position: sticky; top: 96px; } .next-stop-filter-card { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); padding: 18px; backdrop-filter: blur(16px); } .next-stop-filter-card label { display: block; font-size: 0.85rem; font-weight: 600; margin-bottom: 10px; } .next-stop-filter-card input[type="range"] { width: 100%; accent-color: var(--accent-3); } .next-stop-value { display: block; margin-top: 8px; font-size: 0.9rem; color: var(--accent-2); } .next-stop-chips { display: flex; flex-wrap: wrap; gap: 8px; } .next-stop-hero { display: flex; justify-content: space-between; gap: 24px; padding: 28px; margin-bottom: 24px; border-radius: var(--radius-xl); background: linear-gradient(135deg, rgba(78, 205, 196, 0.12), rgba(167, 139, 250, 0.12)); border: var(--border-glass); } .next-stop-badge { display: inline-block; font-size: 0.75rem; font-weight: 700; letter-spacing: 0.08em; color: var(--accent-3); margin-bottom: 8px; } .next-stop-hero h2 { font-family: var(--font-display); font-size: 1.75rem; margin-bottom: 8px; } .next-stop-hero h2 small { font-size: 1rem; color: var(--text-secondary); font-weight: 500; } .next-stop-reasons { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0 16px; } .next-stop-reason { font-size: 0.75rem; padding: 4px 10px; border-radius: 999px; background: var(--bg-glass); border: var(--border-glass); } .next-stop-hero-actions { display: flex; gap: 12px; flex-wrap: wrap; } .next-stop-score-ring { flex-shrink: 0; width: 88px; height: 88px; border-radius: 50%; display: flex; flex-direction: column; align-items: center; justify-content: center; background: var(--bg-card); border: 2px solid var(--accent-3); } .next-stop-score-ring strong { font-size: 1.5rem; line-height: 1; background: var(--gradient-text); -webkit-background-clip: text; background-clip: text; color: transparent; } .next-stop-score-ring span { font-size: 0.7rem; color: var(--text-muted); } .next-stop-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; } .next-stop-card { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); padding: 16px; transition: transform 0.2s, border-color 0.2s; } .next-stop-card:hover { transform: translateY(-3px); border-color: rgba(78, 205, 196, 0.35); } .next-stop-card-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; } .next-stop-card-head em { margin-left: auto; font-style: normal; font-weight: 700; color: var(--accent-2); } .next-stop-card-actions { display: flex; justify-content: space-between; margin-top: 12px; font-size: 0.85rem; } .next-stop-card-actions button { background: none; border: none; color: var(--accent-3); cursor: pointer; } .next-stop-routes, .next-stop-meetups { margin-top: 40px; } .next-stop-route-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 16px; margin-top: 16px; } .next-stop-route-card { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); padding: 20px; } .next-stop-route-stops { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0; } .next-stop-route-stops a { font-size: 0.85rem; padding: 4px 10px; border-radius: 999px; background: var(--bg-glass); } .next-stop-route-card footer { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; font-size: 0.85rem; color: var(--text-secondary); } .next-stop-meetups-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .next-stop-meetup-row { display: flex; flex-direction: column; gap: 10px; } .next-stop-meetup-chip { display: flex; gap: 12px; padding: 14px 16px; border-radius: var(--radius-md); background: var(--bg-card); border: var(--border-glass); } .meetups-toolbar { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 24px; } .meetups-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px; } .meetup-card { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 22px; display: flex; flex-direction: column; gap: 10px; } .meetup-card-top { display: flex; gap: 12px; } .meetup-emoji { font-size: 2rem; } .meetup-meta, .meetup-venue { font-size: 0.85rem; color: var(--text-secondary); } .meetup-tags { display: flex; flex-wrap: wrap; gap: 6px; } .meetup-tag { font-size: 0.72rem; padding: 3px 8px; border-radius: 999px; background: var(--bg-glass); } .meetup-footer { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; margin-top: auto; padding-top: 8px; font-size: 0.8rem; color: var(--text-secondary); } .meetup-city-link { font-size: 0.85rem; color: var(--accent-3); } .btn-sm { padding: 6px 14px; font-size: 0.8rem; } .btn.is-done { opacity: 0.65; } .community-banner { display: flex; justify-content: space-between; align-items: center; gap: 20px; padding: 24px 28px; margin-bottom: 28px; border-radius: var(--radius-xl); background: linear-gradient(135deg, rgba(255, 107, 107, 0.1), rgba(78, 205, 196, 0.1)); border: var(--border-glass); } .community-featured { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 24px; margin-bottom: 24px; } .community-pinned { font-size: 0.75rem; color: var(--accent-2); } .community-toolbar { margin-bottom: 20px; } .community-list { display: flex; flex-direction: column; gap: 14px; } .community-card { display: block; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); padding: 20px; transition: border-color 0.2s, transform 0.2s; } .community-card:hover { border-color: rgba(167, 139, 250, 0.35); transform: translateX(4px); } .community-card-head { display: flex; gap: 12px; margin-bottom: 8px; } .community-meta { font-size: 0.8rem; color: var(--text-muted); } .community-excerpt { color: var(--text-secondary); margin-bottom: 12px; } .community-card footer { display: flex; gap: 12px; font-size: 0.8rem; color: var(--text-muted); flex-wrap: wrap; } .community-tag { padding: 2px 8px; border-radius: 999px; background: var(--bg-glass); } .community-detail { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 32px; margin-bottom: 24px; } .community-detail-cat { font-size: 0.75rem; color: var(--accent-3); font-weight: 600; } .community-replies { margin-top: 24px; } .community-reply { background: var(--bg-glass); border: var(--border-glass); border-radius: var(--radius-md); padding: 16px; margin-bottom: 12px; } .community-reply-head { display: flex; justify-content: space-between; font-size: 0.85rem; margin-bottom: 8px; } .community-replies-preview blockquote { margin: 10px 0; padding-left: 12px; border-left: 3px solid var(--accent-3); color: var(--text-secondary); } .community-reply-hint { text-align: center; padding: 32px; color: var(--text-secondary); } .tool-runner-head { margin-bottom: 24px; } .tool-runner-head h1 { font-family: var(--font-display); font-size: 2rem; } .tool-loading { padding: 48px; text-align: center; color: var(--text-muted); } @media (max-width: 1024px) { .next-stop-layout { grid-template-columns: 1fr; } .next-stop-filters { position: static; } .next-stop-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 640px) { .next-stop-grid { grid-template-columns: 1fr; } .next-stop-hero { flex-direction: column; } .community-banner { flex-direction: column; align-items: flex-start; } } /* ===== Dating / Chat / Join / Live / Digital ===== */ .dating-page, .chat-page, .chat-thread-page, .join-page, .live-page, .digital-page { padding: 100px 0 80px; min-height: 60vh; } .dating-gate, .join-paid, .digital-gate, .live-gate { text-align: center; padding: 48px 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); max-width: 480px; margin: 0 auto; } .dating-intents { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; } .dating-quota { font-size: 0.9rem; color: var(--text-secondary); margin-bottom: 20px; } .dating-card { max-width: 420px; margin: 0 auto; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 28px; text-align: center; } .dating-card-photo { font-size: 4rem; margin-bottom: 12px; } .dating-meta { color: var(--text-secondary); font-size: 0.9rem; margin-bottom: 12px; } .dating-tags { display: flex; flex-wrap: wrap; gap: 6px; justify-content: center; margin: 16px 0; } .dating-actions { display: flex; justify-content: center; gap: 20px; margin-top: 20px; } .dating-btn { width: 56px; height: 56px; border-radius: 50%; border: var(--border-glass); background: var(--bg-glass); font-size: 1.4rem; cursor: pointer; transition: transform 0.15s; } .dating-btn:hover { transform: scale(1.08); } .dating-btn.like { border-color: rgba(255, 107, 107, 0.5); } .dating-btn.super { border-color: rgba(255, 230, 109, 0.5); } .dating-match-modal { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.6); display: flex; align-items: center; justify-content: center; z-index: 2000; padding: 24px; } .dating-match-box { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 32px; text-align: center; max-width: 360px; } .dating-match-actions { display: flex; gap: 12px; justify-content: center; margin-top: 20px; } .chat-list { display: flex; flex-direction: column; gap: 10px; } .chat-list-item { display: flex; align-items: center; gap: 14px; padding: 16px 18px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); transition: border-color 0.2s; } .chat-list-item:hover { border-color: rgba(78, 205, 196, 0.35); } .chat-list-item.unread { border-color: rgba(78, 205, 196, 0.45); } .community-compose { display: flex; flex-direction: column; gap: 12px; margin-top: 24px; padding: 20px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); } .community-compose textarea { padding: 12px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); min-height: 80px; } .gigs-page { padding: 100px 0 80px; min-height: 60vh; } .join-card select { padding: 10px 14px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); } .video-embed { position: relative; padding-bottom: 56.25%; height: 0; margin-top: 24px; border-radius: var(--radius-lg); overflow: hidden; } .video-embed iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; } .report-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; margin-top: 24px; } .report-rank { list-style: none; padding: 0; } .report-rank li { display: grid; grid-template-columns: 24px 1fr auto auto; gap: 12px; padding: 10px 0; border-bottom: var(--border-glass); align-items: center; } .member-map-grid, .member-map-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 12px; } .member-map-item { display: flex; gap: 10px; align-items: center; padding: 12px; background: var(--bg-glass); border-radius: var(--radius-md); } .weather-strip { margin-top: 32px; } .weather-cards { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 12px; } .weather-card { padding: 12px 16px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-md); min-width: 100px; } .ai-reply { margin-top: 24px; padding: 20px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); } .ai-cities { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; } .notif-toolbar { display: flex; gap: 8px; flex-wrap: wrap; } .notif-pref-row { display: flex; justify-content: space-between; align-items: center; padding: 10px 0; border-bottom: var(--border-glass); } .nav-notify-badge { position: absolute; top: -4px; right: -4px; font-size: 0.65rem; font-style: normal; background: var(--accent-1); color: #fff; border-radius: 999px; padding: 1px 5px; } .nav-notify { position: relative; } .newsletter-strip { margin-top: 48px; padding: 24px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); text-align: center; } .newsletter-form { display: flex; gap: 10px; justify-content: center; margin-top: 12px; flex-wrap: wrap; } .newsletter-form input { min-width: 220px; padding: 10px 14px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); } @media (max-width: 768px) { .report-grid { grid-template-columns: 1fr; } } .dating-likes-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 16px; margin-top: 24px; } .dating-like-card { padding: 20px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); text-align: center; } .dating-like-photo { font-size: 2.5rem; margin-bottom: 8px; } .chat-avatar { font-size: 1.75rem; } .chat-unread { margin-left: auto; font-style: normal; background: var(--accent-1); color: #fff; font-size: 0.75rem; padding: 2px 8px; border-radius: 999px; } .chat-thread-wrap { display: flex; flex-direction: column; min-height: calc(100vh - 120px); } .chat-thread-messages { flex: 1; display: flex; flex-direction: column; gap: 10px; padding: 20px 0; overflow-y: auto; } .chat-bubble { max-width: 75%; padding: 12px 16px; border-radius: var(--radius-lg); background: var(--bg-glass); border: var(--border-glass); align-self: flex-start; } .chat-bubble.mine { align-self: flex-end; background: rgba(78, 205, 196, 0.15); border-color: rgba(78, 205, 196, 0.35); } .chat-compose { display: flex; gap: 10px; padding-top: 16px; border-top: var(--border-glass); } .chat-compose input { flex: 1; padding: 12px 16px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); } .join-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; } .join-card { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 28px; display: flex; flex-direction: column; gap: 12px; } .join-card label { font-size: 0.85rem; font-weight: 600; } .join-card input, .join-card textarea { padding: 10px 14px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); } .join-card-vip { background: linear-gradient(135deg, rgba(255, 230, 109, 0.08), rgba(78, 205, 196, 0.08)); } .join-perks { list-style: none; padding: 0; margin: 0; font-size: 0.9rem; color: var(--text-secondary); } .join-perks li { margin-bottom: 8px; } .join-login-hint { font-size: 0.85rem; margin-top: 8px; } .join-paid { display: flex; flex-direction: column; gap: 16px; align-items: center; } .live-page { padding: 0; min-height: 100vh; display: flex; flex-direction: column; } .live-toolbar { display: flex; align-items: center; gap: 16px; padding: 12px 20px; background: var(--bg-card); border-bottom: var(--border-glass); flex-wrap: wrap; } .live-layout-btns { margin-left: auto; display: flex; gap: 6px; } .live-stage { flex: 1; display: grid; min-height: calc(100vh - 52px); } .live-stage.layout-split { grid-template-columns: 1fr 380px; } .live-stage.layout-video { grid-template-columns: 1fr; } .live-stage.layout-chat { grid-template-columns: 1fr; } .live-iframe { width: 100%; height: 100%; border: none; min-height: 400px; } .live-video { background: #000; } .live-chat { border-left: var(--border-glass); } .digital-hero { margin-bottom: 32px; } .digital-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 20px; } .digital-card { display: block; padding: 28px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); transition: transform 0.2s, border-color 0.2s; } .digital-card:hover { transform: translateY(-4px); border-color: rgba(167, 139, 250, 0.35); } .digital-card-vip { background: linear-gradient(135deg, rgba(255, 230, 109, 0.1), rgba(78, 205, 196, 0.1)); } .digital-card-emoji { font-size: 2.5rem; display: block; margin-bottom: 12px; } .digital-module { margin-bottom: 32px; background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 24px; } .digital-lesson-list { list-style: none; padding: 0; margin: 16px 0 0; } .digital-lesson-list li a { display: flex; justify-content: space-between; padding: 12px 0; border-bottom: var(--border-glass); font-size: 0.95rem; } .digital-lesson-meta { font-size: 0.8rem; color: var(--text-muted); } .digital-lesson { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-xl); padding: 32px; } .digital-lesson-body { margin: 24px 0; color: var(--text-secondary); line-height: 1.7; } .digital-lesson-nav { display: flex; justify-content: space-between; gap: 12px; margin-top: 32px; } .digital-jobs-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 20px; } .digital-job-card { background: var(--bg-card); border: var(--border-glass); border-radius: var(--radius-lg); padding: 22px; display: flex; flex-direction: column; gap: 8px; } .digital-job-company, .digital-job-meta { font-size: 0.85rem; color: var(--text-secondary); } .meetup-footer-actions { display: flex; gap: 8px; flex-wrap: wrap; } .meetup-live-btn { background: var(--bg-glass); color: var(--accent-3); } @media (max-width: 768px) { .join-grid { grid-template-columns: 1fr; } .live-stage.layout-split { grid-template-columns: 1fr; } .live-chat { border-left: none; border-top: var(--border-glass); min-height: 320px; } } /* -- Feature rings / progressive IA -- */ .nav-group { position: relative; } .nav-group-btn { display: inline-flex; align-items: center; gap: 4px; padding: 8px 14px; border: none; border-radius: var(--radius-sm); background: transparent; color: var(--text-secondary); font-size: 0.9rem; font-weight: 600; cursor: pointer; transition: all var(--transition); } .nav-group-btn:hover, .nav-group.open .nav-group-btn, .nav-group.is-active .nav-group-btn { color: var(--text-primary); background: var(--bg-glass); } .nav-group-caret { font-size: 0.65rem; opacity: 0.7; } .nav-group-panel { display: none; position: absolute; top: calc(100% + 8px); left: 0; min-width: 200px; padding: 8px; border-radius: var(--radius-md); background: rgba(10, 14, 23, 0.95); border: var(--border-glass); backdrop-filter: blur(16px); box-shadow: 0 12px 40px rgba(0, 0, 0, 0.35); flex-direction: column; gap: 2px; z-index: 50; } .nav-group.open .nav-group-panel { display: flex; } .nav-group-panel a { display: block; padding: 10px 12px; border-radius: var(--radius-sm); color: var(--text-secondary); font-size: 0.88rem; white-space: nowrap; } .nav-group-panel a:hover, .nav-group-panel a.active { color: var(--text-primary); background: var(--bg-glass); } [data-theme="light"] .nav-group-panel { background: rgba(248, 250, 252, 0.98); } .ring-next { margin: 48px 0 24px; padding: 28px 0 8px; border-top: 1px solid rgba(255, 255, 255, 0.06); } .ring-next-head { margin-bottom: 16px; } .ring-next-tag { display: inline-block; font-size: 0.72rem; letter-spacing: 0.12em; color: var(--accent-3, #4ecdc4); margin-bottom: 6px; } .ring-next-head h2 { font-size: 1.25rem; margin: 0; } .ring-next-grid { display: grid; gap: 12px; } .ring-next-n2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .ring-next-n3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .ring-next-card { display: flex; align-items: center; gap: 14px; padding: 16px 18px; border-radius: var(--radius-lg); border: var(--border-glass); background: var(--bg-glass); transition: transform 0.2s ease, border-color 0.2s ease; } .ring-next-card:hover { transform: translateY(-2px); border-color: rgba(78, 205, 196, 0.35); } .ring-next-emoji { font-size: 1.5rem; flex-shrink: 0; } .ring-next-card strong { display: block; font-size: 0.98rem; } .ring-next-card p { margin: 4px 0 0; font-size: 0.82rem; color: var(--text-secondary); line-height: 1.4; } .ring-next-go { margin-left: auto; opacity: 0.45; font-size: 1.1rem; } .home-ring-wrap { padding-bottom: 8px; } .journey-rail-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .footer-grid-rings { grid-template-columns: 1.4fr repeat(4, minmax(0, 1fr)); gap: 28px; } .tools-featured-grid-compact { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); } .tools-hub-more { display: flex; justify-content: center; margin: 28px 0 8px; } @media (max-width: 900px) { .nav-group-panel { position: static; display: none; min-width: 0; box-shadow: none; background: transparent; border: none; padding: 4px 0 8px 12px; backdrop-filter: none; } .nav-group.open .nav-group-panel { display: flex; } .ring-next-n2, .ring-next-n3, .journey-rail-3 { grid-template-columns: 1fr; } .footer-grid-rings { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 560px) { .footer-grid-rings { grid-template-columns: 1fr; } } .search-ring-hints { padding: 8px 4px 12px; } .search-ring-label { font-size: 0.8rem; letter-spacing: 0.06em; color: var(--text-muted); margin: 0 0 12px; } .search-ring-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; } .search-ring-chip { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; padding: 12px; border-radius: var(--radius-md); border: var(--border-glass); background: var(--bg-glass); color: var(--text-primary); cursor: pointer; text-align: left; transition: border-color 0.2s ease, transform 0.2s ease; } .search-ring-chip:hover { border-color: rgba(78, 205, 196, 0.4); transform: translateY(-1px); } .search-ring-chip span { font-size: 1.2rem; } .search-ring-chip strong { font-size: 0.85rem; font-weight: 600; } .search-hints-kbd { margin: 14px 0 0; font-size: 0.78rem; color: var(--text-muted); } @media (max-width: 640px) { .search-ring-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }