|
| 1 | +:root { |
| 2 | + --bg: #f7f6f3; |
| 3 | + --panel: #ffffff; |
| 4 | + --fg: #1f2328; |
| 5 | + --muted: #8a8f98; |
| 6 | + --line: #e8e6e1; |
| 7 | + --accent: #f97316; |
| 8 | + --accent-soft: #fff1e7; |
| 9 | + --accent-fg: #ffffff; |
| 10 | + --err: #e5484d; |
| 11 | + --shadow: 0 2px 12px rgba(31, 35, 40, .06); |
| 12 | +} |
| 13 | +html[data-theme="dark"] { |
| 14 | + --bg: #14161a; |
| 15 | + --panel: #1d2025; |
| 16 | + --fg: #e6e8eb; |
| 17 | + --muted: #8b93a1; |
| 18 | + --line: #2a2e37; |
| 19 | + --accent-soft: #33261b; |
| 20 | + --shadow: 0 2px 12px rgba(0, 0, 0, .35); |
| 21 | +} |
| 22 | +* { box-sizing: border-box; } |
| 23 | +body { margin:0; font:14px/1.6 system-ui, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif; background:var(--bg); color:var(--fg); } |
| 24 | +button { font:inherit; cursor:pointer; } |
| 25 | + |
| 26 | +/* ---------- top nav ---------- */ |
| 27 | +#topnav { height:56px; display:flex; align-items:center; gap:28px; padding:0 24px; background:var(--panel); border-bottom:1px solid var(--line); position:sticky; top:0; z-index:10; } |
| 28 | +#topnav .logo { display:flex; align-items:center; gap:8px; font-weight:700; font-size:16px; color:var(--accent); } |
| 29 | +#topnav .logo .mark { width:26px; height:26px; border-radius:7px; background:var(--accent); color:#fff; display:grid; place-items:center; font-size:13px; font-weight:800; } |
| 30 | +#topnav nav { display:flex; gap:22px; margin:0 auto; } |
| 31 | +#topnav nav a { color:var(--muted); text-decoration:none; font-size:14px; } |
| 32 | +#topnav nav a.active { color:var(--accent); font-weight:600; } |
| 33 | +#topnav .right { display:flex; align-items:center; gap:12px; } |
| 34 | +#topnav .icon-btn { border:1px solid var(--line); background:var(--panel); color:var(--fg); border-radius:999px; padding:4px 12px; font-size:13px; } |
| 35 | +#topnav .user { display:flex; align-items:center; gap:8px; font-size:13px; } |
| 36 | +#topnav .avatar { width:28px; height:28px; border-radius:50%; background:var(--accent-soft); color:var(--accent); display:grid; place-items:center; font-weight:700; } |
| 37 | + |
| 38 | +/* ---------- account menu ---------- */ |
| 39 | +#account { position:relative; } |
| 40 | +#accountBtn { display:flex; align-items:center; gap:8px; cursor:pointer; border:0; background:none; color:var(--fg); padding:2px 4px; border-radius:10px; } |
| 41 | +#accountBtn:hover { background:var(--accent-soft); } |
| 42 | +#accountBtn .who { display:flex; flex-direction:column; align-items:flex-start; line-height:1.2; } |
| 43 | +#accountBtn .who .name { font-size:13px; font-weight:600; } |
| 44 | +#accountBtn .who .pts { font-size:11px; color:var(--muted); } |
| 45 | +#accountMenu { position:absolute; top:calc(100% + 8px); right:0; width:288px; background:var(--panel); border:1px solid var(--line); border-radius:14px; box-shadow:0 12px 32px rgba(0,0,0,.16); padding:6px; z-index:50; display:none; } |
| 46 | +#accountMenu.open { display:block; } |
| 47 | +#accountMenu .head { padding:12px 12px 10px; } |
| 48 | +#accountMenu .head .row1 { display:flex; align-items:center; gap:8px; } |
| 49 | +#accountMenu .head .row1 .name { font-weight:700; font-size:15px; } |
| 50 | +#accountMenu .badge { font-size:11px; font-weight:700; color:var(--accent); background:var(--accent-soft); border-radius:6px; padding:1px 6px; letter-spacing:.5px; } |
| 51 | +#accountMenu .head .email { color:var(--muted); font-size:12px; margin-top:4px; } |
| 52 | +#accountMenu .stats { border-top:1px solid var(--line); border-bottom:1px solid var(--line); padding:8px 12px; } |
| 53 | +#accountMenu .stats .stat { display:flex; justify-content:space-between; align-items:center; font-size:13px; padding:4px 0; } |
| 54 | +#accountMenu .stats .stat .k { color:var(--muted); } |
| 55 | +#accountMenu .stats .stat .v { font-weight:600; } |
| 56 | +#accountMenu .stats .stat.hi .v { color:var(--accent); font-weight:700; } |
| 57 | +#accountMenu .items { padding:6px 0 2px; } |
| 58 | +#accountMenu .item { display:flex; align-items:center; gap:12px; width:100%; border:0; background:none; color:var(--fg); font-size:14px; text-align:left; padding:10px 12px; border-radius:8px; cursor:pointer; } |
| 59 | +#accountMenu .item:hover { background:var(--accent-soft); } |
| 60 | +#accountMenu .item .ic { width:18px; text-align:center; opacity:.75; } |
| 61 | + |
| 62 | +/* ---------- profile page ---------- */ |
| 63 | +#profile { display:none; } |
| 64 | +#profile .wrap { max-width:1120px; margin:0 auto; padding:28px 24px 60px; } |
| 65 | +#profile .card { background:var(--panel); border:1px solid var(--line); border-radius:18px; padding:28px; } |
| 66 | +#profile .phead { display:flex; align-items:flex-start; gap:22px; } |
| 67 | +#profile .pavatar { width:96px; height:96px; border-radius:50%; background:var(--accent-soft); color:var(--accent); display:grid; place-items:center; font-size:36px; font-weight:700; flex:none; overflow:hidden; } |
| 68 | +#profile .pavatar img { width:100%; height:100%; object-fit:cover; } |
| 69 | +#profile .pname { display:flex; align-items:center; gap:10px; } |
| 70 | +#profile .pname h1 { font-size:26px; margin:0; } |
| 71 | +#profile .edit { color:var(--muted); font-size:13px; cursor:pointer; display:inline-flex; align-items:center; gap:4px; } |
| 72 | +#profile .edit:hover { color:var(--accent); } |
| 73 | +#profile .phone { color:var(--muted); font-size:13px; margin-top:8px; display:flex; align-items:center; gap:10px; } |
| 74 | +#profile .phone .bind { color:var(--accent); font-weight:600; cursor:pointer; } |
| 75 | +#profile .pills { display:flex; flex-wrap:wrap; gap:10px; margin-top:16px; } |
| 76 | +#profile .pill { border:1px solid var(--line); border-radius:999px; padding:5px 12px; font-size:13px; color:var(--muted); display:inline-flex; align-items:center; gap:6px; } |
| 77 | +#profile .pill.on { background:var(--accent-soft); border-color:transparent; color:var(--accent); font-weight:600; } |
| 78 | +#profile .pill .lnk { color:var(--accent); font-weight:600; cursor:pointer; } |
| 79 | +#profile .pill b { color:var(--fg); font-weight:700; } |
| 80 | +#profile .sub { display:flex; align-items:center; gap:16px; margin-top:20px; border:1px solid var(--line); border-radius:14px; padding:18px 20px; background:var(--bg); } |
| 81 | +#profile .sub .sic { width:52px; height:52px; border-radius:12px; background:var(--accent-soft); color:var(--accent); display:grid; place-items:center; font-size:24px; flex:none; } |
| 82 | +#profile .sub .row1 { display:flex; align-items:center; gap:8px; font-weight:600; } |
| 83 | +#profile .sub .exp { color:var(--muted); font-size:13px; margin-top:4px; } |
| 84 | + |
| 85 | +#profile .tabs { display:flex; align-items:center; gap:8px; background:var(--panel); border:1px solid var(--line); border-radius:999px; padding:6px; width:fit-content; } |
| 86 | +#profile .tab { border:0; background:none; color:var(--muted); font-size:14px; padding:8px 18px; border-radius:999px; cursor:pointer; display:inline-flex; align-items:center; gap:6px; } |
| 87 | +#profile .tab.active { background:var(--accent); color:#fff; font-weight:600; } |
| 88 | +#profile .worksHead { display:flex; align-items:center; justify-content:space-between; margin:22px 0 12px; } |
| 89 | +#profile .worksHead .cnt { color:var(--muted); font-size:13px; display:inline-flex; align-items:center; gap:6px; } |
| 90 | +#profile .works { min-height:220px; } |
| 91 | +#profile .worksGrid { display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr)); gap:14px; } |
| 92 | +#profile .work { border:1px solid var(--line); border-radius:12px; padding:14px; cursor:pointer; background:var(--panel); } |
| 93 | +#profile .work:hover { border-color:var(--accent); } |
| 94 | +#profile .work .t { font-weight:600; font-size:14px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } |
| 95 | +#profile .work .m { color:var(--muted); font-size:12px; margin-top:6px; } |
| 96 | +#profile .empty { text-align:center; color:var(--muted); padding:56px 0; } |
| 97 | +#profile .empty .eic { width:72px; height:72px; border-radius:50%; background:var(--accent-soft); color:var(--accent); display:grid; place-items:center; font-size:30px; margin:0 auto 14px; } |
| 98 | +#profile .empty .big { color:var(--fg); font-size:15px; font-weight:600; } |
| 99 | + |
| 100 | +/* ---------- layout ---------- */ |
| 101 | +#app { display:none; } |
| 102 | +#shell { display:flex; height:calc(100vh - 56px); } |
| 103 | +#sidebar { width:230px; flex:none; border-right:1px solid var(--line); background:var(--bg); display:flex; flex-direction:column; } |
| 104 | +#sidebar .head { display:flex; align-items:center; justify-content:space-between; padding:14px 14px 8px; color:var(--accent); font-size:13px; font-weight:600; } |
| 105 | +#sidebar .head button { border:0; background:none; color:var(--accent); font-size:18px; line-height:1; } |
| 106 | +#convList { flex:1; overflow:auto; padding:4px 8px; } |
| 107 | +#convList .empty { color:var(--muted); font-size:13px; padding:12px; } |
| 108 | +#convList .cnv { padding:9px 12px; border-radius:8px; cursor:pointer; color:var(--muted); font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; display:flex; align-items:center; gap:8px; } |
| 109 | +#convList .cnv:hover { background:var(--accent-soft); } |
| 110 | +#convList .cnv.active { background:var(--accent-soft); color:var(--accent); font-weight:600; } |
| 111 | +#convList .cnv .del { margin-left:auto; visibility:hidden; color:var(--muted); font-size:12px; } |
| 112 | +#convList .cnv:hover .del { visibility:visible; } |
| 113 | + |
| 114 | +#main { flex:1; overflow:auto; } |
| 115 | +.wrap { max-width:980px; margin:0 auto; padding:28px 24px 60px; } |
| 116 | + |
| 117 | +/* ---------- hero ---------- */ |
| 118 | +#hero { text-align:center; padding:26px 0 8px; } |
| 119 | +#hero h1 { margin:0 0 10px; font-size:30px; font-weight:800; color:var(--accent); letter-spacing:1px; } |
| 120 | +#hero p { margin:0 auto; max-width:640px; color:var(--muted); font-size:14px; } |
| 121 | + |
| 122 | +/* ---------- composer card ---------- */ |
| 123 | +.composer { background:var(--panel); border:1px solid var(--line); border-radius:16px; box-shadow:var(--shadow); margin-top:22px; overflow:hidden; } |
| 124 | +.composer .label { display:flex; align-items:center; gap:6px; padding:12px 18px 0; font-size:13px; color:var(--muted); } |
| 125 | +.composer textarea { width:100%; min-height:150px; max-height:320px; resize:vertical; border:0; outline:0; background:transparent; color:var(--fg); font:inherit; padding:10px 18px; } |
| 126 | +.composer .bar { display:flex; align-items:center; gap:10px; padding:10px 14px; border-top:1px solid var(--line); } |
| 127 | +.composer .bar .spacer { flex:1; } |
| 128 | +.chip { display:inline-flex; align-items:center; gap:6px; background:var(--accent-soft); color:var(--accent); border-radius:999px; padding:3px 10px; font-size:12px; } |
| 129 | +.chip .x { cursor:pointer; font-weight:700; } |
| 130 | +.attach-btn { border:1px solid var(--line); background:var(--panel); color:var(--fg); border-radius:10px; padding:6px 12px; font-size:13px; display:inline-flex; align-items:center; gap:6px; } |
| 131 | +.attach-btn:hover { border-color:var(--accent); color:var(--accent); } |
| 132 | +#sendBtn { background:var(--accent); color:var(--accent-fg); border:0; border-radius:10px; padding:8px 20px; font-size:14px; font-weight:600; display:inline-flex; align-items:center; gap:8px; } |
| 133 | +#sendBtn:disabled { opacity:.5; cursor:default; } |
| 134 | +.stop-btn { background:transparent; color:var(--muted); border:1px solid var(--line); border-radius:10px; padding:8px 16px; display:none; } |
| 135 | +.count { color:var(--muted); font-size:12px; padding:0 18px 8px; text-align:right; } |
| 136 | + |
| 137 | +/* ---------- task type cards ---------- */ |
| 138 | +#tasks { margin-top:34px; } |
| 139 | +#tasks .head { display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; } |
| 140 | +#tasks .head h2 { margin:0; font-size:17px; font-weight:700; } |
| 141 | +#tasks .grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(150px, 1fr)); gap:14px; } |
| 142 | +.task { background:var(--panel); border:2px solid var(--line); border-radius:14px; overflow:hidden; cursor:pointer; box-shadow:var(--shadow); text-align:left; padding:0; } |
| 143 | +.task:hover { border-color:var(--accent); } |
| 144 | +.task .thumb { height:84px; display:grid; place-items:center; font-size:34px; background:linear-gradient(135deg, var(--accent-soft), var(--panel)); } |
| 145 | +.task .name { padding:8px 12px; font-size:13px; font-weight:600; display:flex; align-items:center; gap:6px; } |
| 146 | +.task .name::before { content:""; width:7px; height:7px; border-radius:50%; background:var(--accent); } |
| 147 | + |
| 148 | +/* ---------- chat ---------- */ |
| 149 | +#chat { display:none; } |
| 150 | +#messages { padding:6px 0 20px; } |
| 151 | +.msg { margin:14px 0; padding:12px 16px; border-radius:12px; white-space:pre-wrap; word-break:break-word; max-width:85%; } |
| 152 | +.msg.user { background:var(--accent-soft); color:var(--fg); margin-left:auto; border:1px solid var(--line); } |
| 153 | +.msg.agent { background:transparent; border:0; box-shadow:none; max-width:100%; padding:2px 0; } |
| 154 | +.msg.tool { background:transparent; border:1px dashed var(--line); color:var(--muted); font-family:ui-monospace, monospace; font-size:12px; max-width:100%; } |
| 155 | +.msg.err { background:transparent; border:1px solid var(--err); color:var(--err); max-width:100%; } |
| 156 | +.msg .who { font-size:12px; color:var(--muted); margin-bottom:4px; } |
| 157 | +.msg pre { background:rgba(0,0,0,.05); border-radius:8px; padding:10px; overflow:auto; font-size:12px; } |
| 158 | +.progress { display:flex; align-items:center; gap:8px; margin:10px 0; font-size:13px; color:var(--muted); } |
| 159 | +.progress .spin { display:inline-block; animation:spin 1s linear infinite; } |
| 160 | + |
| 161 | +/* ---------- assistant turn: collapsible process + prominent answer ---------- */ |
| 162 | +.turn { margin:14px 0; max-width:100%; } |
| 163 | +.proc { border:1px solid var(--line); border-radius:12px; overflow:hidden; margin-bottom:6px; } |
| 164 | +.proc-head { display:flex; align-items:center; gap:8px; width:100%; border:0; background:var(--bg); color:var(--muted); font-size:13px; padding:8px 12px; cursor:pointer; text-align:left; } |
| 165 | +.proc-head:hover { background:var(--accent-soft); } |
| 166 | +.proc-head .chev { display:inline-block; transition:transform .15s; } |
| 167 | +.proc:not(.collapsed) .proc-head .chev { transform:rotate(90deg); } |
| 168 | +.proc-head .proc-label { flex:1; } |
| 169 | +.proc-head .proc-meta { font-size:12px; opacity:.8; } |
| 170 | +.proc-body { padding:2px 12px 8px; border-top:1px solid var(--line); } |
| 171 | +.proc.collapsed .proc-body { display:none; } |
| 172 | +.proc-body .progress { margin:8px 0; } |
| 173 | +.proc-text { color:var(--muted); font-size:13px; margin:8px 0; white-space:pre-wrap; word-break:break-word; } |
| 174 | +.turn .answer { white-space:pre-wrap; word-break:break-word; } |
| 175 | +.turn .answer:empty { display:none; } |
| 176 | +.turn .answer-seg + .answer-seg { margin-top:12px; } |
| 177 | +.artifact { display:inline-flex; align-items:center; gap:6px; background:var(--panel); border:1px solid var(--line); border-radius:999px; padding:5px 14px; font-size:13px; text-decoration:none; color:var(--fg); box-shadow:var(--shadow); } |
| 178 | +.artifact:hover { border-color:var(--accent); color:var(--accent); } |
| 179 | +.artifact .size { color:var(--muted); font-size:11px; } |
| 180 | +#runStatus { margin:10px 0 0; font-size:13px; color:var(--muted); display:flex; align-items:center; gap:8px; } |
| 181 | +#runStatus .spin { display:inline-block; animation:spin 1s linear infinite; } |
| 182 | +@keyframes spin { to { transform: rotate(360deg); } } |
| 183 | +#todoPanel { margin:10px 0 0; background:var(--panel); border:1px solid var(--line); border-radius:12px; box-shadow:var(--shadow); padding:10px 14px; } |
| 184 | +#todoPanel .t-title { font-size:12px; color:var(--muted); margin-bottom:6px; font-weight:600; } |
| 185 | +#todoPanel .t-item { font-size:13px; padding:2px 0; display:flex; gap:8px; align-items:baseline; } |
| 186 | +#todoPanel .t-item.done { color:var(--muted); text-decoration:line-through; } |
| 187 | +#todoPanel .t-item.doing { color:var(--accent); font-weight:600; } |
| 188 | +html[data-theme="dark"] .msg pre { background:rgba(255,255,255,.06); } |
| 189 | + |
| 190 | +/* ---------- auth ---------- */ |
| 191 | +#auth { display:none; min-height:calc(100vh - 56px); align-items:center; justify-content:center; } |
| 192 | +#auth .card { background:var(--panel); border:1px solid var(--line); border-radius:16px; box-shadow:var(--shadow); width:380px; padding:30px; display:flex; flex-direction:column; gap:12px; } |
| 193 | +#auth h2 { margin:0 0 6px; text-align:center; color:var(--accent); } |
| 194 | +#auth input { background:var(--bg); color:var(--fg); border:1px solid var(--line); padding:11px 12px; border-radius:10px; font:inherit; } |
| 195 | +#auth .btn { background:var(--accent); color:#fff; border:0; border-radius:10px; padding:11px; font-weight:600; } |
| 196 | +#authMsg { color:var(--muted); font-size:13px; text-align:center; } |
0 commit comments