@tailwind base; @tailwind components; @tailwind utilities; :root { color-scheme: dark; font-family: 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; line-height: 1.5; font-weight: 400; font-synthesis: none; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; --bg-primary: #000000; --bg-secondary: rgba(7, 15, 30, 0.72); --border-soft: rgba(148, 163, 184, 0.24); --text-primary: #e2e8f0; --text-secondary: #94a3b8; --accent: #38bdf8; --accent-strong: #22d3ee; --shadow-soft: 0 24px 80px rgba(2, 6, 23, 0.52); } * { box-sizing: border-box; } html, body, #app { width: 100%; min-height: 100%; margin: 0; } body { min-height: 100vh; background: #000000; color: var(--text-primary); } button, input, select, textarea { font: inherit; } a { color: inherit; text-decoration: none; } canvas { display: block; } .travel-page { position: relative; min-height: 100vh; overflow: hidden; background: #000000; } .scene-layer { position: absolute; inset: 0; } .scene-layer canvas { width: 100%; height: 100%; } .scene-vignette { position: absolute; inset: 0; background: radial-gradient(circle at center, transparent 30%, rgba(0, 0, 0, 0.4) 70%, rgba(0, 0, 0, 0.9) 100%); pointer-events: none; z-index: 1; } .start-overlay { position: relative; z-index: 2; position: relative; display: flex; min-height: 100vh; align-items: center; justify-content: center; padding: 24px; } .hero-card { width: min(640px, 100%); border: 1px solid var(--border-soft); border-radius: 32px; background: linear-gradient(180deg, rgba(9, 16, 34, 0.8), rgba(8, 15, 29, 0.62)), rgba(7, 15, 30, 0.6); backdrop-filter: blur(22px); box-shadow: var(--shadow-soft); padding: 40px; text-align: center; } .hero-kicker { margin: 0 0 12px; color: var(--accent-strong); font-size: 12px; font-weight: 600; letter-spacing: 0.28em; text-transform: uppercase; } .hero-title { margin: 0; font-size: clamp(42px, 8vw, 72px); line-height: 0.95; letter-spacing: -0.04em; } .hero-description { margin: 18px auto 0; max-width: 34rem; color: var(--text-secondary); font-size: 16px; } .start-button { min-width: 220px; margin-top: 28px; border: 1px solid rgba(125, 211, 252, 0.45); border-radius: 999px; background: linear-gradient(135deg, rgba(34, 211, 238, 0.92), rgba(59, 130, 246, 0.88)); box-shadow: 0 18px 48px rgba(14, 165, 233, 0.24); color: #e0f2fe; cursor: pointer; font-size: 16px; font-weight: 700; padding: 15px 26px; transition: transform 160ms ease, box-shadow 160ms ease, opacity 160ms ease; } .start-button:hover:not(:disabled) { box-shadow: 0 22px 52px rgba(14, 165, 233, 0.32); transform: translateY(-1px); } .start-button:disabled { cursor: progress; opacity: 0.72; } .error-text { margin: 14px 0 0; font-size: 13px; } .error-text { color: #fda4af; } .hud-layer { position: absolute; inset: 0; z-index: 3; pointer-events: none; } .hud-layer--active { pointer-events: none; } .hud-bottom-container { position: absolute; left: 50%; bottom: 28px; width: min(860px, calc(100% - 24px)); transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: 16px; } .glass-toolbar { display: flex; align-items: center; gap: 18px; width: 100%; padding: 18px; border: 1px solid rgba(148, 163, 184, 0.22); border-radius: 28px; background: linear-gradient(180deg, rgba(15, 23, 42, 0.25), rgba(15, 23, 42, 0.15)); backdrop-filter: blur(16px) saturate(300%) brightness(1.6); -webkit-backdrop-filter: blur(16px) saturate(300%) brightness(1.6); box-shadow: 0 18px 56px rgba(2, 6, 23, 0.48); pointer-events: auto; } .footer-credit { font-size: 12px; color: rgba(226, 232, 240, 0.5); pointer-events: auto; } .footer-credit a { color: rgba(226, 232, 240, 0.8); text-decoration: none; font-weight: 500; transition: text-decoration 160ms ease; } .footer-credit a:hover { text-decoration: underline; } .toolbar-group { display: flex; min-width: 0; flex-direction: column; gap: 10px; } .toolbar-group--stretch { flex: 1; } .toolbar-group--compact { flex: 0 0 190px; } .toolbar-label { color: rgba(226, 232, 240, 0.82); font-size: 12px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; } .segment-control { display: inline-flex; align-items: center; height: 46px; padding: 4px; border: 1px solid rgba(148, 163, 184, 0.16); border-radius: 999px; background: rgba(2, 6, 23, 0.34); transition: border-color 160ms ease, background 160ms ease; } .segment-control:hover { border-color: rgba(125, 211, 252, 0.32); background: rgba(15, 23, 42, 0.56); } .segment-button { border: 0; border-radius: 999px; background: transparent; color: rgba(226, 232, 240, 0.78); cursor: pointer; height: 100%; display: inline-flex; align-items: center; justify-content: center; padding: 0 16px; transition: background 160ms ease, color 160ms ease; } .segment-button--active { background: rgba(255, 255, 255, 0.1); color: #f8fafc; } .toolbar-action { height: 46px; min-height: 46px; border: 1px solid rgba(148, 163, 184, 0.18); border-radius: 999px; background: rgba(2, 6, 23, 0.36); color: var(--text-primary); cursor: pointer; padding: 0 16px; display: inline-flex; align-items: center; justify-content: center; transition: border-color 160ms ease, background 160ms ease, color 160ms ease, opacity 160ms ease; } .toolbar-action:hover:not(:disabled) { border-color: rgba(125, 211, 252, 0.32); background: rgba(15, 23, 42, 0.56); } .toolbar-action--active { border-color: rgba(56, 189, 248, 0.28); background: rgba(56, 189, 248, 0.14); color: #f8fafc; } .toolbar-action:disabled { cursor: not-allowed; opacity: 0.52; } .glass-select, .glass-range, .toolbar-action { width: 100%; } .glass-select { border: 1px solid rgba(148, 163, 184, 0.18); border-radius: 999px; background-color: rgba(2, 6, 23, 0.36); background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgba(226, 232, 240, 0.82)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right 14px center; background-size: 16px; -webkit-appearance: none; appearance: none; color: var(--text-primary); height: 46px; min-height: 46px; outline: none; padding: 0 36px 0 16px; transition: border-color 160ms ease, background-color 160ms ease; } .glass-select:hover { border-color: rgba(125, 211, 252, 0.32); background-color: rgba(15, 23, 42, 0.56); } .range-wrapper { position: relative; display: flex; align-items: center; justify-content: center; width: 100%; height: 46px; border: 1px solid rgba(148, 163, 184, 0.18); border-radius: 999px; background: linear-gradient(to right, rgba(255, 255, 255, 0.1) var(--volume-percent, 0%), rgba(2, 6, 23, 0.36) var(--volume-percent, 0%)); background-clip: padding-box; transition: border-color 160ms ease; overflow: hidden; } .range-wrapper:hover { border-color: rgba(125, 211, 252, 0.32); } .range-value { position: absolute; pointer-events: none; font-size: 14px; color: rgba(226, 232, 240, 0.9); font-weight: 500; z-index: 1; } .glass-range { -webkit-appearance: none; appearance: none; position: absolute; inset: 0; width: 100%; height: 100%; border: none; background: transparent; outline: none; cursor: pointer; margin: 0; padding: 0; } .glass-range::-webkit-slider-runnable-track { width: 100%; height: 100%; background: transparent; border: none; } .glass-range::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 0; height: 0; opacity: 0; border: none; background: transparent; } .glass-range::-moz-range-track { width: 100%; height: 100%; background: transparent; border: none; } .glass-range::-moz-range-thumb { width: 0; height: 0; opacity: 0; border: none; background: transparent; } .overlay-fade-enter-active, .overlay-fade-leave-active, .controls-fade-enter-active, .controls-fade-leave-active { transition: opacity 320ms ease, transform 320ms ease; } .overlay-fade-enter-from, .overlay-fade-leave-to { opacity: 0; transform: scale(0.98); } .controls-fade-enter-from, .controls-fade-leave-to { opacity: 0; transform: translate(-50%, 12px); } @media (max-width: 768px) { .start-overlay { padding: 16px; } .hero-card { border-radius: 28px; padding: 32px 20px 24px; } .hero-title { font-size: clamp(36px, 12vw, 54px); } .hero-description { font-size: 15px; } .hud-bottom-container { bottom: 16px; width: min(520px, calc(100% - 16px)); gap: 12px; } .glass-toolbar { flex-direction: column; align-items: stretch; gap: 14px; border-radius: 24px; padding: 20px; } .segment-control { width: 100%; } .segment-button { flex: 1; } .toolbar-group--stretch { flex: none; } .toolbar-group--compact { flex: none; } }