diff --git a/docker-compose.yml b/docker-compose.yml index 5935eb5..3390180 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,4 +4,4 @@ services: container_name: roncarve-web restart: unless-stopped ports: - - "127.0.0.1:8080:80" + - "127.0.0.1:8081:80" diff --git a/index.html b/index.html index ef22de8..ab87d06 100644 --- a/index.html +++ b/index.html @@ -207,57 +207,81 @@ .nav-link.active::after { opacity: 1; transform: translateX(-50%) scale(1); } .nav-actions { display: flex; align-items: center; gap: 10px; } - .theme-switch { + .preference-menu { position: relative; } + .preference-trigger { display: inline-flex; align-items: center; - gap: 3px; + gap: 8px; min-height: 38px; - padding: 3px; + padding: 0 11px; border: 1px solid var(--line); border-radius: 9px; background: rgba(255, 255, 255, .025); - transition: border-color .2s ease, background .2s ease; + color: var(--text-soft); + font: 600 12px/1 var(--mono); + cursor: pointer; + transition: border-color .2s ease, background .2s ease, color .2s ease; } - .theme-switch:hover { border-color: var(--line-strong); background: rgba(54, 228, 218, .04); } - .theme-option { - position: relative; + .preference-trigger:hover, + .preference-menu.open .preference-trigger { + border-color: var(--line-strong); + background: rgba(54, 228, 218, .06); + color: var(--text); + } + .preference-icon { display: inline-grid; place-items: center; + width: 16px; + height: 16px; + color: var(--text); + font: 500 17px/1 "Segoe UI Symbol", "Noto Sans Symbols", sans-serif; + } + .preference-icon--globe { font-size: 16px; } + .preference-chevron { color: var(--text-faint); font: 700 13px/1 var(--mono); transition: transform .2s ease; } + .preference-menu.open .preference-chevron { transform: rotate(180deg); } + .preference-popover { + position: absolute; + top: calc(100% + 10px); + right: 0; + z-index: 1100; + display: grid; + min-width: 174px; + padding: 6px; + border: 1px solid var(--line-strong); + border-radius: 10px; + background: color-mix(in srgb, var(--ink-900) 94%, transparent); + box-shadow: 0 18px 44px rgba(0, 0, 0, .2), 0 0 0 1px rgba(255, 255, 255, .035); + backdrop-filter: blur(18px) saturate(135%); + -webkit-backdrop-filter: blur(18px) saturate(135%); + opacity: 0; + pointer-events: none; + transform: translateY(-6px) scale(.98); + transform-origin: top right; + transition: opacity .18s ease, transform .18s var(--ease); + } + .preference-menu.open .preference-popover { opacity: 1; pointer-events: auto; transform: translateY(0) scale(1); } + .preference-item { + display: flex; align-items: center; - width: 30px; - height: 30px; - padding: 0; + gap: 10px; + width: 100%; + min-height: 38px; + padding: 0 10px; border: 0; - border-radius: 6px; + border-radius: 7px; background: transparent; color: var(--text-soft); + font: 600 12px/1.4 var(--mono); + text-align: left; cursor: pointer; - transition: background .2s ease, box-shadow .2s ease, transform .2s ease; + transition: color .18s ease, background .18s ease; } - .theme-option:hover { background: color-mix(in srgb, var(--cyan) 8%, transparent); transform: translateY(-1px); } - .theme-option[aria-checked="true"] { background: color-mix(in srgb, var(--cyan) 14%, transparent); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--cyan) 28%, transparent); } - .theme-option-icon { width: 13px; height: 13px; border: 1px solid var(--line-strong); border-radius: 50%; box-shadow: 0 0 10px color-mix(in srgb, var(--cyan) 16%, transparent); } - .theme-option-icon.system { background: linear-gradient(90deg, #f7fbff 0 49%, #0a1721 51% 100%); } - .theme-option-icon.light { background: #eef7ff; box-shadow: 0 0 0 2px rgba(51, 92, 255, .11), 0 0 9px rgba(74, 141, 255, .22); } - .theme-option-icon.dark { background: #07131d; box-shadow: inset -3px 0 0 #54ddea, 0 0 9px rgba(54, 228, 218, .18); } - .lang-switch { - display: inline-flex; - padding: 3px; - border: 1px solid var(--line); - border-radius: 9px; - background: rgba(255, 255, 255, .025); - } - .lang-btn { - min-width: 34px; - padding: 5px 8px; - border: 0; - border-radius: 6px; - background: transparent; - color: var(--text-faint); - font: 650 12px/1.4 var(--mono); - cursor: pointer; - } - .lang-btn.active { color: var(--ink-1000); background: var(--cyan); } + .preference-item:hover, + .preference-item[aria-checked="true"] { color: var(--text); background: color-mix(in srgb, var(--cyan) 12%, transparent); } + .preference-item[aria-checked="true"] { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--cyan) 25%, transparent); } + .preference-item-label { flex: 1; } + .preference-item-check { color: var(--cyan); opacity: 0; font-size: 13px; } + .preference-item[aria-checked="true"] .preference-item-check { opacity: 1; } .nav-cta, .button { display: inline-flex; @@ -694,12 +718,10 @@ :root[data-theme="light"] .navbar { background: rgba(250, 252, 255, .72); } :root[data-theme="light"] .navbar.scrolled { background: rgba(250, 252, 255, .93); box-shadow: 0 12px 40px rgba(35, 53, 87, .08); } - :root[data-theme="light"] .lang-switch, - :root[data-theme="light"] .theme-switch, + :root[data-theme="light"] .preference-trigger, :root[data-theme="light"] .menu-btn { background: rgba(255, 255, 255, .58); } :root[data-theme="light"] .nav-cta, - :root[data-theme="light"] .button-primary, - :root[data-theme="light"] .lang-btn.active { color: #fff; } + :root[data-theme="light"] .button-primary { color: #fff; } :root[data-theme="light"] .button-secondary { background: rgba(255, 255, 255, .58); } :root[data-theme="light"] .hero { @@ -733,6 +755,13 @@ .hero-spatial { width: min(100%, 760px); min-height: 420px; margin-left: auto; } } + /* Let desktop layouts use the available canvas on ultrawide screens. */ + @media (min-width: 1440px) { + :root { --max-width: 88vw; } + .hero-layout { gap: clamp(64px, 6vw, 132px); } + .section-header { gap: clamp(48px, 6vw, 120px); } + } + @media (max-width: 860px) { :root[data-theme="light"] .nav-links { background: rgba(250, 252, 255, .98); } } @@ -901,20 +930,38 @@ 核心优势 交付网络