/* Layout: 侧栏（只有清单和项目）| 一棵任务树 | 常驻日历面板。无顶栏、无页脚、无解释文字。 */
:root{
  /* 素纸（默认）与宣纸两套，data-palette 切换，定稿后删掉另一套。
     accent 表示今天；state 表示交互状态；danger 表示过期；分类色只上底色，文字一律用 ink。 */
  --bg:#FBFBFA;--side:#F1F1F0;--surface:#FFFFFF;--hover:#EDEDEC;--sel:#E6E6E5;--line:#E3E3E2;--line2:#CFCFCD;
  --ink:#17191F;--muted:#595C63;--faint:#7E8087;--accent:#17191F;--on-accent:#FFFFFF;--danger:#C9281C;--state:#17191F;--on-state:#FFFFFF;--shadow:0 8px 28px rgba(23,25,31,.16);
  --l-inbox:#7A7D84;--l-personal:#2F6C9E;--l-team:#2B8573;--l-p1:#6E5AA8;--l-p2:#A8662F;--l-dev:#5F8438;--l-writing:#2794AE;--l-daily:#BC8C16;--l-life:#B5487A;--l-birthday:#C4574A;
  --pri-high:#17191F;--pri-mid:#595C63;--pri-low:#7E8087;
  --tint:13%;--r:6px;--r-s:4px;--td:50%;--dot:50%;--now:var(--danger);
  --font:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei UI","Microsoft YaHei","Noto Sans SC",sans-serif;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#111113;--side:#18181A;--surface:#1D1D20;--hover:#26262A;--sel:#303035;--line:#2B2B2F;--line2:#3D3D42;
  --ink:#EEEEF0;--muted:#A9A9AF;--faint:#85858B;--accent:#EEEEF0;--on-accent:#111113;--danger:#FF5A4E;--state:#EEEEF0;--on-state:#111113;--shadow:0 8px 28px rgba(0,0,0,.5);
  --l-inbox:#9396A0;--l-personal:#6BA3D3;--l-team:#58BCA8;--l-p1:#A592DC;--l-p2:#D49A64;--l-dev:#94BC6C;--l-writing:#5CC2DA;--l-daily:#DDB24E;--l-life:#DC82AB;--l-birthday:#E5867A;
  --pri-high:#EEEEF0;--pri-mid:#A9A9AF;--pri-low:#85858B;color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#111113;--side:#18181A;--surface:#1D1D20;--hover:#26262A;--sel:#303035;--line:#2B2B2F;--line2:#3D3D42;
  --ink:#EEEEF0;--muted:#A9A9AF;--faint:#85858B;--accent:#EEEEF0;--on-accent:#111113;--danger:#FF5A4E;--state:#EEEEF0;--on-state:#111113;--shadow:0 8px 28px rgba(0,0,0,.5);
  --l-inbox:#9396A0;--l-personal:#6BA3D3;--l-team:#58BCA8;--l-p1:#A592DC;--l-p2:#D49A64;--l-dev:#94BC6C;--l-writing:#5CC2DA;--l-daily:#DDB24E;--l-life:#DC82AB;--l-birthday:#E5867A;
  --pri-high:#EEEEF0;--pri-mid:#A9A9AF;--pri-low:#85858B;color-scheme:dark}
:root[data-palette="xuan"]{
  --bg:#F6F2E9;--side:#EDE7DA;--surface:#FCFAF4;--hover:#E9E3D5;--sel:#E3DBC9;--line:#E0D9C9;--line2:#CBC2AE;
  --ink:#2A2620;--muted:#645D50;--faint:#857D6C;--accent:#B5352A;--on-accent:#FFF8EF;--danger:#8A2C20;--state:#2A2620;--on-state:#FCFAF4;--shadow:0 8px 28px rgba(42,38,32,.18);
  --l-inbox:#837C6E;--l-personal:#245F92;--l-team:#1F7F68;--l-p1:#5F4A9B;--l-p2:#9E5A22;--l-dev:#587A28;--l-writing:#16859C;--l-daily:#B58510;--l-life:#A83C6F;--l-birthday:#C24A34;
  --pri-high:#2A2620;--pri-mid:#645D50;--pri-low:#857D6C;
  --tint:17%;--r:2px;--r-s:2px;--td:2px;--dot:1px;--now:var(--accent)}
@media (prefers-color-scheme:dark){:root[data-palette="xuan"]:not([data-theme="light"]){
  --bg:#171511;--side:#1F1C17;--surface:#25221C;--hover:#2E2A23;--sel:#3A352B;--line:#332F27;--line2:#474135;
  --ink:#EFE8D9;--muted:#B5AC9A;--faint:#928A79;--accent:#E2624F;--on-accent:#1A0E0B;--danger:#F0A48F;--state:#EFE8D9;--on-state:#171511;--shadow:0 8px 28px rgba(0,0,0,.5);
  --l-inbox:#A39C8C;--l-personal:#6EA6D6;--l-team:#5ABCA0;--l-p1:#A18FD8;--l-p2:#D5985C;--l-dev:#9ABB5F;--l-writing:#58C0D4;--l-daily:#E0B445;--l-life:#DA7FA8;--l-birthday:#E9836E;
  --pri-high:#EFE8D9;--pri-mid:#B5AC9A;--pri-low:#928A79;color-scheme:dark}}
:root[data-palette="xuan"][data-theme="dark"]{
  --bg:#171511;--side:#1F1C17;--surface:#25221C;--hover:#2E2A23;--sel:#3A352B;--line:#332F27;--line2:#474135;
  --ink:#EFE8D9;--muted:#B5AC9A;--faint:#928A79;--accent:#E2624F;--on-accent:#1A0E0B;--danger:#F0A48F;--state:#EFE8D9;--on-state:#171511;--shadow:0 8px 28px rgba(0,0,0,.5);
  --l-inbox:#A39C8C;--l-personal:#6EA6D6;--l-team:#5ABCA0;--l-p1:#A18FD8;--l-p2:#D5985C;--l-dev:#9ABB5F;--l-writing:#58C0D4;--l-daily:#E0B445;--l-life:#DA7FA8;--l-birthday:#E9836E;
  --pri-high:#EFE8D9;--pri-mid:#B5AC9A;--pri-low:#928A79;color-scheme:dark}
*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{background:var(--bg);color:var(--ink);font:14px/1.45 var(--font);overflow:hidden;font-variant-numeric:tabular-nums}
button,input,textarea,select{font:inherit;color:inherit}
button{background:none;border:0;padding:0;cursor:pointer}
:focus-visible{outline:2px solid var(--state);outline-offset:1px;border-radius:var(--r)}
svg{display:block;flex:none}
#app{height:100%;display:flex;min-width:0}

/* 侧栏 */
.side{width:236px;flex:none;background:var(--side);border-right:1px solid var(--line);display:flex;flex-direction:column;overflow-y:auto;padding:14px 8px 10px}
.nav-gap{height:14px}
.nav{display:flex;align-items:center;gap:9px;width:100%;height:34px;padding:0 9px;border-radius:var(--r);text-align:left}
.nav:hover{background:var(--hover)}
.nav.on{background:var(--sel);font-weight:600}
.nav .ic{color:var(--muted);width:17px;display:flex;justify-content:center}
.nav .nm{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nav .n{color:var(--faint);font-size:12px}
.nav .dot{width:9px;height:9px;border-radius:var(--dot);background:var(--c)}
.nav.child{padding-left:26px}
.proj-mark{color:var(--c)}
.nav.proj{height:auto;min-height:50px;align-items:flex-start;padding-top:7px;padding-bottom:8px;margin-top:3px}
.nav.proj .ic{margin-top:2px}
.nav.proj .stk{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.nav.proj .nm{font-weight:600}
.nav.proj small{color:var(--muted);font-size:11.5px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nav.proj .n{margin-top:1px}
.prog{display:block;height:3px;margin-top:4px;background:var(--line2);border-radius:2px;overflow:hidden}
.prog i{display:block;height:100%;background:var(--c)}
.h-mark{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-right:7px;vertical-align:-2px}
.h-mark .dot{width:11px;height:11px;border-radius:var(--dot);background:var(--c)}
.side-foot .seg{display:flex;margin-bottom:8px}
.side-foot .seg button{flex:1;height:24px;font-size:12px;padding:0}
.side-foot{margin-top:auto;padding:12px 9px 0;color:var(--faint);font-size:12px}

/* 主列 */
.main{flex:1 1 42%;min-width:320px;display:flex;flex-direction:column;background:var(--bg)}
.head{display:flex;align-items:center;gap:10px;min-height:62px;padding:12px 18px 8px 22px;flex-wrap:wrap}
.head h1{margin:0;font-size:19px;font-weight:650;letter-spacing:.01em;min-width:0;line-height:1.3}
.head .sub{color:var(--muted);font-size:12.5px;white-space:nowrap}
.head .sp{flex:1}
.ibtn.menu-btn{display:none}
.head-t{display:flex;flex-direction:column;min-width:0}
.seg{display:inline-flex;background:var(--hover);border-radius:var(--r);padding:2px}
.seg button{height:26px;padding:0 11px;border-radius:var(--r);color:var(--muted);font-size:13px}
.seg button.on{background:var(--surface);color:var(--ink);font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.1)}
.tbtn{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 10px;border-radius:var(--r);color:var(--muted);font-size:13px;border:1px solid transparent}
.tbtn:hover{background:var(--hover);color:var(--ink)}
.tbtn.on{color:var(--ink);background:var(--sel);font-weight:600}
.ibtn{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r);color:var(--muted)}
.ibtn:hover{background:var(--hover);color:var(--ink)}
.ibtn.on{color:var(--ink);background:var(--sel)}
.add{margin:0 18px 6px 22px;display:flex;align-items:center;gap:8px;height:36px;padding:0 11px;background:var(--hover);border-radius:var(--r);color:var(--faint)}
.add input{flex:1;min-width:0;border:0;background:none;outline:0;color:var(--ink)}
.add input::placeholder{color:var(--faint)}
.scroll{flex:1;min-height:0;overflow-y:auto;padding:0 10px 24px 14px}
.sec{display:flex;align-items:center;gap:6px;height:34px;padding:8px 8px 0;color:var(--muted);font-size:12.5px;font-weight:600;width:100%;text-align:left}
.sec .n{color:var(--faint);font-weight:400}

/* 任务行 */
.row{display:flex;align-items:center;gap:7px;min-height:37px;padding:5px 6px 5px calc(4px + var(--lv,0)*20px);border-radius:var(--r);cursor:default;position:relative}
.row:hover{background:var(--hover)}
.row.sel{background:var(--sel)}
.row.flash{animation:flash 1.1s ease-out}
@keyframes flash{0%,40%{box-shadow:inset 0 0 0 2px var(--state)}100%{box-shadow:inset 0 0 0 2px transparent}}
@media (prefers-reduced-motion:reduce){.row.flash{animation:none}}
.chev{width:16px;height:20px;display:flex;align-items:center;justify-content:center;color:var(--faint);flex:none}
.chev:hover{color:var(--ink)}
.chev.closed svg{transform:rotate(-90deg)}
.ck{width:16px;height:16px;flex:none;border:1.5px solid var(--line2);border-radius:var(--r-s);display:flex;align-items:center;justify-content:center;color:transparent;background:var(--surface)}
.ck:hover{border-color:var(--ink)}
.ck.high{border-color:var(--pri-high);border-width:2.2px}
.ck.mid{border-color:var(--pri-mid);border-width:2px}
.ck.low{border-color:var(--pri-low)}
.ck.on{background:var(--faint);border-color:var(--faint);color:var(--bg)}
.clock{width:16px;height:16px;flex:none;color:var(--c,var(--muted));display:flex;align-items:center;justify-content:center}
.ttl{flex:1;min-width:0;overflow-wrap:anywhere}
.ttl small{display:block;color:var(--faint);font-size:12px;line-height:1.3}
.row.done .ttl{color:var(--faint);text-decoration:line-through}
.row.done .ttl small{text-decoration:none}
.meta{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:12.5px;white-space:nowrap;flex:none}
.meta .past{color:var(--danger);font-weight:600}
.seal{display:inline-flex;align-items:center;height:18px;padding:0 5px;background:var(--accent);color:var(--on-accent);border-radius:var(--r-s);font-size:11.5px;font-weight:600}
.row.done .seal{background:none;padding:0}
.meta .dl{color:var(--faint)}
.meta .dl.past{color:var(--danger)}
.meta svg{color:var(--faint)}
.row.done .meta,.row.done .meta *{color:var(--faint)}
.more{width:22px;height:22px;border-radius:var(--r-s);color:var(--faint);display:none;align-items:center;justify-content:center;flex:none}
.more:hover{background:var(--line);color:var(--ink)}
.row:hover .more,.row.sel .more,.more:focus-visible{display:flex}
.confirm{margin:2px 6px 8px calc(30px + var(--lv,0)*20px);padding:9px 11px;background:var(--surface);border:1px solid var(--line2);border-radius:var(--r);font-size:13px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.confirm span{flex:1 1 100%}
.btn{height:28px;padding:0 10px;border-radius:var(--r);border:1px solid var(--line2);font-size:13px;background:var(--surface)}
.btn:hover{background:var(--hover)}
.btn.pri{background:var(--state);color:var(--on-state);border-color:var(--state)}
.empty-list{color:var(--faint);padding:30px 12px;text-align:center}

/* 日历面板 */
.cal{flex:1 1 58%;min-width:0;display:flex;flex-direction:column;border-left:1px solid var(--line);background:var(--surface);position:relative;container:cal/inline-size}
.cal-head{display:flex;align-items:center;gap:6px;min-height:62px;padding:12px 12px 8px 16px;flex-wrap:wrap}
.cal-head h2{margin:0;font-size:16px;font-weight:650;white-space:nowrap;margin-right:4px}
.cal-head .sp{flex:1}
.cal-body{flex:1;min-height:0;overflow:auto;position:relative}
.drop-on{background:color-mix(in srgb,var(--state) 10%,transparent)!important;box-shadow:inset 0 0 0 1.5px var(--state)}

.chip{display:flex;align-items:flex-start;gap:5px;padding:3px 5px;border-radius:var(--r-s);font-size:12.5px;line-height:1.32;background:color-mix(in srgb,var(--c) var(--tint),var(--surface));color:var(--ink);cursor:pointer;min-width:0}
.chip:hover{background:color-mix(in srgb,var(--c) calc(var(--tint) + 9%),var(--surface))}
.chip.ev{background:transparent;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c) 55%,transparent)}
.chip.ev:hover{background:color-mix(in srgb,var(--c) 10%,var(--surface))}
.chip.sel{box-shadow:inset 0 0 0 1.5px var(--c)}
.chip.dim{opacity:.55}
.chip.done .t{text-decoration:line-through;opacity:.65}
.chip .ck{width:13px;height:13px;margin-top:1.5px;border-radius:var(--r-s);background:transparent;border-color:color-mix(in srgb,var(--c) 55%,transparent)}
.chip .ck.high,.bar .ck.high{border-color:var(--pri-high);border-width:2px}.chip .ck.mid,.bar .ck.mid{border-color:var(--pri-mid);border-width:1.8px}.chip .ck.low,.bar .ck.low{border-color:var(--pri-low)}
.chip .ck.on{background:color-mix(in srgb,var(--c) 55%,transparent);color:var(--surface)}
.chip .t{min-width:0;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere}
.chip .tm{font-weight:600}
.chip .tag{flex:none;font-size:11px;font-weight:600}
.chip-kid{margin-left:9px}
.stack{display:flex;flex-direction:column;gap:3px;min-width:0}
.more-day{font-size:12px;color:var(--muted);text-align:left;padding:1px 5px}
.more-day:hover{color:var(--ink)}

/* 周：七列按天 */
.wk{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));min-height:100%;grid-template-rows:auto 1fr}
.wk.has-bars{grid-template-rows:auto auto 1fr}
.wk-h{padding:6px 7px 5px;border-bottom:1px solid var(--line);border-left:1px solid var(--line);font-size:12px;color:var(--muted);display:flex;align-items:center;gap:5px;position:sticky;top:0;background:var(--surface);z-index:3}
.wk-h:first-child{border-left:0}
.wk-h b{font-size:15px;font-weight:600;color:var(--ink);min-width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--td)}
.wk-h.today b{background:var(--accent);color:var(--on-accent)}
.wk-bars{grid-column:1/-1;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px 0;padding:4px 0 0}
.bar{display:flex;align-items:center;gap:5px;height:24px;margin:0 3px;padding:0 6px;border-radius:var(--r-s);background:color-mix(in srgb,var(--c) var(--tint),var(--surface));color:var(--ink);font-size:12.5px;cursor:pointer;white-space:nowrap;overflow:hidden;min-width:0}
.bar:hover{background:color-mix(in srgb,var(--c) calc(var(--tint) + 9%),var(--surface))}
.bar.sel{box-shadow:inset 0 0 0 1.5px var(--c)}
.bar .t{overflow:hidden;text-overflow:ellipsis}
.bar .ck{width:13px;height:13px;border-radius:var(--r-s);background:transparent;border-color:color-mix(in srgb,var(--c) 55%,transparent)}
.bar.clipL{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0}
.bar.clipR{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:0}
.wk-d{border-left:1px solid var(--line);padding:5px 4px 24px;min-width:0}
.wk-d:first-of-type{border-left:0}
.wk-d.we,.wk-h.we{background:color-mix(in srgb,var(--side) 55%,var(--surface))}
@container cal (max-width:560px){
  .wk{grid-template-columns:minmax(0,1fr);grid-template-rows:none}
  .wk-h{display:none}
  .wk-bars{grid-template-columns:minmax(0,1fr)}
  .wk-bars .bar{grid-column:1/-1!important;grid-row:auto!important}
  .wk-d{display:grid;grid-template-columns:62px minmax(0,1fr);gap:6px;border-left:0;border-top:1px solid var(--line);padding:7px 10px;min-height:38px}
  .wk-d::before{content:attr(data-label);color:var(--muted);font-size:12.5px}
  .wk-d.today::before{color:var(--accent);font-weight:600}
}
.wk-d:not([data-label])::before{content:none}

/* 周：按时刻 */
.tg-all{display:grid;grid-template-columns:44px repeat(7,minmax(0,1fr));border-bottom:1px solid var(--line2)}
.tg-all .g{border-left:1px solid var(--line);padding:4px 3px;min-width:0}
.tg-all .wk-h{grid-row:1}
.tg-all .wk-h:first-child{border-left:0}
.tg-grid{display:grid;grid-template-columns:44px repeat(7,minmax(0,1fr));position:relative}
.tg-hours div{height:44px;font-size:11px;color:var(--faint);text-align:right;padding-right:6px;transform:translateY(-7px)}
.tg-col{position:relative;border-left:1px solid var(--line);background:repeating-linear-gradient(var(--surface) 0 43px,var(--line) 43px 44px);height:calc(44px*15)}
.tg-col .chip{position:absolute;left:2px;right:2px;overflow:hidden}
.tg-col .chip.dur{background:color-mix(in srgb,var(--c) 22%,var(--surface));box-shadow:none}
.tg-col .chip.open{background:var(--surface);border-top:2px solid var(--c);border-radius:0;box-shadow:none;height:auto;padding-top:1px}
.tg-now{position:absolute;left:0;right:0;height:2px;background:var(--now);z-index:2;pointer-events:none}

/* 月 */
.mo-h{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));position:sticky;top:0;background:var(--surface);z-index:3;border-bottom:1px solid var(--line)}
.mo-h div{padding:4px 7px;color:var(--muted);font-size:12px}
.m-week{position:relative;border-bottom:1px solid var(--line)}
.m-cells{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}
.m-cell{border-left:1px solid var(--line);padding:3px 3px 6px;min-height:104px;min-width:0}
.m-cell:first-child{border-left:0}
.m-cell.out{background:color-mix(in srgb,var(--side) 60%,var(--surface))}
.m-cell.out .num{color:var(--faint)}
.num{font-size:13px;width:22px;height:22px;display:flex;align-items:center;justify-content:center;border-radius:var(--td);margin-bottom:2px}
.m-cell.today .num{background:var(--accent);color:var(--on-accent)}
.m-bars{position:absolute;left:0;right:0;top:27px;pointer-events:none}
.m-bars .bar{position:absolute;pointer-events:auto;margin:0;height:22px}

/* 日弹层、详情 */
.pop{position:absolute;z-index:20;width:248px;max-height:340px;overflow:auto;background:var(--surface);border:1px solid var(--line2);border-radius:var(--r);box-shadow:var(--shadow);padding:10px}
.pop h3{margin:0 0 7px;font-size:13px;font-weight:650}
.detail{width:320px;flex:none;background:var(--surface);border-left:1px solid var(--line);display:flex;flex-direction:column;overflow-y:auto;padding:14px 16px 20px;gap:12px}
.cal .detail{position:absolute;top:0;right:0;bottom:0;z-index:15;box-shadow:var(--shadow);width:min(320px,100%)}
.d-top{display:flex;align-items:flex-start;gap:6px}
.d-path{flex:1;color:var(--muted);font-size:12.5px;min-width:0;padding-top:4px}
.d-title{display:flex;gap:9px;align-items:flex-start}
.d-title .ck,.d-title .clock{margin-top:5px}
.d-title textarea{flex:1;border:0;background:none;resize:none;outline:0;font-size:17px;font-weight:600;line-height:1.4;min-width:0;height:auto;padding:0;overflow:hidden}
.d-row{display:grid;grid-template-columns:44px minmax(0,1fr);align-items:center;gap:8px;font-size:13px;min-height:30px}
.d-row>label,.d-row>span.k{color:var(--muted)}
.d-v{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0}
.d-v input{border:1px solid transparent;border-radius:var(--r);background:var(--hover);padding:3px 6px;min-width:0;max-width:100%}
.d-v input:focus{border-color:var(--state);outline:0}
.pris{display:flex;gap:4px}
.pris button{height:24px;padding:0 8px;border-radius:var(--r);font-size:12px;color:var(--muted)}
.pris button.on{background:var(--hover);color:var(--ink);font-weight:600}
.d-note{width:100%;min-height:76px;border:0;background:var(--hover);border-radius:var(--r);padding:8px 9px;resize:vertical;outline:0;font-size:13px}
.d-adds{display:flex;flex-wrap:wrap;gap:5px}
.d-adds button{display:inline-flex;align-items:center;gap:4px;height:25px;padding:0 8px;border-radius:var(--r);color:var(--muted);font-size:12.5px;background:var(--hover)}
.d-adds button:hover{color:var(--ink)}

/* 甘特 */
.g-wrap{flex:1;min-height:0;overflow:auto;border-top:1px solid var(--line);position:relative}
.g-grid{display:grid;width:max-content;min-width:100%}
.g-h,.g-r{display:contents}
.g-name{position:sticky;left:0;z-index:4;background:var(--bg);border-right:1px solid var(--line);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:6px;height:34px;padding:0 8px 0 calc(8px + var(--lv,0)*16px);width:270px;min-width:0;font-size:13px;cursor:pointer}
.g-name.sel{background:var(--sel)}
.g-name span.nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}
.g-corner{position:sticky;left:0;top:0;z-index:6;background:var(--bg);border-right:1px solid var(--line);border-bottom:1px solid var(--line2);width:270px;height:46px}
.g-days{position:sticky;top:0;z-index:5;display:flex;background:var(--bg);border-bottom:1px solid var(--line2);height:46px}
.g-day{flex:none;font-size:11.5px;color:var(--muted);text-align:center;padding-top:22px;position:relative}
.g-day.we{background:color-mix(in srgb,var(--side) 70%,transparent)}
.g-day.today{color:var(--accent);font-weight:700}
.g-day em{position:absolute;left:3px;top:4px;font-style:normal;color:var(--ink);font-weight:600;font-size:12.5px;white-space:nowrap}
.g-track{position:relative;height:34px;border-bottom:1px solid var(--line)}
.g-bg{position:absolute;inset:0;display:flex;pointer-events:none}
.g-bg i{flex:none;height:100%}
.g-bg i.we{background:color-mix(in srgb,var(--side) 70%,transparent)}
.g-bar{position:absolute;top:6px;height:22px;border-radius:var(--r-s);background:color-mix(in srgb,var(--c) 26%,var(--surface));color:var(--ink);font-size:12px;display:flex;align-items:center;padding:0 7px;white-space:nowrap;cursor:grab;touch-action:none;user-select:none;min-width:12px}
.g-bar.sel{box-shadow:inset 0 0 0 1.5px var(--c)}
.g-bar.done{opacity:.45}
.g-ev{position:absolute;top:11px;width:12px;height:12px;border-radius:50%;border:2px solid var(--c);background:var(--surface);cursor:grab;touch-action:none}
.g-ev.sel{background:var(--c)}
.g-lbl{position:absolute;top:8px;font-size:12px;color:var(--muted);white-space:nowrap;pointer-events:none}
.g-mile{position:absolute;top:10px;width:14px;height:14px;background:var(--c);transform:rotate(45deg);border-radius:var(--r)}
.g-now{position:absolute;top:0;bottom:0;width:2px;background:var(--now);z-index:3;pointer-events:none}

.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:8px 8px 8px 14px;border-radius:var(--r);display:flex;align-items:center;gap:12px;font-size:13px;z-index:60;box-shadow:var(--shadow);max-width:calc(100vw - 32px)}
.toast button{color:inherit;font-weight:600;padding:3px 8px;border-radius:var(--r);background:color-mix(in srgb,var(--bg) 18%,transparent)}
.scrim{display:none}

@media (max-width:1180px){.side{width:176px}.main{min-width:300px}}
@media (max-width:760px){
  #app{display:block;position:relative}
  .side{position:fixed;inset:0 auto 0 0;z-index:40;width:250px;transform:translateX(-102%);transition:transform .16s;padding-left:max(8px,env(safe-area-inset-left,0px))}
  .side.open{transform:none;box-shadow:var(--shadow)}
  .scrim.open{display:block;position:fixed;inset:0;background:rgba(0,0,0,.28);z-index:35}
  .ibtn.menu-btn{display:inline-flex}
  .main{height:100%;min-width:0}
  .main.hide{display:none}
  .cal{height:100%;border-left:0}
  .head{padding-left:max(12px,env(safe-area-inset-left,0px));padding-right:max(12px,env(safe-area-inset-right,0px))}
  .add{margin-left:max(16px,env(safe-area-inset-left,0px));margin-right:max(16px,env(safe-area-inset-right,0px))}
  .scroll{padding-left:max(8px,env(safe-area-inset-left,0px));padding-right:max(8px,env(safe-area-inset-right,0px))}
  .detail,.cal .detail{position:fixed;inset:0;width:100%;z-index:50;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
  .row .more{display:none}
  .m-cell{min-height:78px}
  .m-cell .chip .ck,.m-cell .chip .tm{display:none}
  .g-name,.g-corner{width:150px}
}

/* 正式版新增：登录、对话框、侧栏新建、详情操作 */
.login{height:100%;display:flex;align-items:center;justify-content:center;padding:24px}
.login form{width:min(320px,100%);display:flex;flex-direction:column;gap:12px}
.login h1{margin:0 0 6px;font-size:20px;font-weight:650}
.login input{height:38px;font-size:16px;padding:0 11px;border:1px solid var(--line2);border-radius:var(--r);background:var(--surface);outline:0}
.login input:focus{border-color:var(--state)}
.login .btn{height:38px}
.login .err{color:var(--danger);font-size:13px;min-height:19px}
.side-add{display:flex;gap:4px;margin-top:8px}
.side-add button{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 9px;border-radius:var(--r);color:var(--muted);font-size:12.5px}
.side-add button:hover{background:var(--hover);color:var(--ink)}
.side-foot .out{color:var(--muted);font-size:12px}
.side-foot .out:hover{color:var(--ink)}
.add-kind{width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:var(--muted);flex:none;border-radius:var(--r-s)}
.add-kind:hover{color:var(--ink)}
.add-kind .box{width:14px;height:14px;border:1.5px solid currentColor;border-radius:var(--r-s)}
.quick input[type=text]{width:100%;height:32px;padding:0 8px;border:1px solid var(--line2);border-radius:var(--r);background:var(--surface);outline:0;margin-bottom:8px}
.quick input[type=text]:focus{border-color:var(--state)}
.quick .seg button{height:24px}
.d-v select{border:1px solid transparent;border-radius:var(--r);background:var(--hover);padding:3px 6px;min-width:0;max-width:100%}
.d-child{display:flex;gap:6px}
.d-child input{flex:1;min-width:0;height:28px;padding:0 8px;border:1px solid var(--line2);border-radius:var(--r);background:var(--surface);outline:0}
.d-child input:focus{border-color:var(--state)}
.d-del{margin-top:auto;align-self:flex-start;color:var(--faint);font-size:12.5px;padding:3px 0}
.d-del:hover{color:var(--danger)}
.dlg-scrim{position:fixed;inset:0;background:rgba(0,0,0,.28);z-index:70}
.dlg{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:71;width:min(360px,calc(100vw - 32px));max-height:calc(100dvh - 32px);overflow:auto;background:var(--surface);border:1px solid var(--line2);border-radius:var(--r);box-shadow:var(--shadow);padding:16px;display:flex;flex-direction:column;gap:12px}
.dlg h3{margin:0;font-size:15px;font-weight:650}
.dlg label.f{display:flex;flex-direction:column;gap:4px;font-size:12.5px;color:var(--muted)}
.dlg input[type=text],.dlg input[type=date]{height:32px;padding:0 8px;border:1px solid var(--line2);border-radius:var(--r);background:var(--surface);color:var(--ink);outline:0;font-size:14px}
.dlg input:focus{border-color:var(--state)}
.dlg[data-k=list] .only-proj,.dlg[data-k=birthday] .only-proj{display:none}
.kinds{display:flex;gap:4px}
.kinds label{flex:1}
.kinds input{position:absolute;opacity:0;pointer-events:none}
.kinds span{display:flex;align-items:center;justify-content:center;height:28px;border-radius:var(--r);background:var(--hover);color:var(--muted);font-size:13px;cursor:pointer}
.kinds input:checked+span{background:var(--state);color:var(--on-state);font-weight:600}
.kinds input:focus-visible+span{outline:2px solid var(--state);outline-offset:1px}
.swatches{display:flex;flex-wrap:wrap;gap:6px}
.swatches input{position:absolute;opacity:0;pointer-events:none}
.swatches span{display:block;width:22px;height:22px;border-radius:var(--dot);background:var(--c);cursor:pointer}
.swatches input:checked+span{box-shadow:0 0 0 2px var(--surface),0 0 0 4px var(--ink)}
.swatches input:focus-visible+span{outline:2px solid var(--state);outline-offset:3px}
.dlg-acts{display:flex;align-items:center;gap:8px}
.dlg-acts .sp{flex:1}
.dlg-acts .del{color:var(--danger);font-size:13px}
