* { box-sizing: border-box; } :root { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "PingFang SC", "Microsoft YaHei UI", sans-serif; color: var(--content-primary); background: var(--surface-depth); font-synthesis: none; text-rendering: geometricPrecision; } body { margin: 0; min-width: 320px; min-height: 100vh; overflow: hidden; } button { font: inherit; } button:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 3px; } .world-shell { position: relative; min-height: 100vh; overflow: hidden; isolation: isolate; background: linear-gradient(180deg, var(--surface-sky) 0%, var(--surface-horizon) 40%, var(--surface-lake) 65%, var(--surface-depth) 100%); transition: background 450ms ease, color 300ms ease; } .scene-image { position: absolute; z-index: -4; inset: 25% 0 0; background-image: linear-gradient(180deg, transparent 0%, var(--surface-depth) 100%), url('./assets/hololake-night-lake.png'); background-size: cover; background-position: center 42%; opacity: var(--primitive-scene-opacity); mix-blend-mode: screen; transition: opacity 450ms ease; } .nebula { position: absolute; z-index: -3; border-radius: 50%; filter: blur(42px); pointer-events: none; } .nebula-one { width: 58vw; height: 38vw; left: -12vw; top: -18vw; background: radial-gradient(circle, var(--primitive-nebula-a), transparent 68%); } .nebula-two { width: 48vw; height: 32vw; right: -12vw; top: 4vh; background: radial-gradient(circle, var(--primitive-nebula-b), transparent 70%); } .mist { position: absolute; z-index: -2; left: 0; right: 0; top: 38%; height: 36%; background: radial-gradient(ellipse at 50% 52%, var(--primitive-mist-a), var(--primitive-mist-b) 45%, transparent 72%); filter: blur(24px); pointer-events: none; } .stars i, .glimmers i { position: absolute; display: block; border-radius: 50%; pointer-events: none; } .stars i { width: calc(1px + (var(--star-index) % 3) * 1px); height: calc(1px + (var(--star-index) % 3) * 1px); left: calc(4% + (var(--star-index) * 5.2%)); top: calc(5% + (var(--star-index) % 5) * 5.4%); background: var(--accent-light); opacity: calc(.16 + (var(--star-index) % 4) * .09); box-shadow: 0 0 8px var(--primitive-warm-glow); animation: breathe calc(4s + (var(--star-index) % 5) * .7s) ease-in-out infinite; } .glimmers i { width: calc(2px + (var(--glimmer-index) % 3) * 2px); height: 2px; left: calc(9% + (var(--glimmer-index) * 8.1%)); top: calc(52% + (var(--glimmer-index) % 4) * 6.4%); background: var(--accent-light); box-shadow: 0 0 12px var(--primitive-cool-glow); opacity: .18; animation: glimmer calc(5s + (var(--glimmer-index) % 4) * 1.2s) ease-in-out infinite; } @keyframes breathe { 50% { opacity: .75; transform: scale(1.5); } } @keyframes glimmer { 50% { opacity: .7; transform: translateX(16px) scaleX(2.4); } } .world-header { height: 78px; display: flex; align-items: center; justify-content: space-between; padding: 0 clamp(28px, 5vw, 70px); } .world-mark { display: flex; align-items: baseline; gap: 17px; } .world-name { font-size: 21px; font-weight: 610; letter-spacing: .18em; } .world-route { color: var(--content-muted); font-size: 12px; letter-spacing: .16em; } .icon-button, .panel-close { border: 0; color: var(--content-muted); background: transparent; display: grid; place-items: center; cursor: pointer; border-radius: 50%; transition: color 180ms ease, background 180ms ease; } .icon-button { width: 42px; height: 42px; } .icon-button:hover, .panel-close:hover { color: var(--accent-light); background: var(--primitive-glass-hover); } .icon-button svg, .panel-close svg, .hero-actions svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.45; stroke-linecap: round; stroke-linejoin: round; } .home-content { min-height: calc(100vh - 156px); display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(285px, .45fr); align-items: center; gap: clamp(48px, 7vw, 112px); padding: 0 clamp(54px, 8vw, 126px) 28px; } .hero { max-width: 680px; transform: translateY(-2vh); } .route-kicker, .panel-kicker { margin: 0 0 21px; color: var(--accent-light); font-size: 11px; font-weight: 630; letter-spacing: .22em; } .hero h1 { margin: 0; max-width: 700px; color: var(--content-primary); font-size: clamp(40px, 4.15vw, 58px); font-weight: 430; line-height: 1.22; letter-spacing: -.035em; text-wrap: balance; } .hero-copy { max-width: 540px; margin: 27px 0 0; color: var(--content-muted); font-size: 14px; line-height: 1.9; letter-spacing: .035em; } .hero-actions { display: flex; align-items: center; gap: 14px; margin-top: 37px; } .primary-action, .secondary-action { min-height: 46px; border-radius: 999px; padding: 0 22px; display: inline-flex; align-items: center; justify-content: center; gap: 12px; cursor: pointer; transition: transform 180ms ease, background 180ms ease, box-shadow 180ms ease; } .primary-action { border: 0; color: var(--button-primary-text); background: var(--button-primary-bg); box-shadow: var(--button-primary-shadow); font-weight: 620; } .secondary-action { color: var(--button-secondary-text); border: 1px solid var(--button-secondary-edge); background: var(--button-secondary-bg); backdrop-filter: blur(18px); } .primary-action:hover, .secondary-action:hover { transform: translateY(-2px); } .secondary-action:hover { background: var(--primitive-glass-hover); } .status-cluster { display: grid; gap: 30px; width: min(100%, 330px); justify-self: end; } .status-item { display: grid; grid-template-columns: 10px 1fr; align-items: start; gap: 15px; padding: 5px 0; } .status-item h2 { margin: 0 0 8px; color: var(--content-secondary); font-size: 13px; font-weight: 590; letter-spacing: .06em; } .status-item p { margin: 0; color: var(--content-muted); opacity: .72; font-size: 11.5px; line-height: 1.5; letter-spacing: .04em; } .status-light { width: 6px; height: 6px; margin-top: 5px; flex: 0 0 auto; border-radius: 50%; background: var(--state-quiet); box-shadow: 0 0 14px currentColor; } .status-light.ready { color: var(--state-ready); background: currentColor; } .status-light.waiting { color: var(--state-waiting); background: currentColor; } .status-light.quiet { color: var(--state-quiet); background: currentColor; } .world-footer { height: 78px; display: flex; align-items: center; justify-content: space-between; padding: 0 clamp(28px, 5vw, 70px); color: var(--content-faint); font-size: 10.5px; letter-spacing: .09em; } .world-footer p { margin: 0; display: flex; align-items: center; gap: 13px; } .world-footer b { color: var(--accent-light); font-size: 11.5px; letter-spacing: .14em; } .trust-note i { width: 4px; height: 4px; border-radius: 50%; background: var(--accent-light); opacity: .65; } .panel-backdrop { position: fixed; z-index: 20; inset: 0; display: flex; align-items: stretch; justify-content: flex-end; background: rgba(2, 4, 9, .28); backdrop-filter: blur(5px); } .detail-panel { position: relative; width: min(500px, 92vw); height: 100%; overflow-y: auto; padding: 80px 54px 50px; color: var(--content-primary); background: var(--panel-bg); box-shadow: -26px 0 80px var(--primitive-shadow); backdrop-filter: blur(38px) saturate(115%); animation: panel-in 240ms ease-out; } @keyframes panel-in { from { transform: translateX(24px); opacity: 0; } } .panel-close { position: absolute; right: 34px; top: 30px; width: 38px; height: 38px; } .detail-panel h2 { margin: 0; max-width: 380px; font-size: 31px; font-weight: 480; line-height: 1.28; letter-spacing: -.025em; } .panel-intro { margin: 19px 0 30px; color: var(--content-muted); font-size: 13px; line-height: 1.85; } .connection-summary { display: flex; align-items: flex-start; gap: 15px; margin: 32px 0; padding: 20px 22px; border-radius: 20px; background: var(--primitive-glass); box-shadow: inset 0 1px var(--primitive-glass-top); } .connection-summary div { display: grid; gap: 6px; } .connection-summary b { color: var(--content-secondary); font-size: 13px; } .connection-summary span { color: var(--content-faint); font-size: 11.5px; } .panel-action { min-height: 46px; } .panel-message { color: var(--content-muted); font-size: 11.5px; line-height: 1.6; } .invitation-preview { max-height: 180px; overflow: auto; margin: 18px 0; padding: 17px; border-radius: 16px; color: var(--content-faint); background: rgba(0, 0, 0, .13); font: 10px/1.6 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre-wrap; word-break: break-all; } .boundary-note { margin-top: 34px; color: var(--content-faint); font-size: 10.5px; line-height: 1.75; } .receipt-list { list-style: none; display: grid; gap: 14px; margin: 30px 0 0; padding: 0; } .receipt-list li { display: grid; grid-template-columns: 34px 1fr; gap: 14px; align-items: start; padding: 16px 18px; border-radius: 17px; background: var(--primitive-glass); } .receipt-list li > span { color: var(--accent-light); font: 11px ui-monospace, monospace; } .receipt-list li div { display: grid; gap: 7px; } .receipt-list b { color: var(--content-secondary); font-size: 12px; font-weight: 580; } .receipt-list small { color: var(--content-faint); font-size: 10px; } .empty-state { min-height: 260px; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; } .empty-state i { width: 7px; height: 7px; margin-bottom: 20px; border-radius: 50%; background: var(--accent-light); box-shadow: 0 0 32px 12px var(--primitive-warm-glow); } .empty-state b { color: var(--content-secondary); font-size: 13px; font-weight: 570; } .empty-state span { max-width: 260px; margin-top: 10px; color: var(--content-faint); font-size: 11px; line-height: 1.7; } .theme-list { display: grid; gap: 9px; margin-top: 30px; } .theme-list button { width: 100%; min-height: 66px; display: grid; grid-template-columns: 40px 1fr auto; align-items: center; gap: 14px; padding: 10px 14px; border: 0; border-radius: 17px; color: var(--content-secondary); background: transparent; text-align: left; cursor: pointer; } .theme-list button:hover, .theme-list button.selected { background: var(--primitive-glass-hover); } .theme-list span { display: grid; gap: 5px; } .theme-list b { font-size: 12.5px; font-weight: 590; white-space: nowrap; } .theme-list small, .theme-list em { color: var(--content-faint); font-size: 10px; font-style: normal; } .theme-list button.selected em { color: var(--accent-light); } .theme-swatch { width: 34px; height: 34px; border-radius: 50%; box-shadow: inset 0 0 0 1px rgba(255,255,255,.18), 0 6px 18px var(--primitive-shadow); } .theme-swatch.night { background: linear-gradient(145deg, #0a1020, #04070d 70%); } .theme-swatch.dawn { background: linear-gradient(145deg, #f5f7fc, #d3e0ef 70%); } .theme-swatch.nebula { background: linear-gradient(145deg, #281b47, #080510 70%); } .theme-swatch.candle { background: linear-gradient(145deg, #4a2d13, #0a0703 70%); } .theme-swatch.clear { background: linear-gradient(145deg, #f1f5f8, #b9ccda 70%); } @media (max-width: 900px) { .home-content { grid-template-columns: 1fr; align-content: center; gap: 50px; padding-inline: 62px; } .hero { transform: none; } .status-cluster { width: 100%; grid-template-columns: repeat(3, 1fr); justify-self: stretch; gap: 26px; } } @media (max-height: 640px) { .world-header, .world-footer { height: 62px; } .home-content { min-height: calc(100vh - 124px); } .hero h1 { font-size: clamp(36px, 5vw, 56px); } .hero-copy { margin-top: 18px; } .hero-actions { margin-top: 25px; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; } }