:root{--paper:#f5f1e8;--paper-deep:#ece6d8;--card:#fcfaf4;--ink:#26221a;--ink-soft:#6e6757;--ink-faint:#9a9280;--line:#ddd6c4;--accent:#c4501e;--accent-deep:#a03e16;--green:#4a7c59;--red:#b23a2e;--ai-bg:#14120c;--ai-bg2:#1d1a11;--ai-line:#2e2a20;--ai-text:#ede8dc;--ai-dim:#8a8474;--amber:#e8a15c;--font-body:"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif;--font-display:"Songti SC", "Noto Serif SC", Georgia, "STSong", serif;--font-mono:ui-monospace, "SF Mono", "Cascadia Mono", Menlo, Consolas, monospace}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:var(--font-body);color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased;overflow:hidden}.app{flex-direction:column;height:100%;display:flex}.topbar{background:var(--paper);border-bottom:1px solid var(--line);z-index:5;justify-content:space-between;align-items:center;height:64px;padding:0 28px;animation:.5s both rise;display:flex;position:relative}.brand{align-items:center;gap:12px;display:flex}.brand-mark{background:var(--accent);color:#fdf6ec;width:38px;height:38px;font-family:var(--font-display);border-radius:10px;place-items:center;font-size:20px;display:grid;box-shadow:0 2px 8px #c4501e59}.brand-text h1{font-family:var(--font-display);letter-spacing:4px;font-size:21px;font-weight:600;line-height:1.1}.brand-sub{font-family:var(--font-mono);letter-spacing:3px;color:var(--ink-faint);font-size:9px}.topbar-date{font-family:var(--font-display);color:var(--ink-soft);letter-spacing:1px;font-size:15px}.agent-status{color:var(--ink-soft);letter-spacing:1px;align-items:center;gap:8px;font-size:12px;display:flex}.status-dot{background:var(--ink-faint);border-radius:50%;width:8px;height:8px}.agent-status.connected .status-dot{background:var(--green);animation:2.4s infinite pulse}.agent-status.connecting .status-dot{background:var(--amber);animation:1s infinite pulse}.agent-status.closed .status-dot{background:var(--red)}@keyframes pulse{0%,to{box-shadow:0 0 #4a7c5966}50%{box-shadow:0 0 0 5px #4a7c5900}}.workspace{flex:1;min-height:0;display:flex}.calendar-col{background:radial-gradient(900px 340px at 15% -8%, #c4501e0f, transparent 65%), radial-gradient(700px 300px at 90% 110%, #4a7c590d, transparent 60%), var(--paper);flex:1;min-width:0;position:relative}.calendar-col:after{content:"";pointer-events:none;background-image:repeating-linear-gradient(0deg,#0000 0 3px,#26221a04 3px 4px);position:absolute;inset:0}.chat-col{background:var(--ai-bg);border-left:1px solid var(--ai-line);z-index:4;flex-direction:column;width:clamp(380px,31vw,470px);min-width:360px;animation:.5s .1s both rise;display:flex;position:relative}.calendar{z-index:1;flex-direction:column;height:100%;display:flex;position:relative}.calendar-toolbar{align-items:center;gap:14px;padding:18px 28px 14px;display:flex}.btn-new{cursor:pointer;background:var(--accent);color:#fdf6ec;font-family:var(--font-body);letter-spacing:1px;border:none;border-radius:9px;padding:9px 18px;font-size:13.5px;transition:transform .15s,box-shadow .15s,background .15s;box-shadow:0 2px 10px #c4501e4d}.btn-new:hover{background:var(--accent-deep);transform:translateY(-1px);box-shadow:0 4px 14px #c4501e66}.search{border:1px solid var(--line);max-width:280px;color:var(--ink);background:#fcfaf4b3;border-radius:9px;outline:none;flex:1;padding:9px 14px;font-size:13px;transition:border-color .15s,box-shadow .15s}.search:focus{border-color:var(--accent);box-shadow:0 0 0 3px #c4501e1f}.search::placeholder{color:var(--ink-faint)}.event-count{color:var(--ink-faint);letter-spacing:1px;white-space:nowrap;margin-left:auto;font-size:12px}.calendar-scroll{flex:1;padding:4px 28px 40px;overflow-y:auto}.day-group{margin-bottom:26px;animation:.45s both rise}.day-group:nth-of-type(2){animation-delay:40ms}.day-group:nth-of-type(3){animation-delay:80ms}.day-group:nth-of-type(4){animation-delay:.12s}.day-group:nth-of-type(5){animation-delay:.16s}.day-group:nth-of-type(6){animation-delay:.2s}.day-head{align-items:baseline;gap:12px;margin-bottom:10px;display:flex}.day-head h2{font-family:var(--font-display);letter-spacing:1px;font-size:22px;font-weight:600}.day-head h2:after{content:"";background:var(--accent);opacity:.85;border-radius:2px;width:44px;height:3px;margin-top:4px;display:block}.day-iso{font-family:var(--font-mono);color:var(--ink-faint);letter-spacing:1px;font-size:11px}.day-count{font-family:var(--font-mono);color:var(--ink-soft);background:var(--paper-deep);border-radius:20px;padding:2px 10px;font-size:11px}.event-list{flex-direction:column;gap:9px;display:flex}.event-card{background:var(--card);border:1px solid var(--line);cursor:pointer;border-radius:11px;align-items:stretch;gap:16px;padding:13px 16px;transition:transform .16s,box-shadow .16s,border-color .16s;animation:.35s both slideIn;display:flex;position:relative}.event-card:hover{border-color:#cbbfa4;transform:translateY(-1.5px);box-shadow:0 6px 18px #26221a14}.event-bar{background:var(--accent);opacity:.75;border-radius:3px;width:3px;position:absolute;top:12px;bottom:12px;left:0}.event-time{min-width:88px;font-family:var(--font-mono);color:var(--ink-soft);letter-spacing:.5px;white-space:nowrap;padding-top:2px;font-size:12.5px}.event-body{flex:1;min-width:0}.event-body h3{color:var(--ink);letter-spacing:.3px;font-size:15px;font-weight:600}.event-notes{color:var(--ink-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:12.5px;overflow:hidden}.empty-state{text-align:center;color:var(--ink-faint);padding:90px 0;animation:.5s both rise}.empty-mark{border:2px dashed var(--line);width:64px;height:64px;font-family:var(--font-display);border-radius:18px;place-items:center;margin:0 auto 18px;font-size:24px;display:grid;transform:rotate(-4deg)}.empty-state p{letter-spacing:1px;font-size:14px}.empty-hint{color:var(--ink-faint);margin-top:8px;font-size:12px}.modal-mask{z-index:50;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#1a160e73;place-items:center;animation:.2s both fadeIn;display:grid;position:fixed;inset:0}.modal{background:var(--card);border:1px solid var(--line);border-radius:16px;width:min(520px,100vw - 48px);padding:22px 26px;animation:.25s cubic-bezier(.2,.9,.3,1.2) both pop;box-shadow:0 24px 60px #14100847}.modal-head{justify-content:space-between;align-items:center;margin-bottom:18px;display:flex}.modal-head h2{font-family:var(--font-display);letter-spacing:1px;font-size:20px}.modal-close{cursor:pointer;color:var(--ink-faint);background:0 0;border:none;font-size:22px;line-height:1}.modal-close:hover{color:var(--ink)}.modal form label{flex-direction:column;gap:6px;margin-bottom:14px;display:flex}.modal form label>span{color:var(--ink-soft);letter-spacing:1px;font-size:12px}.modal form input,.modal form textarea{border:1px solid var(--line);font-size:14px;font-family:var(--font-body);color:var(--ink);resize:vertical;background:#fffdf8;border-radius:9px;outline:none;padding:10px 13px;transition:border-color .15s,box-shadow .15s}.modal form input:focus,.modal form textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px #c4501e1f}.modal-row{grid-template-columns:1fr 1fr;gap:12px;display:grid}.modal-foot{align-items:center;gap:10px;margin-top:6px;display:flex}.modal-foot-spacer{flex:1}.btn-primary,.btn-ghost,.btn-danger{cursor:pointer;letter-spacing:1px;border:none;border-radius:9px;padding:10px 20px;font-size:13.5px;transition:transform .15s,background .15s,color .15s}.btn-primary{background:var(--accent);color:#fdf6ec}.btn-primary:hover{background:var(--accent-deep);transform:translateY(-1px)}.btn-primary:disabled{opacity:.55;cursor:default;transform:none}.btn-ghost{background:var(--paper-deep);color:var(--ink-soft)}.btn-ghost:hover{background:#e2dbc9}.btn-danger{color:var(--red);background:0 0;border:1px solid #b23a2e66}.btn-danger:hover{background:#b23a2e14}.chat{flex-direction:column;height:100%;display:flex}.chat-head{border-bottom:1px solid var(--ai-line);justify-content:space-between;align-items:center;padding:18px 20px 14px;display:flex}.chat-title{font-family:var(--font-display);color:var(--ai-text);letter-spacing:3px;font-size:17px}.chat-status{color:var(--ai-dim);letter-spacing:1px;font-size:11px;font-family:var(--font-mono);align-items:center;gap:7px;display:flex}.chat-status .status-dot{background:var(--ai-dim)}.chat-status.connected .status-dot{background:var(--green);animation:2.4s infinite pulse}.chat-status.connecting .status-dot{background:var(--amber);animation:1s infinite pulse}.chat-status.closed .status-dot{background:var(--red)}.chat-scroll{flex-direction:column;flex:1;gap:14px;padding:18px 18px 10px;display:flex;overflow-y:auto}.chat-empty{color:var(--ai-dim);padding:12px 2px;font-size:12.5px;line-height:1.9}.chat-empty-mark{font-family:var(--font-mono);color:var(--amber);margin-bottom:8px;font-size:20px}.chat-suggestions{flex-direction:column;gap:7px;margin-top:8px;list-style:none;display:flex}.chat-suggestions li{color:var(--ai-dim);border-left:2px solid var(--ai-line);padding-left:10px;font-size:12.5px}.chat-suggestions li:hover{color:var(--ai-text);border-left-color:var(--amber)}.msg{max-width:100%;animation:.25s both fadeIn}.msg-user{justify-content:flex-end;display:flex}.msg-user-text{background:var(--ai-bg2);border:1px solid var(--ai-line);color:var(--ai-text);white-space:pre-wrap;word-break:break-word;border-radius:14px 14px 4px;max-width:86%;padding:10px 14px;font-size:13.5px;line-height:1.7}.msg-agent-text{color:var(--ai-text);white-space:pre-wrap;word-break:break-word;font-size:13.5px;line-height:1.75;animation:.3s both fadeUp}.msg-error{color:#e8a09a;background:#c4501e14;border:1px solid #c4501e66;border-radius:10px;padding:10px 13px;font-size:12.5px;line-height:1.6}.caret{vertical-align:-2px;background:var(--amber);width:7px;height:15px;margin-left:2px;animation:1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}.tool-card{border:1px solid var(--ai-line);background:var(--ai-bg2);font-family:var(--font-mono);border-radius:9px;padding:8px 12px;font-size:11.5px;animation:.3s both slideInR}.tool-card.done{border-color:#4a7c5973}.tool-card.failed{border-color:#b23a2e80}.tool-line{align-items:center;gap:8px;display:flex}.tool-tag{background:var(--amber);color:#1d1a11;letter-spacing:1px;border-radius:4px;padding:1px 7px;font-size:9.5px;font-weight:700}.tool-name{color:var(--ai-text);letter-spacing:.5px}.tool-state{margin-left:auto;font-size:12px}.tool-state.run{color:var(--amber);animation:1.2s step-end infinite blink}.tool-state.ok{color:var(--green)}.tool-state.bad{color:var(--red)}.tool-args,.tool-result{color:var(--ai-dim);white-space:pre-wrap;word-break:break-all;margin-top:6px;font-size:10.5px;line-height:1.5}.tool-result{color:#4a7c59d9;border-top:1px dashed var(--ai-line);padding-top:5px}.chat-input-area{border-top:1px solid var(--ai-line);align-items:flex-end;gap:10px;padding:14px 16px 18px;display:flex}.chat-input{resize:none;background:var(--ai-bg2);border:1px solid var(--ai-line);color:var(--ai-text);font-family:var(--font-body);border-radius:12px;outline:none;flex:1;padding:11px 14px;font-size:13.5px;line-height:1.6;transition:border-color .15s,box-shadow .15s}.chat-input:focus{border-color:var(--amber);box-shadow:0 0 0 3px #e8a15c1f}.chat-input::placeholder{color:#57523f}.btn-send{cursor:pointer;background:var(--amber);color:#1d1a11;border:none;border-radius:12px;flex-shrink:0;width:42px;height:42px;font-size:18px;font-weight:700;transition:transform .15s,opacity .15s,background .15s}.btn-send:hover:not(:disabled){background:#f0b070;transform:translateY(-1px)}.btn-send:disabled{opacity:.35;cursor:default}.calendar-scroll::-webkit-scrollbar{width:8px}.chat-scroll::-webkit-scrollbar{width:8px}.calendar-scroll::-webkit-scrollbar-thumb{background:var(--line);border-radius:8px}.chat-scroll::-webkit-scrollbar-thumb{background:var(--ai-line);border-radius:8px}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeUp{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@keyframes pop{0%{opacity:0;transform:scale(.94)translateY(8px)}to{opacity:1;transform:none}}@keyframes slideIn{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:none}}@keyframes slideInR{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:none}}
