guanghulab/homepage/index.html

274 lines
12 KiB
HTML
Raw 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.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>光湖 · 开源模块仓库</title>
<style>
:root {
--bg: #0a0a16;
--card: rgba(16,28,56,.75);
--edge: rgba(110,160,230,.18);
--edge-h: rgba(155,205,255,.4);
--t: rgba(200,218,248,.92);
--dim: rgba(140,180,220,.5);
--dim2: rgba(120,160,200,.28);
--glow: rgba(160,210,255,.95);
--green: rgba(140,220,180,.88);
--gold: rgba(220,195,130,.88);
--rose: rgba(230,140,160,.85);
}
*{margin:0;padding:0;box-sizing:border-box}
body{
background:var(--bg); color:var(--t);
font-family:-apple-system,"PingFang SC","Microsoft YaHei","Inter",sans-serif;
min-height:100vh; font-size:16px; line-height:1.6; overflow-x:hidden;
}
canvas#bg{position:fixed;top:0;left:0;z-index:0;pointer-events:none}
.wrap{position:relative;z-index:1;max-width:960px;margin:0 auto;padding:50px 20px 80px}
/* Hero */
.hero{text-align:center;padding:30px 0 50px}
.hero .dot{display:inline-block;width:14px;height:14px;border-radius:50%;
background:radial-gradient(circle,rgba(180,220,255,.85),rgba(100,150,220,.3));
box-shadow:0 0 50px rgba(140,190,255,.55),0 0 100px rgba(100,150,230,.18);
animation:pulse 3.5s ease-in-out infinite; margin-bottom:12px}
@keyframes pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.35);opacity:.7}}
.hero h1{font-size:40px;font-weight:200;letter-spacing:14px;color:rgba(175,215,248,.78);margin:12px 0}
.hero .sub{font-size:17px;color:var(--dim);letter-spacing:4px}
.hero .line{width:80px;height:1px;background:linear-gradient(90deg,transparent,var(--edge-h),transparent);margin:24px auto}
/* section titles */
.sec-title{font-size:14px;text-transform:uppercase;letter-spacing:6px;color:var(--dim2);margin:40px 0 20px;text-align:center}
/* Module Grid */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px}
.card{
background:var(--card); border:1px solid var(--edge); border-radius:20px;
padding:28px 24px; cursor:pointer; transition:all .3s; position:relative; overflow:hidden;
}
.card:hover{border-color:var(--edge-h);background:rgba(22,38,72,.85);transform:translateY(-3px);box-shadow:0 8px 32px rgba(0,0,0,.3)}
.card .tag{display:inline-block;font-size:11px;padding:3px 10px;border-radius:10px;margin-bottom:14px}
.card .tag.live{background:rgba(140,220,180,.12);color:var(--green);border:1px solid rgba(140,220,180,.2)}
.card .tag.soon{background:rgba(180,170,140,.08);color:rgba(200,180,130,.7);border:1px solid rgba(180,170,140,.15)}
.card .icon{font-size:36px;margin-bottom:10px}
.card .name{font-size:20px;font-weight:600;color:var(--t);margin-bottom:4px}
.card .id{font-size:12px;color:var(--dim2);font-family:monospace;margin-bottom:10px}
.card .desc{font-size:14px;color:var(--dim);line-height:1.5}
.card .arrow{position:absolute;bottom:20px;right:24px;color:var(--dim2);font-size:18px;transition:all .3s}
.card:hover .arrow{color:var(--glow);transform:translateX(4px)}
/* Repo card 特殊样式 */
.card.repo{border-color:rgba(155,120,200,.2);background:linear-gradient(135deg,rgba(25,20,45,.8),rgba(18,30,50,.8))}
.card.repo:hover{border-color:rgba(180,140,220,.35)}
.card.repo .tag{background:rgba(160,130,200,.1);color:rgba(190,155,220,.8);border:1px solid rgba(160,130,200,.2)}
.card.repo .icon{font-size:32px}
/* Modal */
.overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.65);z-index:100;align-items:center;justify-content:center}
.overlay.show{display:flex}
.modal{
background:rgba(12,22,44,.96);border:1px solid var(--edge-h);border-radius:24px;
max-width:580px;width:90%;max-height:85vh;overflow-y:auto;padding:40px 32px;
animation:modalIn .25s ease-out;
}
@keyframes modalIn{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
.modal .m-icon{font-size:48px;margin-bottom:8px}
.modal .m-id{font-size:13px;color:var(--dim2);font-family:monospace;margin-bottom:6px}
.modal .m-name{font-size:26px;font-weight:600;color:var(--t);margin-bottom:16px}
.modal .m-desc{font-size:15px;color:var(--dim);line-height:1.7;margin-bottom:20px}
.modal .section{margin-bottom:20px}
.modal .section h3{font-size:13px;text-transform:uppercase;letter-spacing:3px;color:var(--dim2);margin-bottom:8px}
.modal .code{
background:rgba(0,0,0,.35);border:1px solid var(--edge);border-radius:10px;
padding:14px 18px;font-size:13px;font-family:"SF Mono",Menlo,monospace;
color:var(--green);overflow-x:auto;white-space:pre-wrap;word-break:break-all
}
.modal .intent-chain{display:flex;flex-direction:column;gap:8px}
.modal .intent-step{display:flex;align-items:center;gap:12px;padding:8px 12px;background:rgba(255,255,255,.02);border-radius:8px}
.modal .intent-step .s-icon{font-size:18px;width:28px;text-align:center}
.modal .intent-step .s-step{font-size:14px;color:var(--t);font-weight:500}
.modal .intent-step .s-why{font-size:12px;color:var(--dim);margin-left:auto}
.modal .btns{display:flex;gap:12px;margin-top:28px;flex-wrap:wrap}
.modal .btns a,.modal .btns button{
display:inline-block;padding:12px 28px;border-radius:14px;font-size:15px;
text-decoration:none;cursor:pointer;font-family:inherit;
transition:all .25s;
}
.modal .btn-go{
background:linear-gradient(135deg,rgba(100,160,220,.25),rgba(120,90,200,.15));
border:1px solid var(--edge);color:var(--glow);
}
.modal .btn-go:hover{background:linear-gradient(135deg,rgba(100,160,220,.4),rgba(120,90,200,.25));border-color:var(--edge-h)}
.modal .btn-close{background:rgba(255,255,255,.03);border:1px solid var(--edge);color:var(--dim)}
.modal .btn-close:hover{background:rgba(255,255,255,.06)}
/* Footer */
.foot{text-align:center;padding:50px 0 0;font-size:13px;color:var(--dim2)}
.foot a{color:var(--dim);text-decoration:none;transition:color .2s}
.foot a:hover{color:var(--glow)}
.foot .sep{margin:0 12px;color:var(--dim2)}
@media(max-width:640px){
.hero h1{font-size:30px;letter-spacing:8px}
.grid{grid-template-columns:1fr}
}
</style>
</head>
<body>
<canvas id="bg"></canvas>
<div class="wrap">
<div class="hero">
<div class="dot"></div>
<h1>光湖 · 开源模块</h1>
<div class="sub">语言驱动的工具模块集合</div>
<div class="line"></div>
</div>
<div class="sec-title">已发布模块</div>
<div class="grid">
<!-- MODULE-COVER-001 -->
<div class="card" onclick="openModule('cover')">
<span class="tag live">可用</span>
<div class="icon">🎨</div>
<div class="name">封面工作室</div>
<div class="id">MODULE-COVER-001</div>
<div class="desc">语言驱动的小红书 / 公众号封面生成器。说出你想要什么风格AI 自动排版渲染。</div>
<div class="arrow"></div>
</div>
<!-- 部署入口 -->
<div class="card repo" onclick="openModule('deploy')">
<span class="tag" style="background:rgba(160,130,200,.1);color:rgba(190,155,220,.8);border:1px solid rgba(160,130,200,.2)">开发者</span>
<div class="icon"></div>
<div class="name">部署模块</div>
<div class="id">从代码仓库直接部署</div>
<div class="desc">AI Agent 读取注册表 → 克隆模块代码 → Gatekeeper 临时拉起 → 立即使用。用完释放。</div>
<div class="arrow"></div>
</div>
<!-- 即将推出 -->
<div class="card" style="opacity:.5;cursor:default">
<span class="tag soon">即将推出</span>
<div class="icon">🚧</div>
<div class="name">更多模块</div>
<div class="id">MODULE-XXX-000</div>
<div class="desc">新的开源模块正在开发中。关注代码仓库获取最新动态。</div>
</div>
</div>
<div class="foot">
<a href="/code/bingshuo/open-modules" target="_blank">光湖代码仓库</a><span class="sep">·</span>
<a href="/code/bingshuo/open-modules/src/branch/main/HLDP-PROTOCOL.md" target="_blank">HLDP 协议</a><span class="sep">·</span>
<span>通感语言核系统编程语言</span>
<br><br>
<a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener" style="color:var(--dim2)">陕ICP备2025071211号-1</a>
</div>
</div>
<!-- Modal: 封面工作室 -->
<div class="overlay" id="modal-cover">
<div class="modal">
<div class="m-icon">🎨</div>
<div class="m-id">MODULE-COVER-001</div>
<div class="m-name">封面工作室</div>
<div class="m-desc">语言驱动的小红书 / 公众号封面生成器。支持多种模板风格说出你想要的AI 自动排版渲染。</div>
<div class="section">
<h3>API</h3>
<div class="code">POST https://guanghulab.com/cover/api/generate
Content-Type: application/json
{
"text": "你的自然语言描述,比如「粉色治愈风,标题:今天也要开心」",
"template": "xiaohongshu"
}</div>
</div>
<div class="section">
<h3>意图链AI 推理可见)</h3>
<div class="intent-chain">
<div class="intent-step"><span class="s-icon">📝</span><span class="s-step">解析用户意图</span><span class="s-why">识别风格关键词、配色偏好</span></div>
<div class="intent-step"><span class="s-icon">🎯</span><span class="s-step">匹配模板</span><span class="s-why">从模板库中选择最佳匹配</span></div>
<div class="intent-step"><span class="s-icon">🎨</span><span class="s-step">渲染封面</span><span class="s-why">排版文字、配色、背景图</span></div>
<div class="intent-step"><span class="s-icon"></span><span class="s-step">输出结果</span><span class="s-why">返回图片 URL + 设计编号</span></div>
</div>
</div>
<div class="btns">
<a href="/cover/" class="btn-go" target="_blank">打开封面工作室 →</a>
<button class="btn-close" onclick="closeModal('cover')">关闭</button>
</div>
</div>
</div>
<!-- Modal: 部署模块 -->
<div class="overlay" id="modal-deploy">
<div class="modal">
<div class="m-icon"></div>
<div class="m-id">语言驱动操作系统部署流程</div>
<div class="m-name">从代码仓库直接部署</div>
<div class="m-desc">AI Agent 接入 HLDP 协议后,可以读取模块注册表,克隆任意模块代码,通过 Gatekeeper 在服务器上临时拉起进程。用完释放,无需常驻。</div>
<div class="section">
<h3>AI Agent 接入流程</h3>
<div class="intent-chain">
<div class="intent-step"><span class="s-icon">📖</span><span class="s-step">读取 WELCOME.md</span><span class="s-why">了解光湖世界规则</span></div>
<div class="intent-step"><span class="s-icon">📋</span><span class="s-step">读取模块注册表</span><span class="s-why">发现可用模块和编号</span></div>
<div class="intent-step"><span class="s-icon">📦</span><span class="s-step">克隆模块代码</span><span class="s-why">从代码仓库 git clone</span></div>
<div class="intent-step"><span class="s-icon">🚀</span><span class="s-step">Gatekeeper 临时拉起</span><span class="s-why">在服务器上部署运行</span></div>
<div class="intent-step"><span class="s-icon">🔄</span><span class="s-step">用完释放</span><span class="s-why">进程终止,模块回到仓库</span></div>
</div>
</div>
<div class="btns">
<a href="/code/bingshuo/open-modules" class="btn-go" target="_blank">打开代码仓库 →</a>
<button class="btn-close" onclick="closeModal('deploy')">关闭</button>
</div>
</div>
</div>
<script>
// ── 背景粒子 ──
(function(){
var c=document.getElementById('bg'),ctx=c.getContext('2d'),w,h,ps=[];
function R(){w=c.width=window.innerWidth;h=c.height=window.innerHeight}
window.addEventListener('resize',R);R();
for(var i=0;i<60;i++)ps.push({x:Math.random()*w,y:Math.random()*h,r:Math.random()*1.5+.3,vx:(Math.random()-.5)*.15,vy:(Math.random()-.5)*.15-.1,o:Math.random()*.3+.05});
function D(){
ctx.clearRect(0,0,w,h);
for(var i=0;i<ps.length;i++){
var p=ps[i];
p.x+=p.vx;p.y+=p.vy;
if(p.x<0)p.x=w;if(p.x>w)p.x=0;if(p.y<0)p.y=h;if(p.y>h)p.y=0;
ctx.beginPath();ctx.arc(p.x,p.y,p.r,0,Math.PI*2);
ctx.fillStyle='rgba(140,190,240,'+p.o+')';ctx.fill();
}
requestAnimationFrame(D);
}
D();
})();
function openModule(id){
document.getElementById('modal-'+id).classList.add('show');
document.body.style.overflow='hidden';
}
function closeModal(id){
document.getElementById('modal-'+id).classList.remove('show');
document.body.style.overflow='';
}
document.querySelectorAll('.overlay').forEach(function(o){
o.addEventListener('click',function(e){if(e.target===this){this.classList.remove('show');document.body.style.overflow='';}});
});
</script>
</body>
</html>