162 lines
16 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* home.css — 产线平台主页匿名门户index.ui 未登录分支)后现代风格样式。
明暗双主题默认亮色纸上先锋html[data-theme="dark"] 暗色(霓虹暗夜)。
全部选择器以 .pl- 前缀 / --pl- 变量限定,不影响工作台页面。
注入方式header.tmpl cssfiles() 自动收集(需注册 any 权限,见 scripts/load_path.py
注意bricks 行内样式优先级高,覆盖行内值的规则一律带 !important。 */
/* ===== 主题变量 ===== */
html{
--pl-bg:#f4f3ef; --pl-bg2:#eae9e3; --pl-ink:#0a0a0f; --pl-ink-soft:rgba(10,10,15,.62);
--pl-ink-faint:rgba(10,10,15,.42); --pl-line:rgba(10,10,15,.12); --pl-line-soft:rgba(10,10,15,.07);
--pl-glass:rgba(255,255,255,.62); --pl-glass-br:rgba(10,10,15,.10);
--pl-cy:#0891b2; --pl-vi:#7c3aed; --pl-mg:#c026d3; --pl-ye:#ca8a04;
--pl-cy-soft:rgba(8,145,178,.75); --pl-hi:#f4f5fb;
--pl-header-bg:rgba(244,243,239,.72); --pl-orb-op:.20; --pl-noise-op:.05;
--pl-marquee-bg:#0a0a0f; --pl-marquee-ink:#f4f3ef;
--pl-btn-ink:#f8fafc; --pl-shadow:0 24px 60px -18px rgba(10,10,15,.25);
}
html[data-theme="dark"]{
--pl-bg:#05060a; --pl-bg2:#0a0c14; --pl-ink:#e7e9f3; --pl-ink-soft:rgba(231,233,243,.62);
--pl-ink-faint:rgba(231,233,243,.40); --pl-line:rgba(255,255,255,.14); --pl-line-soft:rgba(255,255,255,.07);
--pl-glass:rgba(255,255,255,.035); --pl-glass-br:rgba(255,255,255,.09);
--pl-cy:#22d3ee; --pl-vi:#a78bfa; --pl-mg:#d946ef; --pl-ye:#facc15;
--pl-cy-soft:rgba(103,232,249,.85); --pl-hi:#f4f5fb;
--pl-header-bg:rgba(5,6,10,.55); --pl-orb-op:.30; --pl-noise-op:.05;
--pl-marquee-bg:rgba(255,255,255,.02); --pl-marquee-ink:rgba(231,233,243,.75);
--pl-btn-ink:#05060a; --pl-shadow:0 24px 60px -18px rgba(34,211,238,.30);
}
/* ===== 页面基调 ===== */
.pl-page{background:var(--pl-bg)!important;color:var(--pl-ink)!important;font-family:"Inter","PingFang SC","Microsoft YaHei",system-ui,-apple-system,sans-serif!important}
.pl-rel{position:relative}
.pl-scroll::-webkit-scrollbar{width:8px}
.pl-scroll::-webkit-scrollbar-track{background:transparent}
.pl-scroll::-webkit-scrollbar-thumb{background:var(--pl-line);border-radius:8px}
.pl-scroll::-webkit-scrollbar-thumb:hover{background:var(--pl-cy-soft)}
/* flex 列容器子项默认 flex-shrink:1 会把内容压缩而不是溢出滚动hero 被压扁的根因) */
.pl-scroll > *{flex-shrink:0!important}
/* ===== 顶部 headersticky 吸顶) ===== */
.pl-header{position:sticky!important;top:0!important;background:var(--pl-header-bg)!important;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border-bottom:1px solid var(--pl-line-soft)!important;z-index:50;flex-shrink:0}
.pl-logo{font-size:20px!important;font-weight:900!important;letter-spacing:.02em;color:var(--pl-ink)!important;text-align:left!important;cursor:pointer}
.pl-logo-sub{font-size:10px!important;letter-spacing:.42em;color:var(--pl-cy-soft)!important;text-transform:uppercase;text-align:left!important}
.pl-nav{font-size:13px!important;color:var(--pl-ink-soft)!important;letter-spacing:.06em;cursor:pointer;transition:color .2s}
.pl-nav:hover{color:var(--pl-cy)!important}
/* ===== 按钮 ===== */
.pl-btn{background:linear-gradient(92deg,var(--pl-cy),var(--pl-vi) 55%,var(--pl-mg))!important;border:none!important;border-radius:999px!important;padding:11px 26px!important;color:var(--pl-btn-ink)!important;font-size:14px!important;font-weight:800!important;letter-spacing:.04em;cursor:pointer!important;transition:transform .2s,box-shadow .2s;box-shadow:0 0 24px -8px var(--pl-cy)}
.pl-btn:hover{transform:translateY(-2px);box-shadow:0 0 34px -6px var(--pl-mg)}
.pl-btn div{color:inherit!important;font-weight:inherit!important}
.pl-btn-ghost{background:var(--pl-glass)!important;border:1px solid var(--pl-line)!important;border-radius:999px!important;padding:11px 26px!important;color:var(--pl-ink)!important;font-size:14px!important;font-weight:600!important;letter-spacing:.04em;cursor:pointer!important;backdrop-filter:blur(8px);transition:border-color .2s,transform .2s,box-shadow .2s}
.pl-btn-ghost:hover{border-color:var(--pl-cy-soft)!important;transform:translateY(-2px);box-shadow:0 0 22px -8px var(--pl-cy)}
.pl-btn-ghost div{color:inherit!important}
.pl-btn-sm{padding:7px 18px!important;font-size:12.5px!important}
/* ===== Hero ===== */
.pl-hero{position:relative!important;overflow:hidden!important;background:var(--pl-bg)!important;padding:clamp(56px,9vw,120px) clamp(20px,6vw,90px) clamp(48px,7vw,90px)!important}
.pl-hero-deco{position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;pointer-events:none!important;z-index:0}
.pl-grid{position:absolute!important;top:0;bottom:0;left:0;right:0;background-image:linear-gradient(var(--pl-line-soft) 1px,transparent 1px),linear-gradient(90deg,var(--pl-line-soft) 1px,transparent 1px);background-size:56px 56px;-webkit-mask-image:radial-gradient(ellipse 90% 70% at 50% 35%,#000 35%,transparent 100%);mask-image:radial-gradient(ellipse 90% 70% at 50% 35%,#000 35%,transparent 100%)}
.pl-noise{position:absolute!important;top:0;bottom:0;left:0;right:0;opacity:var(--pl-noise-op);mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
.pl-orb{position:absolute!important;border-radius:50%;filter:blur(90px);pointer-events:none;opacity:var(--pl-orb-op)}
.pl-orb-1{width:480px;height:480px;background:var(--pl-cy);top:-150px;left:-110px;animation:pl-drift1 19s ease-in-out infinite alternate}
.pl-orb-2{width:430px;height:430px;background:var(--pl-mg);top:4%;right:-130px;animation:pl-drift2 24s ease-in-out infinite alternate}
.pl-orb-3{width:320px;height:320px;background:var(--pl-ye);bottom:-130px;left:34%;opacity:calc(var(--pl-orb-op) * .45);animation:pl-drift1 28s ease-in-out infinite alternate-reverse}
@keyframes pl-drift1{from{transform:translate(0,0) scale(1)}to{transform:translate(70px,50px) scale(1.14)}}
@keyframes pl-drift2{from{transform:translate(0,0) scale(1.06)}to{transform:translate(-80px,60px) scale(.92)}}
.pl-hero-content{position:relative;z-index:1}
.pl-badge{border:1px solid var(--pl-cy-soft)!important;border-radius:999px!important;padding:6px 16px!important;color:var(--pl-cy)!important;font-size:11.5px!important;letter-spacing:.26em!important;text-transform:uppercase;background:var(--pl-glass)!important}
.pl-h1{font-size:clamp(2.6rem,7.4vw,5.4rem)!important;font-weight:900!important;line-height:1.06!important;letter-spacing:-.02em;text-align:left!important;color:var(--pl-ink)!important}
.pl-stroke{color:transparent!important;-webkit-text-stroke:1.4px var(--pl-ink-faint)}
.pl-grad{background:linear-gradient(92deg,var(--pl-cy),var(--pl-vi),var(--pl-mg),var(--pl-ye),var(--pl-cy));background-size:300% 100%;-webkit-background-clip:text;background-clip:text;color:transparent!important;animation:pl-hue 9s linear infinite}
@keyframes pl-hue{to{background-position:300% 0}}
.pl-sub{font-size:clamp(14px,1.6vw,17px)!important;color:var(--pl-ink-soft)!important;line-height:1.8!important;text-align:left!important;max-width:640px}
.pl-stat-n{font-size:30px!important;font-weight:900!important;color:var(--pl-ink)!important;text-align:left!important;font-variant-numeric:tabular-nums}
.pl-stat-t{font-size:12px!important;color:var(--pl-ink-faint)!important;letter-spacing:.12em;text-align:left!important}
/* 入场动画stagger */
.pl-rise{animation:pl-rise .9s cubic-bezier(.2,.7,.2,1) both}
.pl-d1{animation-delay:.05s}.pl-d2{animation-delay:.15s}.pl-d3{animation-delay:.28s}.pl-d4{animation-delay:.42s}.pl-d5{animation-delay:.56s}
@keyframes pl-rise{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:translateY(0)}}
/* ===== 跑马灯带 ===== */
.pl-marquee{overflow:hidden!important;white-space:nowrap!important;border-top:1px solid var(--pl-line-soft)!important;border-bottom:1px solid var(--pl-line-soft)!important;background:var(--pl-marquee-bg)!important;padding:14px 0!important}
.pl-mq-track{display:flex!important;flex-wrap:nowrap!important;width:max-content!important;animation:pl-mq 36s linear infinite;will-change:transform}
.pl-mq-track:hover{animation-play-state:paused}
.pl-mq-item{font-size:14px!important;font-weight:700!important;letter-spacing:.14em;color:var(--pl-marquee-ink)!important;text-align:left!important;white-space:nowrap!important;padding:0 18px!important}
.pl-mq-item::after{content:"✦";margin-left:36px;color:var(--pl-cy);opacity:.9}
@keyframes pl-mq{from{transform:translateX(0)}to{transform:translateX(-50%)}}
/* ===== 区块 ===== */
.pl-sec{position:relative!important;padding:84px clamp(20px,6vw,90px)!important;background:var(--pl-bg)!important}
.pl-kicker{font-size:11.5px!important;letter-spacing:.34em!important;color:var(--pl-cy)!important;text-transform:uppercase;text-align:left!important;font-family:ui-monospace,"SF Mono",Consolas,monospace}
.pl-h2{font-size:clamp(1.9rem,4.2vw,3rem)!important;font-weight:900!important;letter-spacing:-.01em;color:var(--pl-ink)!important;text-align:left!important;line-height:1.15!important}
.pl-sec-sub{font-size:15px!important;color:var(--pl-ink-soft)!important;text-align:left!important;line-height:1.7!important;max-width:620px}
/* ===== Bento 玻璃卡片 ===== */
.pl-card{position:relative!important;overflow:hidden!important;background:var(--pl-glass)!important;border:1px solid var(--pl-glass-br)!important;border-radius:22px!important;padding:26px!important;min-height:190px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .28s,box-shadow .28s}
.pl-card::before{content:"";position:absolute;top:0;left:0;right:0;height:120px;background:radial-gradient(420px 160px at 20% 0%,color-mix(in srgb,var(--pl-cy) 14%,transparent),transparent 70%);opacity:0;transition:opacity .3s;pointer-events:none}
.pl-card:hover{transform:translateY(-6px);border-color:var(--pl-cy-soft)!important;box-shadow:var(--pl-shadow)}
.pl-card:hover::before{opacity:1}
.pl-card-icon{font-size:30px!important;text-align:left!important;filter:saturate(1.25)}
.pl-card-t{font-size:17.5px!important;font-weight:800!important;color:var(--pl-ink)!important;text-align:left!important;letter-spacing:.01em}
.pl-card-d{font-size:13px!important;color:var(--pl-ink-soft)!important;text-align:left!important;line-height:1.75!important}
.pl-card-tag{align-self:flex-start;border:1px solid var(--pl-glass-br)!important;border-radius:999px!important;padding:3px 12px!important;font-size:10.5px!important;letter-spacing:.18em!important;color:var(--pl-mg)!important;text-transform:uppercase;font-family:ui-monospace,"SF Mono",Consolas,monospace}
.pl-card-lg{background:linear-gradient(135deg,color-mix(in srgb,var(--pl-cy) 9%,var(--pl-glass)),color-mix(in srgb,var(--pl-mg) 8%,var(--pl-glass)) 55%,color-mix(in srgb,var(--pl-ye) 5%,var(--pl-glass)))!important;border:1px solid color-mix(in srgb,var(--pl-vi) 32%,transparent)!important}
.pl-card-lg .pl-card-t{font-size:22px!important}
/* ===== 产线行 ===== */
.pl-step{position:relative!important;background:var(--pl-glass)!important;border:1px solid var(--pl-glass-br)!important;border-radius:20px!important;padding:24px 26px!important;transition:border-color .25s,transform .25s;backdrop-filter:blur(10px)}
.pl-step:hover{border-color:color-mix(in srgb,var(--pl-ye) 45%,transparent)!important;transform:translateY(-3px)}
.pl-step-n{font-size:42px!important;font-weight:900!important;color:transparent!important;-webkit-text-stroke:1.2px var(--pl-ink-faint);text-align:left!important;line-height:1!important;font-variant-numeric:tabular-nums;font-family:ui-monospace,"SF Mono",Consolas,monospace}
.pl-step-t{font-size:16.5px!important;font-weight:800!important;color:var(--pl-ink)!important;text-align:left!important}
.pl-step-d{font-size:12.5px!important;color:var(--pl-ink-soft)!important;text-align:left!important;line-height:1.7!important}
.pl-tag{align-self:center;border-radius:999px!important;padding:4px 14px!important;font-size:11px!important;letter-spacing:.14em!important;white-space:nowrap!important;text-align:center!important}
.pl-tag-live{background:color-mix(in srgb,#22c55e 16%,transparent)!important;border:1px solid rgba(34,197,94,.45)!important;color:#16a34a!important}
html[data-theme="dark"] .pl-tag-live{color:#4ade80!important}
.pl-tag-soon{background:var(--pl-glass)!important;border:1px solid var(--pl-line)!important;color:var(--pl-ink-faint)!important}
/* ===== CTA / Footer ===== */
.pl-cta{position:relative!important;overflow:hidden!important;margin:0 clamp(20px,6vw,90px) 84px!important;border-radius:28px!important;background:linear-gradient(120deg,color-mix(in srgb,var(--pl-cy) 13%,var(--pl-bg)),color-mix(in srgb,var(--pl-vi) 13%,var(--pl-bg)) 50%,color-mix(in srgb,var(--pl-mg) 13%,var(--pl-bg)))!important;border:1px solid color-mix(in srgb,var(--pl-vi) 30%,transparent)!important;padding:64px 40px!important}
.pl-cta-t{font-size:clamp(1.8rem,4vw,2.8rem)!important;font-weight:900!important;color:var(--pl-ink)!important;letter-spacing:-.01em;text-align:center!important}
.pl-cta-d{font-size:15px!important;color:var(--pl-ink-soft)!important;text-align:center!important}
.pl-footer{border-top:1px solid var(--pl-line-soft)!important;padding:26px clamp(20px,6vw,90px)!important;background:var(--pl-bg2)!important}
.pl-footer-t{font-size:12px!important;color:var(--pl-ink-faint)!important;letter-spacing:.08em;text-align:left!important}
/* ===== 响应式 ===== */
/* 窄桌面/平板横屏761-900px2026-09-17 实测 780 窗口header 预算紧,
logo 与登录按钮曾各折两行。缩 logo 字号+按钮禁折行即够(实测余量 ~35px。 */
@media (min-width:761px) and (max-width:900px){
.pl-header{padding:0 16px!important;gap:10px!important}
.pl-logo{font-size:17px!important;white-space:nowrap!important}
.pl-logo-sub{font-size:9px!important}
.pl-btn-sm{white-space:nowrap!important}
}
@media (max-width:760px){
.pl-sec{padding:56px 20px!important}
.pl-cta{margin:0 16px 56px!important;padding:44px 22px!important}
.pl-card{min-height:0;padding:20px!important}
.pl-orb{filter:blur(70px)}
.pl-step{padding:18px!important}
/* header 手机两行2026-09-17 实测 390px行1=logo+登录行2=三锚点+主题+语言。
单行预算不够jp 登录文案最宽),且 bricks Text 是 flex 容器 min-width:auto 不缩
→ logo 文字曾溢出叠到主题按钮上。两行后预算充足ellipsis 仅作极端字体兜底。
.pl-logo-box 为生成器加的 logo VBox class语言切换=header 第 7 个子urlwidget。 */
.pl-header{flex-wrap:wrap!important;padding:8px 12px!important;gap:6px!important}
.pl-header > *{flex-shrink:0!important}
.pl-header > .filler{display:none!important}
.pl-logo-box{order:1;flex:1 1 auto;min-width:0!important}
.pl-logo-box > *{min-width:0!important;max-width:100%!important}
.pl-btn-sm{order:2;white-space:nowrap!important;padding:7px 14px!important;font-size:12px!important}
/* 行2 预算实测en 导航 12px 时 200px+主题60+语言80+gap32=372>366 折第三行;
11px 导航(184)+gap24=348 ≤ 366留 18px 余量 */
.pl-nav{order:3;font-size:11px!important}
.theme-icon-btn{order:4;margin-left:auto}
.pl-header > *:nth-child(7){order:5}
.pl-logo{font-size:15px!important;white-space:nowrap!important;overflow:hidden;text-overflow:ellipsis}
.pl-logo-sub{font-size:9px!important}
/* footer 竖排:版权行 381px+左padding 曾顶出 404px 造成 .pl-scroll 横向滚动 */
.pl-footer{flex-direction:column!important;align-items:flex-start!important;gap:6px!important;padding:20px 16px!important}
.pl-footer-t{width:100%!important;word-break:break-word!important}
}