diff --git a/homepage/index.html b/homepage/index.html index 0da893b..7d1e10f 100644 --- a/homepage/index.html +++ b/homepage/index.html @@ -84,14 +84,12 @@ body{ .info-chip strong{color:var(--light);font-weight:600} .info-chip .led{width:9px;height:9px;border-radius:50%;flex-shrink:0} .info-chip .led.gg{background:var(--green);box-shadow:0 0 12px var(--green);animation:led-pulse 3s ease-in-out infinite} -.info-chip .led.rr{background:var(--heart);box-shadow:0 0 12px var(--heart);animation:led-pulse 1.5s ease-in-out infinite} /* ── 仪表板 ── */ -.dashboard{max-width:1040px;margin:0 auto;padding:0 32px 40px;display:flex;flex-direction:column;gap:20px;width:100%} +.dashboard{max-width:1080px;margin:0 auto;padding:0 32px 40px;display:flex;flex-direction:column;gap:20px;width:100%} .grid{display:grid;gap:16px} .grid-2{grid-template-columns:1fr 1fr} -.grid-3{grid-template-columns:1fr 1fr 1fr} -@media(max-width:860px){.grid-2,.grid-3{grid-template-columns:1fr}} +@media(max-width:860px){.grid-2{grid-template-columns:1fr}} /* ── 呼吸卡片系统 ── */ .card{background:var(--card-bg);border:1px solid var(--glass-edge);border-radius:20px;padding:28px;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transition:all .35s ease;box-shadow:var(--shadow);cursor:default;position:relative;overflow:hidden} @@ -122,40 +120,50 @@ body{ .p-item.active{border-color:rgba(90,208,224,.3);background:rgba(90,208,224,.06)} .p-av{width:48px;height:48px;border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:22px;flex-shrink:0;font-weight:500} .p-av.cyan{background:rgba(42,157,191,.12);color:var(--glow)} -.p-av.heart{background:rgba(224,74,116,.1);color:var(--heart)} -.p-av.violet{background:rgba(123,93,191,.12);color:var(--violet-glow)} .p-av.green{background:rgba(64,184,122,.1);color:var(--green)} .p-info{flex:1;min-width:0} .p-name{font-size:16px;font-weight:600;color:var(--light)} .p-role{font-size:14px;color:var(--text-soft);margin-top:3px} .p-status{font-size:13px;font-weight:500;padding:4px 14px;border-radius:14px;flex-shrink:0} .p-status.go{background:rgba(64,184,122,.12);color:var(--green);border:1px solid rgba(64,184,122,.08)} -.p-status.tr{background:rgba(224,74,116,.1);color:var(--heart);border:1px solid rgba(224,74,116,.08)} .p-status.ac{background:rgba(90,208,224,.12);color:var(--glow);border:1px solid rgba(90,208,224,.1)} -/* ── 留言板 ── */ -.msg-form{display:flex;flex-direction:column;gap:12px} -.msg-form .row{display:flex;gap:10px} -.msg-form input,.msg-form textarea{padding:12px 16px;background:rgba(255,255,255,.035);border:1px solid var(--glass-edge);border-radius:14px;color:var(--text);font-size:15px;outline:none;transition:all .25s;font-family:inherit;font-weight:400} -.msg-form input:focus,.msg-form textarea:focus{border-color:rgba(90,208,224,.3);box-shadow:0 0 20px rgba(42,157,191,.08)} -.msg-form input::placeholder,.msg-form textarea::placeholder{color:var(--text-faint)} -.msg-form textarea{min-height:80px;resize:vertical;line-height:1.6} -.msg-form .send-row{display:flex;gap:10px;align-items:center} +/* ── 架构进度滚动 ── */ +.arch-scroll{height:200px;overflow:hidden;position:relative;display:flex;flex-direction:column;gap:0;mask-image:linear-gradient(to bottom,transparent 0%,#000 10%,#000 90%,transparent 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0%,#000 10%,#000 90%,transparent 100%)} +.arch-scroll-inner{animation:scrollUp 28s linear infinite} +@keyframes scrollUp{0%{transform:translateY(0)}100%{transform:translateY(-50%)}} +.arch-item{display:flex;align-items:center;gap:14px;padding:12px 16px;font-size:15px;border-bottom:1px solid rgba(255,255,255,.02);transition:all .3s} +.arch-item:hover{background:rgba(90,208,224,.04);padding-left:20px} +.arch-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0} +.arch-dot.green{background:var(--green);box-shadow:0 0 10px var(--green)} +.arch-dot.cyan{background:var(--glow);box-shadow:0 0 10px var(--glow)} +.arch-dot.violet{background:var(--violet-glow);box-shadow:0 0 10px var(--violet-glow)} +.arch-dot.amber{background:var(--amber);box-shadow:0 0 10px var(--amber)} +.arch-dot.heart{background:var(--heart);box-shadow:0 0 10px var(--heart)} +.arch-dot.gray{background:var(--text-faint)} +.arch-name{color:var(--text);font-weight:500} +.arch-desc{color:var(--text-soft);font-size:13px} +.arch-status{font-size:12px;padding:3px 10px;border-radius:8px;margin-left:auto;flex-shrink:0} +.arch-status.done{background:rgba(64,184,122,.1);color:var(--green);border:1px solid rgba(64,184,122,.08)} +.arch-status.active{background:rgba(90,208,224,.1);color:var(--glow);border:1px solid rgba(90,208,224,.08)} +.arch-status.wait{background:rgba(255,255,255,.02);color:var(--text-faint);border:1px solid var(--glass-edge)} +.arch-status.future{background:rgba(212,160,48,.06);color:var(--amber);border:1px solid rgba(212,160,48,.08)} -/* ── Notion ── */ -.notion-body{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:8px 0} - -/* ── 活动流 ── */ -.feed{display:flex;flex-direction:column;gap:8px} -.feed-item{display:flex;align-items:center;gap:16px;padding:14px 18px;background:rgba(255,255,255,.02);border:1px solid var(--glass-edge);border-radius:14px;transition:all .3s;font-size:15px;cursor:pointer} -.feed-item:hover{background:rgba(255,255,255,.035);transform:translateX(3px);border-color:rgba(90,208,224,.1)} -.feed-item:active{transform:scale(.98)} -.feed-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0} -.feed-dot.cyan{background:var(--glow);box-shadow:0 0 10px var(--glow)} -.feed-dot.violet{background:var(--violet-glow);box-shadow:0 0 10px var(--violet-glow)} -.feed-dot.green{background:var(--green);box-shadow:0 0 10px var(--green)} -.feed-dot.heart{background:var(--heart);box-shadow:0 0 12px var(--heart);animation:feed-h 2s ease-in-out infinite} -@keyframes feed-h{0%,100%{transform:scale(1)}50%{transform:scale(1.4)}} +/* ── 工具链注册表 ── */ +table.tool-table{width:100%;border-collapse:collapse;font-size:15px} +table.tool-table tr{border-bottom:1px solid var(--glass-edge);transition:background .2s} +table.tool-table tr:hover{background:rgba(90,208,224,.02)} +table.tool-table tr:last-child{border-bottom:none} +table.tool-table td{padding:14px 10px 14px 0;vertical-align:middle} +table.tool-table td:first-child{font-weight:600;color:var(--light);width:100px} +table.tool-table td:nth-child(2){color:var(--text-soft)} +table.tool-table td:last-child{text-align:right} +.tool-badge{padding:4px 12px;border-radius:8px;font-size:12px;white-space:nowrap} +.tool-badge.done{background:rgba(64,184,122,.1);color:var(--green);border:1px solid rgba(64,184,122,.1)} +.tool-badge.inpr{background:rgba(90,208,224,.08);color:var(--glow);border:1px solid rgba(90,208,224,.12)} +.tool-badge.wait{background:rgba(255,255,255,.02);color:var(--text-faint);border:1px solid var(--glass-edge)} +.tool-badge.future{background:rgba(212,160,48,.06);color:var(--amber);border:1px solid rgba(212,160,48,.08)} +.tool-badge.heart{background:rgba(224,74,116,.06);color:var(--heart);border:1px solid rgba(224,74,116,.08)} /* ── 登录 ── */ .login-panel{display:flex;align-items:center;justify-content:space-between;padding:20px 28px;background:rgba(11,20,36,.5);border:1px solid var(--glass-edge);border-radius:18px;gap:16px;flex-wrap:wrap} @@ -168,7 +176,6 @@ body{ .login-in button{padding:12px 28px;background:linear-gradient(135deg,rgba(42,157,191,.3),rgba(123,93,191,.2));border:1px solid var(--glass-edge);border-radius:14px;color:var(--light);font-size:15px;font-weight:500;cursor:pointer;transition:all .25s;font-family:inherit;letter-spacing:.08em} .login-in button:hover{background:linear-gradient(135deg,rgba(42,157,191,.5),rgba(123,93,191,.35));border-color:rgba(90,208,224,.2);transform:translateY(-1px)} .login-in button:active{transform:scale(.97)} -.login-note{margin-top:12px;font-size:13px;color:var(--text-faint);line-height:1.6} #logged-in-bar{display:none;align-items:center;justify-content:space-between;padding:18px 28px;background:rgba(64,184,122,.06);border:1px solid rgba(64,184,122,.15);border-radius:18px;gap:16px;flex-wrap:wrap} #logged-in-bar .user-badge{display:flex;align-items:center;gap:12px} #logged-in-bar .user-avatar{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,rgba(42,157,191,.4),rgba(123,93,191,.3));display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--light);font-weight:600} @@ -177,11 +184,19 @@ body{ .logged-actions{display:flex;gap:12px;flex-wrap:wrap} .logged-actions button{padding:12px 26px;border-radius:14px;font-size:15px;font-weight:500;cursor:pointer;transition:all .25s;font-family:inherit} .logged-actions .btn-primary{background:linear-gradient(135deg,rgba(42,157,191,.35),rgba(123,93,191,.25));border:1px solid var(--glass-edge);color:var(--light)} -.logged-actions .btn-primary:hover{background:linear-gradient(135deg,rgba(42,157,191,.55),rgba(123,93,191,.4));transform:translateY(-1px);border-color:rgba(90,208,224,.2)} +.logged-actions .btn-primary:hover{background:linear-gradient(135deg,rgba(42,157,191,.55),rgba(123,93,191,.4));transform:translateY(-1px)} .logged-actions .btn-secondary{background:rgba(255,255,255,.03);border:1px solid var(--glass-edge);color:var(--text-soft)} .logged-actions .btn-secondary:hover{background:rgba(255,255,255,.06);color:var(--light);transform:translateY(-1px)} .logged-actions .btn-logout{background:transparent;border:1px solid rgba(224,74,116,.2);color:var(--heart);font-size:14px} .logged-actions .btn-logout:hover{background:rgba(224,74,116,.08)} +.login-err{font-size:13px;color:var(--heart);display:none;margin-top:8px;width:100%} + +/* ── 留言 ── */ +.msg-form{display:flex;flex-direction:column;gap:12px} +.msg-form .row{display:flex;gap:10px} +.msg-form input,.msg-form textarea{padding:12px 16px;background:rgba(255,255,255,.035);border:1px solid var(--glass-edge);border-radius:14px;color:var(--text);font-size:15px;outline:none;transition:all .25s;font-family:inherit;font-weight:400} +.msg-form input:focus,.msg-form textarea:focus{border-color:rgba(90,208,224,.3);box-shadow:0 0 20px rgba(42,157,191,.08)} +.msg-form textarea{min-height:72px;resize:vertical;line-height:1.6} /* ── 模型下载 ── */ .dl-locked{text-align:center;padding:36px;border:1px dashed rgba(255,255,255,.08);border-radius:16px} @@ -196,75 +211,64 @@ body{ .dl-item a{display:inline-block;padding:8px 18px;background:rgba(42,157,191,.08);border:1px solid rgba(42,157,191,.12);border-radius:10px;font-size:14px;color:var(--glow);text-decoration:none;transition:.2s} .dl-item a:hover{background:rgba(42,157,191,.15)} -/* ── 使用指南 ── */ -.code-block{background:rgba(0,0,0,.3);padding:14px;border-radius:12px;font-size:14px;color:var(--glow);overflow-x:auto;margin:8px 0;line-height:1.8;border:1px solid rgba(90,208,224,.05)} - -/* ── 底部 ── */ -.footer{text-align:center;padding:28px;font-size:14px;color:var(--text-faint);letter-spacing:.12em;border-top:1px solid var(--glass-edge);margin-top:auto;position:relative;z-index:1;font-weight:400} - -/* ── 聊天模态卡片 ── */ +/* ── 聊天模态(可拖拽调整大小) ── */ #chat-modal{position:fixed;inset:0;z-index:1000;display:none;align-items:center;justify-content:center;background:rgba(7,11,23,.6);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);animation:modalFade .3s ease} @keyframes modalFade{0%{opacity:0}100%{opacity:1}} #chat-modal.open{display:flex} -.chat-modal-card{width:92%;max-width:680px;max-height:84vh;background:rgba(11,20,36,.92);border:1px solid var(--glass-edge);border-radius:24px;box-shadow:0 24px 64px rgba(0,0,0,.5),0 0 80px rgba(90,208,224,.04);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);display:flex;flex-direction:column;animation:modalCard .35s cubic-bezier(.22,1,.36,1)} +.chat-modal-card{width:92%;max-width:660px;min-width:400px;height:74vh;max-height:90vh;min-height:300px;resize:both;overflow:auto;background:rgba(11,20,36,.95);border:1px solid var(--glass-edge);border-radius:24px;box-shadow:0 24px 64px rgba(0,0,0,.5),0 0 80px rgba(90,208,224,.04);display:flex;flex-direction:column;animation:modalCard .35s cubic-bezier(.22,1,.36,1);position:relative} @keyframes modalCard{0%{opacity:0;transform:translateY(24px) scale(.96)}100%{opacity:1;transform:translateY(0) scale(1)}} +.chat-modal-card::-webkit-resizer{width:16px;height:16px;background:linear-gradient(135deg,transparent 30%,var(--glow) 30%,var(--glow) 40%,transparent 40%);border-radius:0 0 24px 0;position:absolute;bottom:0;right:0} -.chat-modal-hd{display:flex;align-items:center;justify-content:space-between;padding:18px 24px;border-bottom:1px solid var(--glass-edge);flex-shrink:0} +.chat-modal-hd{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--glass-edge);flex-shrink:0} .chat-modal-hd .left{display:flex;align-items:center;gap:12px} .chat-modal-hd .info{font-size:15px;color:var(--text-soft)} .chat-modal-hd .info strong{color:var(--light)} -.chat-modal-close{width:34px;height:34px;border-radius:50%;border:1px solid var(--glass-edge);background:transparent;color:var(--text-faint);font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.2s} +.chat-modal-close{width:34px;height:34px;border-radius:50%;border:1px solid var(--glass-edge);background:transparent;color:var(--text-faint);font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.2s;flex-shrink:0} .chat-modal-close:hover{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.1);color:var(--light)} /* ── 引擎选择 ── */ -.chat-engine-row{display:flex;align-items:center;gap:8px;padding:12px 24px;border-bottom:1px solid var(--glass-edge);flex-wrap:wrap;flex-shrink:0} +.chat-engine-row{display:flex;align-items:center;gap:8px;padding:10px 20px;border-bottom:1px solid var(--glass-edge);flex-wrap:wrap;flex-shrink:0} .chat-engine-row .label{font-size:13px;color:var(--text-faint);margin-right:4px} .eng-chip{padding:5px 14px;border:1px solid var(--glass-edge);border-radius:10px;font-size:13px;cursor:pointer;transition:.2s} .eng-chip:hover{background:rgba(255,255,255,.03);border-color:rgba(90,208,224,.15)} .eng-chip.active{background:rgba(90,208,224,.08);border-color:rgba(90,208,224,.2);color:var(--glow)} /* ── 聊天消息 ── */ -.chat-modal-body{flex:1;overflow-y:auto;padding:20px 24px;display:flex;flex-direction:column;gap:14px} -.chat-modal-body .empty-hint{text-align:center;padding:60px 0;color:var(--text-faint);font-size:15px} -.msg{display:flex;gap:12px;max-width:82%;animation:msgIn .35s ease-out;align-items:flex-start} +.chat-modal-body{flex:1;overflow-y:auto;padding:16px 20px;display:flex;flex-direction:column;gap:12px} +.chat-modal-body .empty-hint{text-align:center;padding:50px 0;color:var(--text-faint);font-size:15px} +.msg{display:flex;gap:10px;max-width:84%;animation:msgIn .35s ease-out;align-items:flex-start} @keyframes msgIn{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}} .msg.user{align-self:flex-start;flex-direction:row} .msg.bot{align-self:flex-end;flex-direction:row-reverse} -.msg-av{width:36px;height:36px;border-radius:12px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:600} +.msg-av{width:34px;height:34px;border-radius:10px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:600} .msg.user .msg-av{background:rgba(42,157,191,.15);color:var(--glow)} .msg.bot .msg-av{background:rgba(64,184,122,.12);color:var(--green)} -.msg-con{display:flex;flex-direction:column;gap:3px} +.msg-con{display:flex;flex-direction:column;gap:2px} .msg-nm{font-size:12px;color:var(--text-faint)} -.msg.user .msg-nm{color:var(--glow);opacity:.7} -.msg.bot .msg-nm{color:var(--green);opacity:.7} -.msg-bb{padding:12px 18px;border-radius:14px;font-size:15px;line-height:1.7;word-break:break-word} +.msg-bb{padding:11px 16px;border-radius:14px;font-size:15px;line-height:1.7;word-break:break-word} .msg.user .msg-bb{background:rgba(42,157,191,.1);border:1px solid rgba(42,157,191,.1);color:var(--text);border-bottom-left-radius:4px} .msg.bot .msg-bb{background:rgba(64,184,122,.08);border:1px solid rgba(64,184,122,.08);color:var(--text);border-bottom-right-radius:4px} -.msg-bb p{margin-bottom:8px} -.msg-bb p:last-child{margin-bottom:0} .msg-bb code{background:rgba(255,255,255,.06);padding:2px 6px;border-radius:4px;font-size:14px} .msg-bb pre{background:rgba(0,0,0,.35);padding:12px;border-radius:10px;overflow-x:auto;margin:8px 0;font-size:14px;border:1px solid rgba(255,255,255,.04)} -/* ── 聊天底部 ── */ -.chat-modal-ft{flex-shrink:0;padding:16px 24px 20px;border-top:1px solid var(--glass-edge)} +.chat-modal-ft{flex-shrink:0;padding:14px 20px 18px;border-top:1px solid var(--glass-edge)} .chat-inp-row{display:flex;gap:10px} -.chat-inp-row input{flex:1;padding:14px 18px;background:rgba(255,255,255,.035);border:1px solid var(--glass-edge);border-radius:14px;color:var(--text);font-size:16px;outline:none;font-family:inherit} +.chat-inp-row input{flex:1;padding:13px 16px;background:rgba(255,255,255,.035);border:1px solid var(--glass-edge);border-radius:14px;color:var(--text);font-size:15px;outline:none;font-family:inherit} .chat-inp-row input:focus{border-color:rgba(90,208,224,.3)} .chat-inp-row input:disabled{opacity:.4} -.chat-inp-row button{padding:14px 28px;background:linear-gradient(135deg,rgba(42,157,191,.35),rgba(123,93,191,.25));border:1px solid var(--glass-edge);border-radius:14px;color:var(--light);font-size:16px;font-weight:500;cursor:pointer;transition:all .25s;font-family:inherit} +.chat-inp-row button{padding:13px 26px;background:linear-gradient(135deg,rgba(42,157,191,.35),rgba(123,93,191,.25));border:1px solid var(--glass-edge);border-radius:14px;color:var(--light);font-size:15px;font-weight:500;cursor:pointer;transition:all .25s;font-family:inherit} .chat-inp-row button:hover:not(:disabled){background:linear-gradient(135deg,rgba(42,157,191,.55),rgba(123,93,191,.4));transform:translateY(-1px)} .chat-inp-row button:disabled{opacity:.4;cursor:default} -.chat-mod-status{font-size:13px;color:var(--text-faint);margin-top:8px;min-height:20px} -.chat-mod-thinking{display:none;align-items:center;gap:10px;padding:6px 0;font-size:14px;color:var(--text-soft)} +.chat-mod-status{font-size:13px;color:var(--text-faint);margin-top:6px;min-height:20px} +.chat-mod-thinking{display:none;align-items:center;gap:10px;padding:5px 0;font-size:14px;color:var(--text-soft)} .chat-mod-thinking .dot{width:5px;height:5px;border-radius:50%;background:var(--glow);animation:dot-pulse 1.2s ease-in-out infinite} .chat-mod-thinking .dot:nth-child(2){animation-delay:.15s} .chat-mod-thinking .dot:nth-child(3){animation-delay:.3s} @keyframes dot-pulse{0%,100%{opacity:.3}50%{opacity:1}} - -.chat-mod-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:6px} -.tool-badge{padding:4px 10px;background:rgba(64,184,122,.06);border:1px solid rgba(64,184,122,.12);border-radius:6px;font-size:12px;color:var(--green)} -.tool-badge.warn{background:rgba(212,160,48,.06);border-color:rgba(212,160,48,.12);color:var(--amber)} +.chat-mod-tools{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:6px} +.tool-badge-sm{padding:3px 9px;background:rgba(64,184,122,.06);border:1px solid rgba(64,184,122,.12);border-radius:6px;font-size:12px;color:var(--green)} +.tool-badge-sm.warn{background:rgba(212,160,48,.06);border-color:rgba(212,160,48,.12);color:var(--amber)} /* ── 滚动条 ── */ ::-webkit-scrollbar{width:5px} @@ -282,11 +286,12 @@ body{ .card{padding:20px} .p-grid{grid-template-columns:1fr} .dl-grid{grid-template-columns:1fr} - .grid-2,.grid-3{grid-template-columns:1fr} .login-in input{width:100%} - .chat-modal-card{max-width:100%;max-height:100vh;border-radius:0;width:100%} + .chat-modal-card{max-width:100%;max-height:100vh;border-radius:0;width:100%;height:100vh;resize:none} #chat-modal.open{align-items:flex-end} .msg{max-width:92%} + table.tool-table td{display:block;padding:8px 0} + table.tool-table td:last-child{text-align:left} } @@ -319,21 +324,18 @@ body{