:root{--bg:#fff;--bg-section:#f5f5f7;--surface:#fff;--surface-hover:#fafafc;--text:#1d1d1f;--text-secondary:#6e6e73;--text-tertiary:#86868b;--hairline:#d2d2d7;--hairline-soft:#e8e8ed;--accent:#0071e3;--accent-hover:#0077ed;--accent-soft:#0071e314;--danger:#d70015;--radius-lg:22px;--radius-md:16px;--radius-sm:10px;--radius-pill:980px;--shadow-card:0 2px 12px #0000000d;--shadow-card-hover:0 8px 28px #0000001a;--shadow-float:0 6px 20px #0000001f;--font:-apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:15px;line-height:1.6}::selection{background:var(--accent-soft)}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:none}.shell{flex-direction:column;height:100%;display:flex}.shell__main{flex-direction:column;flex:1;min-height:0;display:flex}.topbar{border-bottom:1px solid var(--hairline-soft);-webkit-backdrop-filter:saturate(180%)blur(20px);z-index:50;background:#fffc;flex:none;align-items:center;gap:22px;height:54px;padding:0 28px;display:flex;position:sticky;top:0}.topbar__brand{align-items:center;gap:10px;display:flex}.topbar__logo{flex:none;width:26px;height:26px}.topbar__brand-name{letter-spacing:-.01em;color:var(--text);font-size:17px;font-weight:600}.topbar__brand-sub{display:none}.topbar__nav{align-items:center;gap:4px;margin-left:10px;display:flex}.topbar__link{border-radius:var(--radius-pill);color:var(--text-secondary);align-items:center;gap:6px;padding:7px 14px;font-size:14px;font-weight:450;transition:background-color .18s,color .18s;display:inline-flex}.topbar__link svg{stroke:currentColor;width:16px;height:16px}.topbar__link:hover{background:var(--bg-section);color:var(--text)}.topbar__link.router-link-active{background:var(--accent-soft);color:var(--accent)}.topbar__spacer{flex:1}.topbar__user{align-items:center;gap:10px;font-size:14px;display:flex}.topbar__username{color:var(--text);font-weight:500}.topbar__auth-link{color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-pill);background:0 0;border:none;padding:7px 14px;font-family:inherit;font-size:14px;transition:background-color .18s,color .18s}.topbar__auth-link:hover{background:var(--bg-section);color:var(--accent)}.home{flex:1;padding:88px 28px 96px;overflow-y:auto}.home__inner{max-width:680px;margin:0 auto}.home__kicker{letter-spacing:0;color:var(--accent);margin:0 0 16px;font-size:15px;font-weight:500}.home__title{letter-spacing:-.02em;color:var(--text);margin:0 0 22px;font-size:52px;font-weight:650;line-height:1.08}.home__lead{color:var(--text-secondary);max-width:32em;margin:0 0 52px;font-size:19px;line-height:1.55}.home__rule{display:none}.home__cards{grid-template-columns:1fr 1fr;gap:20px;display:grid}@media (width<=640px){.home__cards{grid-template-columns:1fr}.home__title{font-size:38px}}.home-card{background:var(--bg-section);border-radius:var(--radius-lg);color:inherit;border:1px solid #0000;padding:28px 28px 30px;transition:box-shadow .22s,transform .22s,background-color .22s;display:block}.home-card:hover{background:var(--surface);box-shadow:var(--shadow-card-hover);transform:translateY(-2px)}.home-card--muted{opacity:1;cursor:default}.home-card--muted:hover{box-shadow:none;background:var(--bg-section);transform:none}.home-card__icon{width:30px;height:30px;stroke:var(--accent);margin-bottom:18px}.home-card__title{letter-spacing:-.01em;margin:0 0 8px;font-size:21px;font-weight:600}.home-card__desc{color:var(--text-secondary);margin:0;font-size:15px;line-height:1.5}.home-card__tag{letter-spacing:.02em;color:var(--accent);background:var(--accent-soft);border-radius:var(--radius-pill);margin-top:18px;padding:4px 12px;font-size:12px;font-weight:500;display:inline-block}.loading-veil{z-index:100;-webkit-backdrop-filter:blur(6px);background:#ffffffb3;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.loading-veil__card{text-align:center;background:var(--surface);border:1px solid var(--hairline-soft);border-radius:var(--radius-lg);max-width:360px;box-shadow:var(--shadow-float);padding:36px 40px}.loading-veil__spinner{width:36px;height:36px;stroke:var(--accent);animation:.8s linear infinite veil-spin}@keyframes veil-spin{to{transform:rotate(360deg)}}.loading-veil__title{margin:16px 0 8px;font-size:18px;font-weight:600}.loading-veil__desc{color:var(--text-secondary);margin:0;font-size:14px;line-height:1.5}.veil-enter-active,.veil-leave-active{transition:opacity .2s}.veil-enter-from,.veil-leave-to{opacity:0}.sheet-page{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.sheet-page__host{flex:1;min-height:0}.sheet-save{z-index:40;align-items:center;gap:12px;display:flex;position:absolute;bottom:30px;right:18px}.sheet-save__state{color:var(--text-tertiary);letter-spacing:.01em;font-size:12px}.sheet-save__state--error{color:var(--danger)}.sheet-save__btn{color:#fff;background:var(--accent);border-radius:var(--radius-pill);cursor:pointer;box-shadow:var(--shadow-float);border:none;align-items:center;gap:7px;padding:9px 18px;font-family:inherit;font-size:13px;font-weight:500;transition:background-color .18s,opacity .18s;display:inline-flex}.sheet-save__btn:hover{background:var(--accent-hover)}.sheet-save__btn:disabled{opacity:.55;cursor:default}.sheet-save__btn svg{stroke:currentColor;width:15px;height:15px}.forum{flex:1;padding:44px 28px 96px;overflow-y:auto}.forum__inner{max-width:800px;margin:0 auto}.forum__head{justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:6px;display:flex}.forum__title{letter-spacing:-.02em;margin:0;font-size:32px;font-weight:650}.forum__sub{color:var(--text-secondary);margin:8px 0 0;font-size:15px}.forum__rule{border:none;border-top:1px solid var(--hairline-soft);margin:24px 0 4px}.forum__crumbs{color:var(--text-tertiary);align-items:center;gap:8px;margin-bottom:18px;font-size:14px;display:flex}.forum__crumbs a{color:var(--text-secondary)}.forum__crumbs a:hover{color:var(--accent)}.forum__empty,.forum__loading{text-align:center;color:var(--text-tertiary);padding:56px 0;font-size:15px}.board-row{background:var(--surface);border:1px solid var(--hairline-soft);border-radius:var(--radius-md);color:inherit;align-items:center;gap:18px;margin-top:12px;padding:20px 22px;transition:box-shadow .2s,transform .2s,border-color .2s;display:flex}.board-row:hover{box-shadow:var(--shadow-card);border-color:var(--hairline);transform:translateY(-1px)}.board-row__icon{width:24px;height:24px;stroke:var(--accent);flex:none}.board-row__body{flex:1;min-width:0}.board-row__name{letter-spacing:-.01em;margin:0 0 3px;font-size:17px;font-weight:600}.board-row__desc{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:14px;overflow:hidden}.board-row__meta{text-align:right;color:var(--text-tertiary);flex:none;font-size:13px;line-height:1.5}.thread-row__title{color:var(--text);margin:0 0 4px;font-size:16px;font-weight:500}.thread-row__info{color:var(--text-tertiary);font-size:13px}.btn{border-radius:var(--radius-pill);cursor:pointer;border:1px solid var(--hairline);background:var(--surface);color:var(--text);align-items:center;gap:7px;padding:9px 18px;font-family:inherit;font-size:14px;font-weight:500;transition:background-color .18s,border-color .18s;display:inline-flex}.btn:hover{background:var(--bg-section)}.btn svg{stroke:currentColor;width:16px;height:16px}.btn--primary{color:#fff;background:var(--accent);border-color:var(--accent)}.btn--primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn:disabled{opacity:.5;cursor:default}.thread__title{letter-spacing:-.02em;margin:0 0 22px;font-size:28px;font-weight:650;line-height:1.25}.post{background:var(--surface);border:1px solid var(--hairline-soft);border-radius:var(--radius-md);margin-bottom:14px;padding:24px}.post__head{align-items:center;gap:10px;margin-bottom:12px;display:flex}.post__avatar{width:34px;height:34px;color:var(--accent);background:linear-gradient(135deg,#e9f2ff,#cfe2ff);border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:15px;font-weight:600;display:flex}.post__author{color:var(--text);font-size:15px;font-weight:600}.post__time{color:var(--text-tertiary);font-size:13px}.post__index{color:var(--text-tertiary);margin-left:auto;font-size:13px}.post__body{color:var(--text);white-space:pre-wrap;word-break:break-word;padding-left:44px;font-size:15.5px;line-height:1.7}.form-field{margin-bottom:18px}.form-field__label{color:var(--text-secondary);margin-bottom:8px;font-size:14px;display:block}.form-input,.form-textarea{width:100%;color:var(--text);background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius-sm);padding:12px 14px;font-family:inherit;font-size:15px;transition:border-color .18s,box-shadow .18s}.form-input:focus,.form-textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}.form-textarea{resize:vertical;min-height:170px;line-height:1.65}.form-error{color:var(--danger);margin:0 0 16px;font-size:14px}.form-actions{align-items:center;gap:12px;margin-top:22px;display:flex}.auth{background:var(--bg-section);flex:1;justify-content:center;align-items:center;padding:40px 24px;display:flex}.auth__card{background:var(--surface);border:1px solid var(--hairline-soft);border-radius:var(--radius-lg);width:100%;max-width:380px;box-shadow:var(--shadow-card);padding:40px 38px 34px}.auth__title{letter-spacing:-.02em;text-align:center;margin:0 0 6px;font-size:26px;font-weight:650}.auth__sub{color:var(--text-tertiary);text-align:center;margin:0 0 28px;font-size:14px}.auth__switch{text-align:center;color:var(--text-secondary);margin:22px 0 0;font-size:14px}.auth__switch button{color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0;font-family:inherit;font-size:14px}.auth__submit{justify-content:center;width:100%;margin-top:4px;padding:12px;font-size:15px}.chat{flex:1;min-height:0;display:flex;position:relative}.chat__sidebar{border-right:1px solid var(--hairline-soft);background:var(--bg-section);flex-direction:column;flex:none;display:flex}.chat__sidebar-head{border-bottom:1px solid var(--hairline-soft);flex:none;justify-content:space-between;align-items:center;height:60px;padding:0 18px;display:flex}.chat__sidebar-title{letter-spacing:-.01em;font-size:19px;font-weight:650}.chat__search-btn{background:var(--surface);cursor:pointer;width:36px;height:36px;box-shadow:var(--shadow-card);border:none;border-radius:50%;justify-content:center;align-items:center;transition:background-color .18s;display:flex}.chat__search-btn:hover{background:var(--accent-soft)}.chat__search-btn svg{width:18px;height:18px;stroke:var(--accent)}.chat__contacts{flex:1;padding:8px;overflow-y:auto}.chat__contacts-empty{color:var(--text-tertiary);text-align:center;padding:32px 20px;font-size:14px;line-height:1.6}.contact-item{border-radius:var(--radius-sm);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:12px;width:100%;padding:12px;font-family:inherit;transition:background-color .15s;display:flex}.contact-item:hover{background:var(--surface)}.contact-item--active{background:var(--surface);box-shadow:var(--shadow-card)}.contact-item__avatar{width:42px;height:42px;color:var(--accent);background:linear-gradient(135deg,#e9f2ff,#cfe2ff);border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:17px;font-weight:600;display:flex}.contact-item__body{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.contact-item__name{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-size:15px;font-weight:550;overflow:hidden}.contact-item__preview{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:13px;overflow:hidden}.contact-item__time{color:var(--text-tertiary);flex:none;align-self:flex-start;font-size:11px}.chat__main{background:var(--bg);flex-direction:column;flex:1;min-width:0;display:flex}.chat__header{border-bottom:1px solid var(--hairline-soft);flex:none;align-items:center;gap:12px;height:60px;padding:0 24px;display:flex}.chat__header-avatar{width:34px;height:34px;color:var(--accent);background:linear-gradient(135deg,#e9f2ff,#cfe2ff);border-radius:50%;justify-content:center;align-items:center;font-size:15px;font-weight:600;display:flex}.chat__header-name{font-size:16px;font-weight:600}.chat__messages{flex-direction:column;flex:1;gap:4px;padding:24px;display:flex;overflow-y:auto}.chat__messages-empty{color:var(--text-tertiary);margin:auto;font-size:14px}.msg{flex-direction:column;align-items:flex-start;max-width:68%;margin-bottom:10px;display:flex}.msg--mine{align-self:flex-end;align-items:flex-end}.msg__bubble{background:var(--bg-section);color:var(--text);white-space:pre-wrap;word-break:break-word;border-radius:20px 20px 20px 6px;padding:10px 15px;font-size:15px;line-height:1.5}.msg--mine .msg__bubble{background:var(--accent);color:#fff;border-bottom-right-radius:6px;border-bottom-left-radius:20px}.msg__time{color:var(--text-tertiary);margin-top:3px;padding:0 6px;font-size:11px}.chat__composer{border-top:1px solid var(--hairline-soft);flex:none;align-items:flex-end;gap:12px;padding:16px 24px 20px;display:flex}.chat__input{resize:none;max-height:140px;color:var(--text);background:var(--bg-section);border-radius:var(--radius-md);border:1px solid #0000;flex:1;padding:11px 16px;font-family:inherit;font-size:15px;line-height:1.5;transition:border-color .18s,background-color .18s}.chat__input:focus{background:var(--surface);border-color:var(--accent);outline:none}.chat__send{flex:none}.chat__placeholder{color:var(--text-tertiary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:16px;display:flex}.chat__placeholder svg{width:56px;height:56px;stroke:var(--hairline)}.chat__placeholder p{font-size:15px}.search-overlay{z-index:120;-webkit-backdrop-filter:blur(3px);background:#00000047;justify-content:center;align-items:flex-start;padding-top:12vh;display:flex;position:fixed;inset:0}.search-panel{background:var(--surface);border-radius:var(--radius-lg);width:100%;max-width:460px;box-shadow:var(--shadow-float);overflow:hidden}.search-panel__head{border-bottom:1px solid var(--hairline-soft);align-items:center;gap:12px;padding:16px 18px;display:flex}.search-panel__icon{width:20px;height:20px;stroke:var(--text-tertiary);flex:none}.search-panel__input{color:var(--text);background:0 0;border:none;outline:none;flex:1;font-family:inherit;font-size:16px}.search-panel__close{color:var(--accent);cursor:pointer;background:0 0;border:none;flex:none;padding:4px 6px;font-family:inherit;font-size:14px}.search-panel__results{max-height:360px;padding:8px;overflow-y:auto}.search-panel__empty{text-align:center;color:var(--text-tertiary);padding:28px;font-size:14px}.search-result{border-radius:var(--radius-sm);align-items:center;gap:12px;padding:10px 12px;display:flex}.search-result:hover{background:var(--bg-section)}.search-result__name{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-size:15px;font-weight:500;overflow:hidden}.search-result__added{color:var(--text-secondary);font-size:13px}@media (width<=640px){.chat__sidebar{width:100%}.chat__sidebar:has(~.chat__main){width:120px}}.ctx-mask{z-index:200;position:fixed;inset:0}.ctx-menu{z-index:201;background:var(--surface);border:1px solid var(--hairline-soft);border-radius:var(--radius-sm);min-width:140px;box-shadow:var(--shadow-float);padding:6px;position:fixed}.ctx-menu__item{width:100%;color:var(--text);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:8px;align-items:center;gap:10px;padding:9px 12px;font-family:inherit;font-size:14px;transition:background-color .12s;display:flex}.ctx-menu__item:hover{background:var(--bg-section)}.ctx-menu__item svg{width:16px;height:16px;stroke:var(--text-secondary);flex:none}.ctx-menu__item--danger{color:var(--danger)}.ctx-menu__item--danger svg{stroke:var(--danger)}.admin-badge{color:#fff;background:var(--accent);border-radius:var(--radius-pill);vertical-align:middle;align-items:center;padding:2px 8px;font-size:11px;font-weight:600;line-height:1.4;display:inline-flex}.admin-badge--sm{margin-left:4px;padding:1px 6px;font-size:10px}.chat__me{border-radius:var(--radius-sm);cursor:pointer;text-align:left;background:0 0;border:none;flex:1;align-items:center;gap:10px;min-width:0;padding:6px 8px;font-family:inherit;transition:background-color .15s;display:flex}.chat__me:hover{background:var(--surface)}.chat__me-avatar{width:34px;height:34px;color:var(--accent);background:linear-gradient(135deg,#d7e8ff,#b8d5ff);border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:15px;font-weight:600;display:flex}.chat__me-name{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-size:15px;font-weight:600;overflow:hidden}.chat__resizer{cursor:col-resize;z-index:30;background:0 0;flex:none;width:5px;margin-left:-3px;transition:background-color .15s}.chat__resizer:hover{background:var(--accent-soft)}.drawer-mask{z-index:150;-webkit-backdrop-filter:blur(3px);background:#00000047;position:fixed;inset:0}.drawer{background:var(--surface);width:300px;max-width:82vw;box-shadow:var(--shadow-float);flex-direction:column;animation:.22s drawer-in;display:flex;position:absolute;top:0;bottom:0;left:0}@keyframes drawer-in{0%{transform:translate(-100%)}to{transform:translate(0)}}.drawer__profile{border-bottom:1px solid var(--hairline-soft);align-items:center;gap:14px;padding:28px 24px;display:flex}.drawer__avatar{width:52px;height:52px;color:var(--accent);background:linear-gradient(135deg,#d7e8ff,#b8d5ff);border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:22px;font-weight:600;display:flex}.drawer__name{letter-spacing:-.01em;flex-wrap:wrap;align-items:center;gap:8px;font-size:19px;font-weight:650;display:flex}.drawer__nav{padding:10px}.drawer__item{border-radius:var(--radius-sm);width:100%;color:var(--text);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:12px;padding:13px 16px;font-family:inherit;font-size:15px;transition:background-color .15s;display:flex}.drawer__item:hover{background:var(--bg-section)}.drawer__item svg{width:20px;height:20px;stroke:var(--text-secondary);flex:none}.drawer__item--danger{color:var(--danger)}.drawer__item--danger svg{stroke:var(--danger)}
