diff --git a/apps/waterfall-wiki/src/components/LandingSketches.tsx b/apps/waterfall-wiki/src/components/LandingSketches.tsx new file mode 100644 index 0000000..1f87fa9 --- /dev/null +++ b/apps/waterfall-wiki/src/components/LandingSketches.tsx @@ -0,0 +1,25 @@ +type Pose = "idea" | "read" | "make" | "collect" | "dream"; + +/** Original theme-aware line drawings, independent of the fixed brand mark. */ +export function CreatorSketch({ pose }: { pose: Pose }) { + return ; +} + +export function IdeaSketch({ kind }: { kind: "collect" | "connect" | "read" | "make" }) { + return ; +} diff --git a/apps/waterfall-wiki/src/pages/index.tsx b/apps/waterfall-wiki/src/pages/index.tsx index 433c3c0..704ede6 100644 --- a/apps/waterfall-wiki/src/pages/index.tsx +++ b/apps/waterfall-wiki/src/pages/index.tsx @@ -1,12 +1,22 @@ import { ThemeToggle } from "../components/ThemeToggle"; import { Brand } from "../components/Brand"; import Head from 'next/head'; -import {ArrowUpRight, MousePointer2, Plus, Type, Image, Sparkles, Workflow, Layers, ArrowRight} from 'lucide-react'; +import {ArrowUpRight, Workflow, Layers, ArrowRight} from 'lucide-react'; +import {CreatorSketch, IdeaSketch} from "@/components/LandingSketches"; import s from '@/styles/landing.module.css'; export default function Home(){return
-啡跃 啡跃 Endoleap · 让灵感,有形。 - -

A SPACE FOR HUMAN IDEAS & AGENTS

想法不该停在对话里。
让灵感,有形。

从一闪而过的念头,到值得分享的作品。
连接你的 coding agent,在一张画布上,把创作继续下去。

开始创作 探索你的创作空间 ↓
日常的另一种可能 / 创意探索本机草稿
01 / THE IDEA

把日常,
拍成一场电影。

自然光、细腻颗粒,
让每一帧都有呼吸感。

02 / VISUAL STUDY

光的形状

LIGHT / SPACE / EMOTION
03 / PROMPT

留住清晨的光。

窗边的植物,安静的房间。
35mm 胶片,缓慢推进。

一个创作场景示意。你的想法、素材与工具,在这里相遇。

+啡跃 Endoleap · 让灵感,有形。 + +

A SPACE FOR HUMAN IDEAS & AGENTS

想法不该停在对话里。
让灵感,有形。

从一闪而过的念头,到值得分享的作品。
连接你的 coding agent,在一张画布上,把创作继续下去。

开始创作 探索你的创作空间 ↓
每一种好奇,都有自己的起点。{([ + ['collect','收藏生活的切片'],['read','遇见新的工作方法'],['idea','记下突然出现的灵感'],['dream','给想法一点自由'],['make','做一件属于你的作品'] +] as const).map(([pose,label])=>
{label}
)}
+

MAKE ROOM FOR WHAT COMES NEXT

给好奇心一点空间,
让下一步自然发生。

{([ + ['collect','留住一闪而过','一句念头、一张参考图、一个还没想好的方向。先留下,再慢慢展开。'], + ['connect','让线索相遇','把笔记、图片和提示词放上画布,用连接看见它们之间的新可能。'], + ['read','找到有用的方法','阅读可独立使用的知识文档,需要更多背景时,沿链接继续探索。'], + ['make','把创作继续下去','用熟悉的 coding agent 探索,再亲手调整细节,让想法成为自己的作品。'] +] as const).map(([kind,title,copy])=>

{title}

{copy}

)}

TWO TOOLS. ONE CREATIVE FLOW.

给不同的想法,
恰好的空间。

01 / GRAPHIC

把灵感排成作品。

文字、图形与图片自由编排。精确调整图层和位置,把设计导出为 SVG。

MAKE
ROOM
for ideas.
✳
打开图形编辑器
02 / INFINITE CANVAS

让思路,自由生长。

把笔记、参考图与提示词连成线索。在无限画布上平移、缩放,整理下一次创作。

一个念头⟶一张参考⟶新的可能
打开无限画布
+

GOOD IDEAS DESERVE GOOD COMPANY

不必每一次,
都从空白开始。

把有用的工作方法,留给下一次的自己。
一篇文档讲清一件事,需要时再沿着链接走远一点。

去知识空间逛逛

YOUR AGENT. YOUR WORKFLOW.

用熟悉的 Agent,
继续你的创作。

通过项目已有的 API 与文档,让 coding agent 理解模板和创作内容。画布负责呈现,你来决定下一步。

查看 Agent 接入文档
  1. 01

    找到起点

    从空白设计、素材或一段灵感出发。

  2. 02

    连接工作方式

    将接入文档交给你的 coding agent。

  3. 03

    亲手打磨,保存作品

    在编辑器中调整细节,导出并保留备份。

-

下一件作品,
从这里开始。

进入你的工作台
} +

YOUR NEXT IDEA STARTS HERE

给下一个念头,
留一个起点。

不用想好全部。带着一点好奇,先开始。

进入你的工作台 或先读一篇有用的文档 ↗
} diff --git a/apps/waterfall-wiki/src/styles/landing.module.css b/apps/waterfall-wiki/src/styles/landing.module.css index 7f30a68..ce9a23e 100644 --- a/apps/waterfall-wiki/src/styles/landing.module.css +++ b/apps/waterfall-wiki/src/styles/landing.module.css @@ -1,7 +1,15 @@ -.page{background:var(--selection);color:var(--foreground-strong);font-family:Arial,'PingFang SC',sans-serif}.page *{box-sizing:border-box}.page a{text-decoration:none;color:inherit}.nav{max-width:1320px;margin:auto;height:92px;display:flex;align-items:center;gap:28px;padding:0 38px;border-bottom:1px solid var(--border)}.logo{display:flex;align-items:center;gap:10px;font-size:24px}.logo span{font-size:11px;letter-spacing:2px;color:var(--muted-foreground)}.nav>div{display:flex;gap:30px;flex:1;margin-left:60px;font-size:13px}.nav>a:not(.logo){font-size:13px}.dark{display:inline-flex;align-items:center;justify-content:center;gap:16px;background:var(--primary);color:var(--primary-foreground)!important;border-radius:7px;padding:14px 20px;font-size:14px}.dark:hover{background:var(--primary-hover)}.hero{text-align:center;padding:78px 32px 40px;max-width:1320px;margin:auto}.eyebrow{font-size:10px;letter-spacing:2.5px;color:var(--muted-foreground);font-weight:600}.hero h1{font-size:clamp(36px,4.6vw,68px);line-height:1.24;letter-spacing:-3px;font-weight:600;margin:28px 0}.hero h1>span{color:var(--muted-foreground)}.intro{font-size:16px;line-height:1.95;color:var(--muted-foreground)}.actions{display:flex;align-items:center;justify-content:center;gap:28px;margin:28px 0 55px;font-size:13px}.product{text-align:left;border:1px solid var(--border);border-radius:13px;overflow:hidden;box-shadow:0 20px 65px var(--shadow);background:var(--surface)}.productBar{display:flex;align-items:center;justify-content:space-between;height:48px;padding:0 23px;border-bottom:1px solid var(--border);font-size:10px;color:var(--muted-foreground)}.productBar b{letter-spacing:2px;color:var(--foreground-strong)}.demo{display:flex;min-height:385px}.demo>aside{width:175px;flex-shrink:0;padding:26px 20px;border-right:1px solid var(--border);font-size:11px;color:var(--muted-foreground)}.demo hr{border:0;border-top:1px solid var(--border);margin:20px 0}.demo aside p{padding:8px 0}.demo aside small{display:block;margin-top:90px;font-size:9px}.demoWorld{position:relative;flex:1;min-width:0;background:radial-gradient(var(--grid) .7px,transparent .7px) 0 0/18px 18px,var(--background)}.demoWorld>svg{position:absolute;inset:0;width:100%;height:100%;fill:none;stroke:var(--connector);stroke-width:1.5}.demoWorld>article{position:absolute;border:1px solid var(--selection-border);box-shadow:0 8px 20px var(--shadow);border-radius:7px;padding:23px;width:23%;background:var(--background)}.demoWorld small{font-size:8px;letter-spacing:1px;color:var(--muted-foreground)}.demoWorld h3{font-size:22px;font-weight:500;line-height:1.5;margin:18px 0 12px}.demoWorld p{font-size:10px;line-height:1.9;color:var(--muted-foreground)}.note{left:5%;top:55px;transform:rotate(-3deg)}.demoWorld>.art{left:36%;top:35px;width:25%;height:260px;overflow:hidden;background:var(--background);color:var(--primary)}.art h3{position:absolute;bottom:24px;z-index:1}.art>span{position:absolute;bottom:23px;font-size:6px;letter-spacing:2px}.orbit{width:165px;height:165px;border-radius:50%;background:linear-gradient(135deg,#f7f2d8,#7f9469);box-shadow:20px 10px 30px #52613e44;position:absolute;right:-28px;top:25px}.prompt{left:69%;top:100px;transform:rotate(3deg)}.prompt>svg{display:block;margin-bottom:16px;color:var(--muted-foreground)}.dock{position:absolute;bottom:15px;left:50%;transform:translateX(-50%);display:flex;gap:23px;padding:12px 18px;border:1px solid var(--border);background:var(--surface);border-radius:10px}.dock svg{width:17px;color:var(--foreground)}.caption{font-size:10px;color:var(--muted-foreground);margin-top:23px}.tools{max-width:1160px;padding:75px 32px;margin:auto}.page h2{font-size:clamp(30px,3.5vw,47px);line-height:1.3;letter-spacing:-1.8px;font-weight:500;margin:20px 0 35px}.toolGrid{display:grid;grid-template-columns:1fr 1fr;gap:24px}.toolGrid>a{border:1px solid var(--border);padding:30px;border-radius:12px;background:var(--surface);transition:transform .2s}.toolGrid>a:hover{transform:translateY(-4px)}.toolGrid>a>svg{width:21px;vertical-align:middle;color:var(--muted-foreground)}.toolGrid>a>span{font-size:9px;letter-spacing:2px;margin-left:13px;color:var(--muted-foreground)}.toolGrid h3{font-size:27px;letter-spacing:-1px;margin:25px 0 14px;font-weight:500}.toolGrid p{font-size:13px;line-height:1.9;color:var(--muted-foreground);max-width:370px}.toolGrid strong{display:flex;justify-content:space-between;font-weight:400;font-size:12px;margin-top:24px}.poster,.miniCanvas{height:225px;margin-top:30px;overflow:hidden;background:#ebeedf;position:relative;border-radius:6px}.poster>span{display:block;font-size:48px;letter-spacing:-3px;font-weight:700;line-height:1;padding:28px;color:#434e32}.poster i{font-family:Georgia,serif;font-weight:400}.poster>b{position:absolute;right:20px;top:20px;font-size:175px;line-height:1;color:#9cae79;transform:rotate(15deg)}.miniCanvas{display:flex;align-items:center;justify-content:center;gap:10px;background:radial-gradient(var(--grid) .7px,transparent .7px) 0 0/15px 15px,var(--background)}.miniCanvas b{font-size:11px;font-weight:400;padding:20px 13px;border:1px solid var(--selection-border);background:var(--background);border-radius:6px}.miniCanvas i{color:var(--muted-foreground)}.workflow{max-width:1160px;margin:20px auto;padding:65px 32px 90px;display:grid;grid-template-columns:1fr 1fr;gap:100px;border-top:1px solid var(--border)}.workflow p{font-size:13px;line-height:1.9;color:var(--muted-foreground)}.workflow a{display:inline-flex;gap:10px;font-size:12px;margin-top:20px}.workflow ol{list-style:none;padding:0}.workflow li{display:flex;gap:25px;border-bottom:1px solid var(--border);padding:22px 0}.workflow li>b{font-size:12px;color:var(--muted-foreground);padding-top:6px}.workflow h3{font-size:18px;font-weight:500;margin:0}.end{text-align:center;padding:75px 25px 95px;background:var(--selection);border-top:1px solid var(--border)}.end>span{font-size:55px;color:var(--muted-foreground)}.footer{max-width:1240px;display:flex;justify-content:space-between;gap:25px;align-items:center;margin:auto;padding:35px;font-size:11px;color:var(--muted-foreground)}.footer .logo{font-size:16px}.page a:focus-visible{outline:2px solid var(--ring);outline-offset:5px}@media(max-width:760px){.nav{padding:0 20px;height:72px;gap:14px}.nav>div{display:none}.nav .logo{flex:1}.nav .dark{padding:10px}.hero{padding:50px 18px 20px}.hero h1{letter-spacing:-1.5px}.intro{font-size:13px}.actions{gap:15px}.demo>aside{display:none}.demo{min-height:340px}.demoWorld>article{padding:12px}.demoWorld h3{font-size:16px}.demoWorld p{font-size:8px}.demoWorld small{font-size:6px}.demoWorld>.art{height:220px}.prompt{left:68%}.orbit{width:110px;height:110px}.productBar span:last-child{display:none}.toolGrid{grid-template-columns:1fr}.tools{padding:50px 20px}.workflow{grid-template-columns:1fr;gap:20px;padding:45px 20px}.footer{flex-wrap:wrap;padding:25px 20px}.footer>span{display:none}} - -.nav .logo{flex-shrink:0}.nav>div{margin-left:24px}.nav .dark,.actions .dark,.end .dark{background:var(--primary);color:var(--primary-foreground)!important} -.dark:hover{background:var(--primary-hover)} -.hero h1>span{color:var(--primary)} -.end>span{display:inline-flex}.end>span :global(.endoleap-mark){width:64px;height:64px}.end>span :global(.endoleap-wordmark){display:none!important} -.demoWorld,.miniCanvas{background-color:var(--el-canvas-white);background-image:radial-gradient(var(--grid) .7px,transparent .7px);color:var(--el-espresso)} +.page{background:var(--background);color:var(--foreground-strong);font-family:Arial,'PingFang SC',sans-serif;overflow:clip}.page *{box-sizing:border-box}.page a{text-decoration:none;color:inherit}.page a:focus-visible{outline:2px solid var(--ring);outline-offset:5px}.page em{font-family:Georgia,'STSong','Songti SC',serif;font-weight:400} +.nav{max-width:1320px;margin:auto;min-height:92px;display:flex;align-items:center;gap:28px;padding:20px 38px;border-bottom:1px solid var(--border)}.logo{display:inline-flex;flex-shrink:0}.nav>div{display:flex;gap:30px;flex:1;margin-left:24px;font-size:13px}.nav>a:not(.logo){font-size:13px}.dark{display:inline-flex;align-items:center;justify-content:center;gap:16px;background:var(--primary);color:var(--primary-foreground)!important;border-radius:7px;padding:15px 22px;font-size:14px;transition:background 160ms ease}.dark:hover{background:var(--primary-hover)} +.hero{text-align:center;padding:82px 32px 0;max-width:1320px;margin:auto}.eyebrow{font-size:10px;letter-spacing:2.2px;line-height:1.7;color:var(--muted-foreground);font-weight:500}.hero h1{font-size:clamp(36px,4.6vw,64px);line-height:1.3;letter-spacing:-.055em;font-weight:500;margin:28px 0}.hero h1>span{color:var(--primary)}.intro{font-size:16px;line-height:1.95;color:var(--muted-foreground)}.actions{display:flex;align-items:center;justify-content:center;gap:28px;margin:30px 0 48px;font-size:13px} +.peopleStrip{position:relative;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:22px;min-height:370px;padding:26px 12px 25px;text-align:left}.peopleStrip figure{margin:0;min-width:0}.peopleStrip figure:nth-of-type(1){transform:rotate(-3deg);padding-top:5px}.peopleStrip figure:nth-of-type(2){transform:rotate(2deg);padding-top:72px}.peopleStrip figure:nth-of-type(3){transform:rotate(-2deg);padding-top:20px}.peopleStrip figure:nth-of-type(4){transform:rotate(3deg);padding-top:60px}.peopleStrip figure:nth-of-type(5){transform:rotate(-1deg);padding-top:1px}.peopleStrip svg{width:100%;height:auto;display:block}.peopleStrip figcaption{font-size:10px;line-height:1.6;color:var(--muted-foreground);padding:12px 10px}.stripNote{position:absolute;right:30px;top:-12px;transform:rotate(4deg);font-size:11px;color:var(--muted-foreground)}.stripSpark{position:absolute;left:37%;top:8px;font-size:32px;font-weight:400;color:var(--primary);transform:rotate(15deg)} +.page h2{font-size:clamp(30px,3.5vw,46px);line-height:1.35;letter-spacing:-.045em;font-weight:500;margin:20px 0 30px}.possibilities{max-width:1160px;padding:100px 32px 50px;margin:auto;text-align:center;scroll-margin-top:30px}.featureGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:48px;margin-top:65px;text-align:left}.featureGrid svg{width:125px;height:100px;margin:0 0 20px -10px}.featureGrid h3{font-size:18px;font-weight:500;margin:0 0 13px;letter-spacing:-.025em}.featureGrid p{margin:0;font-size:13px;line-height:1.9;color:var(--muted-foreground)} +.tools{max-width:1160px;padding:65px 32px 85px;margin:auto;scroll-margin-top:30px}.toolGrid{display:grid;grid-template-columns:1fr 1fr;gap:28px}.toolGrid>a{min-width:0;border-top:1px solid var(--border);padding-top:25px}.toolGrid>a>svg{width:20px;vertical-align:middle;color:var(--muted-foreground)}.toolGrid>a>span{font-size:9px;letter-spacing:2px;margin-left:12px;color:var(--muted-foreground)}.toolGrid h3{font-size:28px;letter-spacing:-.04em;margin:25px 0 14px;font-weight:500}.toolGrid p{font-size:13px;line-height:1.9;color:var(--muted-foreground);max-width:370px}.toolGrid strong{display:flex;justify-content:space-between;font-weight:400;font-size:12px;margin-top:22px;padding-bottom:10px}.toolGrid>a:hover strong{text-decoration:underline;text-underline-offset:5px} +.poster,.miniCanvas{height:250px;margin-top:28px;overflow:hidden;position:relative;border-radius:3px}.poster{background:var(--selection);color:var(--foreground-strong)}.poster>span{display:block;font-size:56px;letter-spacing:-3px;font-weight:700;line-height:1;padding:28px;position:relative;z-index:1}.poster i{font-family:Georgia,serif;font-weight:400}.poster>b{position:absolute;right:8px;top:25px;font-size:210px;line-height:1;font-weight:400;color:var(--primary);opacity:.4;transform:rotate(15deg)}.miniCanvas{display:flex;align-items:center;justify-content:center;gap:10px;background:radial-gradient(var(--grid) .7px,transparent .7px) 0 0/15px 15px,var(--surface)}.miniCanvas b{font-size:12px;font-weight:400;padding:25px 14px;border:1px solid var(--selection-border);background:var(--background);border-radius:4px;box-shadow:3px 4px 0 var(--selection)}.miniCanvas b:first-child{transform:translateY(-25px) rotate(-4deg)}.miniCanvas b:last-child{transform:translateY(25px) rotate(4deg)}.miniCanvas i{color:var(--muted-foreground)} +.reading{max-width:1096px;margin:35px auto 80px;background:var(--selection);display:grid;grid-template-columns:1fr 1fr;gap:40px;padding:54px 65px;align-items:center}.reading p:not(.eyebrow){font-size:13px;line-height:1.9;color:var(--muted-foreground)}.reading a{display:inline-flex;align-items:center;gap:10px;font-size:12px;margin-top:18px}.readingArt{position:relative;min-width:0;height:320px}.readingArt>svg:first-of-type{position:absolute;height:330px;width:300px;bottom:-78px;right:-15px;transform:rotate(5deg)}.readingArt>svg:last-child{position:absolute;inset:0;width:100%;height:100%;fill:none;stroke:var(--foreground);stroke-width:2;pointer-events:none}.readingArt>span{display:block;position:absolute;top:-26px;left:30px;border:1px solid var(--foreground);background:var(--background);padding:20px 28px;font-size:16px;line-height:1.7;transform:rotate(-7deg);z-index:1}.readingArt>small{position:absolute;right:-12px;bottom:-57px;background:var(--background);border:1px solid var(--foreground);padding:12px 15px;font-size:8px;letter-spacing:1.5px;transform:rotate(6deg)} +.workflow{max-width:1160px;margin:20px auto;padding:75px 32px 95px;display:grid;grid-template-columns:1fr 1fr;gap:100px;scroll-margin-top:30px}.workflow p{font-size:13px;line-height:1.9;color:var(--muted-foreground)}.workflow a{display:inline-flex;gap:10px;font-size:12px;margin-top:20px}.workflow ol{list-style:none;padding:0}.workflow li{display:flex;gap:25px;border-bottom:1px solid var(--border);padding:25px 0}.workflow li>b{font-family:Georgia,serif;font-size:22px;font-style:italic;font-weight:400;color:var(--muted-foreground);padding-top:2px}.workflow h3{font-size:18px;font-weight:500;margin:0} +.end{position:relative;isolation:isolate;max-width:1240px;margin:0 auto 40px;text-align:center;min-height:480px;padding:100px 25px 95px}.endContent{position:relative;z-index:1}.endContent>p:not(.eyebrow){font-size:13px;color:var(--muted-foreground);line-height:1.8;margin-bottom:26px}.endSecondary{display:block;width:fit-content;margin:20px auto 0;font-size:11px;color:var(--muted-foreground)!important}.endWall{position:absolute;inset:20px 32px;display:grid;grid-template-columns:160px 160px;grid-template-rows:1fr 1fr;justify-content:space-between;gap:20px;opacity:.17;pointer-events:none;mask-image:linear-gradient(90deg,#000,transparent 40%,transparent 60%,#000)}.endWall>div{padding:10px;transform:rotate(-5deg)}.endWall>div:nth-child(even){transform:rotate(5deg)}.endWall svg{width:100%;height:110px}.endWall i{display:block;border-bottom:1px solid var(--foreground);margin:8px 0;width:90%}.endWall i:last-child{width:60%} +.footer{max-width:1240px;display:flex;justify-content:space-between;gap:25px;align-items:center;margin:auto;padding:35px 32px;border-top:1px solid var(--border);font-size:11px;color:var(--muted-foreground)} +@media(max-width:1000px){.nav{gap:20px;padding-left:24px;padding-right:24px}.nav>div{margin-left:8px;gap:20px}.peopleStrip{gap:12px;min-height:310px}.featureGrid{gap:28px}.reading{margin-left:32px;margin-right:32px;padding:40px}.workflow{gap:60px}} +@media(max-width:760px){.nav{padding:16px 20px;min-height:72px;gap:14px}.nav>div{display:none}.nav .logo{flex:1}.nav .dark{padding:10px 12px}.hero{padding:48px 20px 0}.hero h1{font-size:clamp(29px,6vw,44px);letter-spacing:-.055em}.intro{font-size:13px}.actions{gap:18px;flex-wrap:wrap;margin-bottom:36px}.actions>a:not(.dark){font-size:11px}.peopleStrip{grid-template-columns:repeat(3,minmax(0,1fr));min-height:250px;gap:9px;padding:20px 0 10px}.peopleStrip figure:nth-of-type(2){padding-top:42px}.peopleStrip figure:nth-of-type(3){padding-top:8px}.peopleStrip figure:nth-of-type(4),.peopleStrip figure:nth-of-type(5){display:none}.peopleStrip figcaption{font-size:9px;padding:8px 3px}.stripNote{top:-7px;right:5px;font-size:9px}.stripSpark{left:44%;top:5px;font-size:22px}.possibilities{padding:50px 24px 25px}.page h2{font-size:30px}.featureGrid{grid-template-columns:1fr 1fr;gap:32px 25px;margin-top:38px}.featureGrid svg{width:105px;height:82px;margin-bottom:12px}.featureGrid h3{font-size:16px}.featureGrid p{font-size:12px}.tools{padding:45px 24px 50px}.toolGrid{grid-template-columns:1fr;gap:34px}.poster,.miniCanvas{height:260px}.reading{grid-template-columns:1fr;gap:20px;padding:32px 26px 44px;margin:30px 24px 55px}.readingArt{height:250px;margin-top:35px}.readingArt>svg:first-of-type{width:230px;height:260px;bottom:-50px;right:-5px}.readingArt>span{font-size:13px;padding:15px 20px;left:0}.readingArt>small{bottom:-45px;right:-7px;font-size:7px}.workflow{grid-template-columns:1fr;gap:15px;padding:40px 24px 50px}.workflow ol{margin-top:0}.end{min-height:410px;padding:70px 24px;margin-bottom:15px}.endWall{inset:20px 8px;grid-template-columns:100px 100px}.footer{padding:26px 24px;flex-wrap:wrap;gap:24px}.footer>span{display:none}} +@media(max-width:380px){.nav{gap:10px;padding-left:16px;padding-right:16px}.nav .dark{gap:6px;font-size:11px}.hero{padding-left:16px;padding-right:16px}.hero h1{font-size:27px}.featureGrid{gap:26px 20px}.miniCanvas{gap:5px}.miniCanvas b{padding:20px 9px;font-size:10px}} +@media(prefers-reduced-motion:reduce){.dark{transition:none}} diff --git a/apps/waterfall-wiki/tests/brand-ui-integration.ts b/apps/waterfall-wiki/tests/brand-ui-integration.ts index 17fe415..0a1ec12 100644 --- a/apps/waterfall-wiki/tests/brand-ui-integration.ts +++ b/apps/waterfall-wiki/tests/brand-ui-integration.ts @@ -62,6 +62,14 @@ export async function verifyBrandUI(base: string) { await page.setViewportSize({ width: 390, height: 844 }); assert.equal(await page.locator('.endoleap-mark-light').first().isVisible(), true); assert.ok(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth + 1), 'mobile home has no horizontal overflow'); + for (const width of [390, 320]) { + await page.setViewportSize({ width, height: 844 }); + assert.ok(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth + 1), 'Editorial home fits narrow screens'); + const entry = await page.getByRole('navigation', {name: '主导航'}).getByRole('link', {name: /进入工作台/}).boundingBox(); + assert.ok(entry && entry.x >= 0 && entry.x + entry.width <= width, 'Workspace entry is visible, not clipped'); + assert.equal(await page.getByRole('link', {name: /去知识空间逛逛/}).getAttribute('href'), '/documents'); + assert.equal(await page.getByRole('link', {name: '开始创作', exact: true}).getAttribute('href'), '/account?next=/workspace'); + } console.log('Endoleap logos, both favicon paths, persisted home/canvas themes and artwork color isolation passed.'); } finally { await browser.close(); } } diff --git a/scripts/verify-studio-visual.cjs b/scripts/verify-studio-visual.cjs index 99d5a7d..4a8c3d6 100644 --- a/scripts/verify-studio-visual.cjs +++ b/scripts/verify-studio-visual.cjs @@ -27,6 +27,15 @@ const assert=require('node:assert/strict'); } if(checkLegacy&&!process.argv.includes('--diagnose'))assert.deepEqual(metrics.filter(m=>m.overflow.length),[],'Default copy must fit every native slot'); await page.goto(base+'/',{waitUntil:'networkidle'});await page.getByRole('heading',{name:/想法不该停在对话里/}).waitFor();await page.screenshot({path:dir+'/landing-desktop.png',fullPage:true}); + // Capture the complete editorial home at both narrow breakpoints on the deployed server. + await page.getByRole('heading',{name:/给好奇心一点空间/}).waitFor(); + for(const [width,name] of [[390,'landing-mobile'],[320,'landing-mobile-compact']]){ + await page.setViewportSize({width,height:844}); + assert.ok(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth+1),'Landing fits narrow screens'); + const entry=await page.getByRole('navigation',{name:'主导航'}).getByRole('link',{name:/进入工作台/}).boundingBox(); + assert.ok(entry&&entry.x>=0&&entry.x+entry.width<=width,'Landing workspace entry remains inside the viewport'); + await page.screenshot({path:dir+'/'+name+'.png',fullPage:true}); + } // Verify the public account flow in this fresh context, without submitting credentials. await page.setViewportSize({width:1128,height:959}); await page.goto(base+'/account?next=/workspace',{waitUntil:'domcontentloaded'});