:root{--navy:#036;--ink:#1b2533;--muted:#5d6b7c;--line:#dfe4ea;--bg:#f6f7f9;--surface:#fff;--danger-bg:#fdecea;--danger-ink:#8c2a20;color:var(--ink);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:16px;line-height:1.5}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);margin:0}.shell{flex-direction:column;min-height:100%;display:flex}.topbar{background:var(--surface);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;padding:10px 20px;display:flex}.logo{width:auto;height:32px;display:block}.topbar-right{align-items:center;gap:10px;display:flex}.blank{flex:1}.lang-toggle{min-height:36px;font:inherit;color:var(--navy);border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:8px;align-items:center;gap:6px;padding:6px 10px;font-size:13px;font-weight:600;display:inline-flex}.lang-toggle:hover{background:var(--bg)}.user-menu{position:relative}.avatar{cursor:pointer;width:36px;height:36px;font:inherit;color:#fff;background:var(--navy);border:0;border-radius:50%;font-weight:600}.menu{z-index:10;background:var(--surface);border:1px solid var(--line);border-radius:10px;min-width:240px;max-width:calc(100vw - 32px);position:absolute;top:calc(100% + 8px);right:0;overflow:hidden;box-shadow:0 8px 24px #0000001f}.menu-who{border-bottom:1px solid var(--line);overflow-wrap:anywhere;flex-direction:column;gap:2px;padding:12px 14px;display:flex}.menu-who span{color:var(--muted);font-size:13px}.menu button{text-align:left;width:100%;font:inherit;color:var(--ink);cursor:pointer;background:0 0;border:0;padding:12px 14px}.menu button:hover:not(:disabled){background:var(--bg)}.center{justify-content:center;align-items:center;min-height:100%;padding:16px;display:flex;position:relative}.corner{position:absolute;top:12px;right:16px}.card{text-align:center;background:var(--surface);border:1px solid var(--line);border-radius:14px;width:100%;max-width:380px;padding:32px 28px}.card h1{margin:20px 0 4px;font-size:20px}.card p{color:var(--muted);margin:0 0 16px}.card code{overflow-wrap:anywhere;margin-bottom:16px;font-size:12px;display:block}.logo-large{width:220px;max-width:100%;height:auto}.primary{width:100%;font:inherit;color:#fff;background:var(--navy);cursor:pointer;border:0;border-radius:8px;padding:11px 16px;font-weight:600;text-decoration:none;display:inline-block}.primary:hover{background:#00264d}.card p.error{color:var(--danger-ink);background:var(--danger-bg);border-radius:8px;padding:10px 12px}.muted{color:var(--muted)}:focus-visible{outline:2px solid var(--navy);outline-offset:2px}.page{flex:1;width:100%;max-width:720px;margin:0 auto;padding:24px 16px 48px}.page-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.page-head h1{margin:0;font-size:20px;font-weight:600}.app-list,.rows{margin:0;padding:0;list-style:none}.app-list{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:4px 16px}.app-row{align-items:center;gap:12px;padding:10px 0;display:flex}.app-row+.app-row{border-top:1px solid var(--line)}.app-link{min-width:0;color:inherit;flex:1;align-items:center;gap:12px;text-decoration:none;display:flex}.app-link:hover .app-name{text-decoration:underline}.app-name{font-weight:600}.tile{border-radius:9px;flex:none;justify-content:center;align-items:center;width:36px;height:36px;font-weight:700;display:inline-flex}.who{flex-direction:column;flex:1;min-width:0;display:flex}.who-name{align-items:center;gap:6px;min-width:0;display:flex}.clip,.who-sub{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.who-sub{color:var(--muted);font-size:13px}.dot{flex:none}.icon-btn{all:unset;box-sizing:border-box;cursor:pointer;width:36px;height:36px;color:var(--muted);border:1px solid var(--line);border-radius:50%;flex:none;justify-content:center;align-items:center;display:inline-flex}.icon-btn:hover{background:var(--bg);color:var(--navy)}.icon-btn.plain{border-color:#0000}.icon-btn.accent{color:var(--navy);border-color:var(--navy)}.icon-btn:disabled{opacity:.5;cursor:default}.icon-btn:focus-visible,.pill:focus-visible,.switch:focus-visible{outline:2px solid var(--navy);outline-offset:2px}.pill{all:unset;box-sizing:border-box;cursor:pointer;border:1px solid var(--line);min-height:36px;color:var(--ink);background:var(--surface);border-radius:18px;align-items:center;gap:6px;padding:0 14px;font-size:14px;display:inline-flex}.pill:hover{background:var(--bg)}.dialog{width:min(440px,100vw - 32px);max-height:calc(100vh - 48px);color:var(--ink);border:1px solid var(--line);border-radius:14px;padding:16px 20px 18px;box-shadow:0 12px 40px #0000002e}.dialog::backdrop{background:#0f172a66}.dialog-head{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.dialog-head h2{margin:0;font-size:17px}.everyone{background:var(--bg);border-radius:10px;align-items:center;gap:10px;margin-bottom:10px;padding:10px 12px;display:flex}.everyone>span:not(.switch-pair){flex:1;font-size:14px;font-weight:600}.search{width:100%;min-height:38px;font:inherit;border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:8px;padding:8px 12px;font-size:14px}.rows .row{border-top:1px solid var(--line);align-items:center;gap:10px;padding:9px 12px;font-size:14px;display:flex}.rows .row:first-child{border-top:0}.rows{margin-top:6px}.row.off .who-name{color:var(--muted)}.initial{width:30px;height:30px;color:var(--navy);background:#e6eef7;border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:13px;font-weight:700;display:inline-flex}.muted-initial{color:var(--muted);background:var(--bg)}.role-select{min-width:124px;min-height:34px;font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:8px;flex:none;padding:4px 8px;font-size:14px}.fixed-role{min-width:124px;color:var(--muted);text-align:right;flex:none;font-size:13px}.dot{background:#2f74c0;border-radius:50%;width:7px;height:7px;display:inline-block}.hint{color:var(--muted);margin:10px 0 0;font-size:12px}.add-row{gap:8px;margin-bottom:4px;display:flex}.inline-error{color:var(--danger-ink);background:var(--danger-bg);border-radius:8px;margin:8px 0;padding:8px 10px;font-size:14px}.switch{all:unset;box-sizing:border-box;cursor:pointer;background:#c9d1db;border-radius:11px;flex:none;width:38px;height:22px;position:relative}.switch span{background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .15s;position:absolute;top:3px;left:3px}.switch[aria-checked=true]{background:var(--navy)}.switch[aria-checked=true] span{transform:translate(16px)}.switch:disabled{opacity:.45;cursor:default}@media (width<=480px){.fixed-role{min-width:92px}}.page-head .grow{flex:1;min-width:0}.back{width:36px;height:36px;color:var(--ink);border-radius:50%;flex:none;justify-content:center;align-items:center;margin-left:-8px;display:inline-flex}.back:hover{background:var(--line)}.app-help{margin:0 0 12px;font-size:14px}.item-text{overflow-wrap:anywhere}.page .add-row{margin-bottom:12px}.pill:disabled{opacity:.5;cursor:default}.logo-link{display:inline-flex}.logo-button{all:unset;cursor:default;margin:0 auto;display:block}.logo-button:focus-visible{outline:2px solid var(--navy);outline-offset:4px;border-radius:6px}.stack{flex-direction:column;gap:10px;margin-top:4px;display:flex}.stack .primary{text-align:center}.primary:disabled{opacity:.6;cursor:default}.switch-pair{flex:none;justify-content:space-between;align-items:center;width:92px;padding:0 3px;display:inline-flex}.switch-head{width:100%;color:var(--muted);justify-content:flex-end;padding:4px 15px 4px 0;font-size:11px;display:flex}.switch-head span{text-align:center;width:38px}.switch-head span+span{margin-left:16px}.switch-pair .switch{margin:0}.fixed-role{text-align:right;min-width:92px}a.icon-btn{text-decoration:none}.placeholder{text-align:center;background:var(--surface);border:1px dashed var(--line);color:var(--muted);border-radius:14px;padding:28px 20px}.placeholder p{max-width:460px;margin:12px auto 0}.badge{color:var(--navy);background:#e6eef7;border-radius:10px;padding:2px 10px;font-size:12px;font-weight:600;display:inline-block}.page-wide{max-width:none}.ts-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:6px;display:flex}.ts-legend{color:var(--muted);flex-wrap:wrap;gap:14px;font-size:12px;display:flex}.ts-legend span{align-items:center;gap:6px;display:inline-flex}.ts-legend i{border-radius:4px;width:20px;height:4px;display:inline-block}.ts-key{border:2px dashed #bcc4d2;border-radius:4px;width:18px;height:10px;display:inline-block}.ts-key.warn{border-color:#eeb04a}.ts-hint{margin:0 0 10px;font-size:13px}.ts-small{margin:6px 0 0;font-size:12.5px}.ts-dot{background:#30d158;border-radius:50%;width:9px;height:9px;margin:0 6px 1px 0;display:inline-block;box-shadow:0 0 0 3px #30d15830}.ts-wrap{width:100%;position:relative;overflow:hidden}.ts-stage{transform-origin:0 0;grid-template-columns:70px repeat(7,215px);align-content:start;gap:16px 20px;font-family:ui-rounded,SF Pro Rounded,system-ui,-apple-system,sans-serif;display:grid;position:relative}.ts-lane{background:#fff;border:1px solid #e5e7ee;border-radius:28px;grid-column:1/-1;position:relative}.ts-lane b{writing-mode:vertical-rl;letter-spacing:.14em;text-transform:uppercase;color:#a1a1a6;white-space:nowrap;font-size:12px;font-weight:700;position:absolute;top:50%;left:20px;transform:translateY(-50%)rotate(180deg)}.ts-links{pointer-events:none;z-index:1;position:absolute;top:0;left:0;overflow:visible}.ts-track{fill:none;stroke-width:5px;opacity:.16;stroke-linecap:round}.ts-flow{fill:none;stroke-width:3px;stroke-linecap:round;stroke-dasharray:2 11;filter:drop-shadow(0 0 5px);animation:1s linear infinite ts-flow}@keyframes ts-flow{to{stroke-dashoffset:-13px}}.ts-pulse{filter:drop-shadow(0 0 5px)}.ts-led{animation:2s infinite ts-blink}@keyframes ts-blink{50%{opacity:.25}}@media (prefers-reduced-motion:reduce){.ts-flow,.ts-led{animation:none}.ts-pulse{display:none}}.ts-card{z-index:2;background:#fff;border:1px solid #e3e6ee;border-radius:22px;align-self:start;margin:30px 0;padding:16px;transition:transform .2s,box-shadow .2s;position:relative;box-shadow:0 1px 2px #1a2b4a10,0 14px 28px -12px #1a2b4a30}.ts-card.ts-click{cursor:pointer}.ts-card.ts-click:hover{transform:translateY(-4px);box-shadow:0 24px 44px -10px #1a2b4a45}.ts-card:focus-visible,.ts-tile:focus-visible{outline:3px solid var(--navy);outline-offset:2px}.ts-sel{outline-offset:2px;outline:3px solid #29abe3}.ts-head{align-items:center;gap:12px;display:flex}.ts-head>div{min-width:0}.ts-head svg{filter:drop-shadow(0 8px 8px #1a2b4a30);flex:none;width:54px;height:54px}.ts-head h3{letter-spacing:-.01em;overflow-wrap:anywhere;margin:0;font-size:16px}.ts-head p{color:var(--muted);margin:1px 0 0;font-size:12.5px}.ts-bd{color:#5b6472;z-index:3;background:#eceef3;border:1px solid #fff;border-radius:999px;padding:3px 10px;font-size:11px;font-weight:700;position:absolute;top:-10px;right:14px}.ts-bd.test,.ts-bd.unk{color:#a35f00;background:#fff1d6}.ts-bd.part{color:#0b66b3;background:#e3f1fe}[data-st=plan]{box-shadow:none!important;background:#fafbfd!important;border:2px dashed #bcc4d2!important}[data-st=plan] .ts-head svg,[data-st=plan] .ts-app{filter:grayscale()opacity(.5)}[data-st=test],[data-st=unk]{border:2px dashed #eeb04a!important}[data-st=test] .ts-head svg,[data-st=test] .ts-app{filter:grayscale(.6)opacity(.75)}[data-st=idle]{opacity:.62}.ts-group h3{font-size:15px}.ts-tiles{grid-template-columns:1fr 1fr;gap:12px;margin-top:14px;display:grid}.ts-tile{background:#f7f8fb;border:1px solid #e8ebf2;border-radius:18px;padding:12px;transition:transform .2s;position:relative;box-shadow:0 8px 18px -8px #1a2b4a35}.ts-tile.ts-click{cursor:pointer}.ts-tile.ts-click:hover{transform:translateY(-3px)}.ts-tile .ts-bd{font-size:10.5px;top:-9px;right:8px}.ts-app{color:#fff;border-radius:12px;place-items:center;width:42px;height:42px;font-size:14px;font-weight:800;display:grid;box-shadow:0 6px 12px -3px #1a2b4a50,inset 0 1.5px #ffffff80,inset 0 -6px 10px #0002}.ts-tile b{overflow-wrap:anywhere;margin-top:7px;font-size:13px;display:block}.ts-tile small{color:var(--muted);font-size:11.5px}.ts-panel{z-index:30;border-left:1px solid var(--line);background:#fff;width:420px;max-width:100%;position:fixed;top:0;bottom:0;right:0;overflow:auto;box-shadow:-20px 0 50px #1a2b4a22}.ts-panel-in{padding:22px}.ts-x{float:right;cursor:pointer;background:#eef1f6;border:0;border-radius:50%;width:32px;height:32px;font-size:18px;line-height:1}.ts-panel h2{letter-spacing:-.02em;color:var(--navy);margin:0;font-size:22px}.ts-sub{color:var(--muted);margin:2px 0 10px}.ts-panel h4{letter-spacing:.1em;text-transform:uppercase;color:#8a919c;margin:20px 0 8px;font-size:11px}.ts-status{color:#13794a;background:#e5f7ec;border-radius:999px;margin:0 0 8px;padding:3px 10px;font-size:12px;font-weight:700;display:inline-block}.ts-status.plan,.ts-status.idle{color:#5b6472;background:#eceef3}.ts-status.test,.ts-status.unk{color:#a35f00;background:#fff1d6}.ts-status.part{color:#0b66b3;background:#e3f1fe}.ts-lock{color:#305a85;background:#eef4fb;border-radius:12px;margin:0 0 6px;padding:8px 12px;font-size:12.5px}.ts-box{background:#f5f7fb;border-radius:16px;padding:6px 14px}.ts-f{border-bottom:1px solid #e8edf5;justify-content:space-between;align-items:baseline;gap:10px;padding:8px 0;font-size:13px;display:flex}.ts-f:last-child{border:0}.ts-f span{color:var(--muted);white-space:nowrap}.ts-f em{text-align:right;font-style:normal;font-weight:600}.ts-f.stk{flex-direction:column;gap:1px}.ts-f.stk em{text-align:left}.ts-f em.mono{color:#0b3a66;background:#eaf0f8;border-radius:7px;padding:1px 7px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:12px}.ts-f em.warn{color:#b26a00;font-weight:500}.ts-f em.todo{color:#a1a1a6;border:1px dashed #cfd6e2;border-radius:7px;padding:0 7px;font-weight:500}.ts-notes{color:var(--muted);margin:0;padding-left:18px;font-size:12.5px}.ts-notes li{margin:4px 0}.ts-person{border-bottom:1px solid #e8edf5;align-items:center;gap:10px;padding:8px 0;display:flex}.ts-person:last-child{border:0}.ts-person small{color:var(--muted);font-size:11.5px;display:block}.ts-person .icon-btn{margin-left:auto}.ts-av{color:#fff;background:linear-gradient(135deg,#7bd0ff,#7a5cff);border-radius:50%;flex:none;place-items:center;width:32px;height:32px;font-size:13px;font-weight:700;display:grid}.ts-empty{color:var(--muted);padding:10px 0;font-size:13px}.ts-add{gap:8px;margin-top:10px;display:grid}.ts-check{color:var(--muted);align-items:center;gap:8px;margin-top:8px;font-size:13px;display:flex}.ts-chips{flex-wrap:wrap;gap:6px;display:flex}.ts-chip{color:var(--navy);background:#e9f2fd;border-radius:999px;align-items:center;gap:4px;padding:3px 10px;font-size:12px;display:inline-flex}.ts-chip button{cursor:pointer;color:#6b7a90;background:0 0;border:0;padding:0 0 0 2px;font-size:14px;line-height:1}.ts-note{background:#fff8e6;border:1px solid #f3e0a8;border-radius:12px;margin:14px 0 0;padding:9px 12px;font-size:12.5px}.ts-actions{flex-wrap:wrap;gap:8px;margin-top:16px;display:flex}.ts-primary{background:var(--navy);color:#fff;border-color:var(--navy)}.ts-primary:hover{background:#00264d}.ts-danger{color:var(--danger-ink)}.ts-form{gap:10px;margin-top:12px;display:grid}.ts-field{color:var(--muted);gap:4px;font-size:12px;display:grid}.ts-row2{grid-template-columns:1fr 1fr;align-items:end;gap:8px;display:grid}.ts-row3{grid-template-columns:2fr 1fr 1fr;gap:8px;display:grid}.ts-detail-row{grid-template-columns:1fr 1.3fr 82px 28px;align-items:center;gap:6px;display:grid}@media (width<=480px){.ts-panel{width:100%}.ts-detail-row{grid-template-columns:1fr 1fr}}
