:root{--bg:#f7f8fa;--surface:#ffffff;--line:#e4e7ec;--line-2:#cbd3e0;--ink:#1a202c;--ink-2:#5b6472;--ink-3:#98a1b0;--accent:#2f6fed;--radius:14px;--shadow-sm:0 1px 2px rgba(16,24,40,.06), 0 2px 8px rgba(16,24,40,.05);--shadow-md:0 4px 10px rgba(16,24,40,.08), 0 12px 28px rgba(16,24,40,.1);--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;--sans:-apple-system,"Segoe UI",Inter,Roboto,sans-serif}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;overflow:hidden;background:var(--bg);overscroll-behavior:none;color:var(--ink);font-family:var(--sans);user-select:none;-webkit-user-select:none}#viewport{position:fixed;top:0;right:0;bottom:0;left:0;cursor:grab;overflow:hidden;background-image:radial-gradient(circle,#dde2ea 1px,transparent 1px);background-size:24px 24px}#viewport.panning{cursor:grabbing}#world{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform}#edges{position:absolute;left:0;top:0;width:1px;height:1px;overflow:visible;pointer-events:none}#edges line{transition:opacity .25s}.node{position:absolute;display:flex;align-items:center;justify-content:center;text-align:center;border-radius:50%;cursor:pointer;transform:translate(-50%,-50%);background:var(--surface);border:1.5px solid hsl(var(--h) 45% 62%);box-shadow:var(--shadow-sm);transition:opacity .25s,box-shadow .15s,border-color .15s,filter .25s}.node .title{pointer-events:auto;line-height:1.2;padding:5px;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;word-break:break-word}.node.cat{width:100px;height:100px;font-size:13.5px;font-weight:650;letter-spacing:.01em;background:hsl(var(--h) 55% 97%);border-width:2px;border-color:hsl(var(--h) 55% 48%);color:hsl(var(--h) 55% 30%)}.node.sub{width:72px;height:72px;font-size:11px;font-weight:600;background:hsl(var(--h) 50% 98.5%);border-color:hsl(var(--h) 45% 55%);color:#2a3342}.node.task{width:60px;height:60px;font-size:9.5px;color:#3d4656}.node:hover{box-shadow:var(--shadow-md);border-color:hsl(var(--h) 55% 48%)}.node.selected{outline:2px solid var(--accent);outline-offset:3px}.node.p1{border-color:#e28c12;border-width:2px}.node.p2{border-color:#dd2c35;border-width:2px;box-shadow:0 0 0 4px #e8303a24,var(--shadow-sm)}.node.p2.pulse{animation:hotpulse 1.8s ease-in-out infinite}@keyframes hotpulse{50%{box-shadow:0 0 0 7px #e8303a33,var(--shadow-sm)}}.node.done{transform:translate(-50%,-50%) scale(.72);opacity:.42;filter:grayscale(.7)}.node.done .title{text-decoration:line-through;color:var(--ink-3)}.node.grey{border-color:var(--line-2);background:#f2f4f7;color:var(--ink-2)}.node.grey.cat{color:var(--ink-2)}.node.hidden{display:none}.ctl{position:absolute;width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;line-height:1;background:var(--surface);border:1px solid var(--line);color:var(--ink-2);opacity:0;transition:opacity .15s;z-index:3;box-shadow:var(--shadow-sm)}.node:hover .ctl,.node.selected .ctl{opacity:1}.ctl:hover{color:var(--accent);border-color:var(--accent)}.ctl.add{right:-9px;top:50%;transform:translateY(-50%)}.ctl.check{left:-9px;top:50%;transform:translateY(-50%)}.ctl.eye{left:50%;top:-11px;transform:translate(-50%);font-size:10px}.ctl.grab{left:50%;bottom:-11px;transform:translate(-50%);cursor:grab;font-size:11px;letter-spacing:-1px}.ctl.grab:active{cursor:grabbing;color:var(--accent);border-color:var(--accent)}.node.done .ctl.check{color:#2e9e5d}@keyframes pop{0%{transform:translate(-50%,-50%) scale(.25);opacity:0}70%{transform:translate(-50%,-50%) scale(1.07);opacity:1}to{transform:translate(-50%,-50%) scale(1)}}.node.pop{animation:pop .32s cubic-bezier(.2,.7,.3,1)}.node .due{position:absolute;top:calc(100% + 5px);left:50%;transform:translate(-50%);font-size:9px;font-family:var(--mono);padding:1.5px 7px;border-radius:7px;white-space:nowrap;background:#eef1f6;border:1px solid var(--line);color:var(--ink-2);pointer-events:none}.node .due.over{background:#fdecec;border-color:#f0b4b8;color:#c0303a;font-weight:600}.node.dimmed{opacity:.12;pointer-events:none}#world.focus .node.active{box-shadow:0 0 0 4px hsl(var(--h) 70% 50% / .18),var(--shadow-sm)}#world.focus .node.active{animation:daypulse 2.4s ease-in-out infinite}@keyframes daypulse{50%{box-shadow:0 0 0 8px hsl(var(--h) 70% 50% / .22),var(--shadow-sm)}}#topbar{position:fixed;top:14px;right:16px;display:flex;gap:8px;z-index:20}#topbar button{background:var(--surface);border:1px solid var(--line);color:var(--ink-2);border-radius:9px;padding:6px 12px;font-size:12.5px;cursor:pointer;font-family:var(--sans);box-shadow:var(--shadow-sm)}#topbar button:hover{color:var(--ink);border-color:var(--line-2)}#logo{position:fixed;top:16px;left:18px;font-family:var(--mono);font-size:13px;letter-spacing:.28em;color:var(--ink-3);z-index:20}#logo b{color:var(--accent);font-weight:600}#capture{position:fixed;left:50%;bottom:96px;transform:translate(-50%);width:min(620px,92vw);display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:9px 11px;z-index:30;box-shadow:var(--shadow-md)}#chip{flex:none;display:flex;align-items:center;gap:6px;max-width:180px;padding:5px 11px;border-radius:9px;font-size:11.5px;font-weight:550;cursor:pointer;white-space:nowrap;overflow:hidden;border:1.5px dashed hsl(var(--h,220) 40% 62%);color:hsl(var(--h,220) 45% 38%)}#chip.manual{border-style:solid;background:hsl(var(--h) 55% 95%)}#chip .x{opacity:.6;font-size:10px}#datechip{flex:none;display:flex;align-items:center;gap:6px;padding:5px 11px;border-radius:9px;font-size:11.5px;font-weight:550;cursor:pointer;white-space:nowrap;border:1.5px solid #bcd0f7;background:#eef3ff;color:var(--accent)}#datechip .x{opacity:.65;font-size:10px}#datechip:hover .x{opacity:1}#capture input{flex:1;background:none;border:none;outline:none;color:var(--ink);font-size:14px;font-family:var(--sans);user-select:text;-webkit-user-select:text}#capture input::placeholder{color:var(--ink-3)}#capture kbd{flex:none;font-family:var(--mono);font-size:10px;color:var(--ink-3);border:1px solid var(--line);border-radius:5px;padding:2px 6px;background:#f6f7f9}#chipmenu{position:fixed;bottom:150px;left:50%;transform:translate(-50%);width:240px;max-height:300px;overflow-y:auto;background:var(--surface);border:1px solid var(--line);border-radius:12px;z-index:40;padding:6px;display:none;box-shadow:var(--shadow-md)}#chipmenu.open{display:block}#chipmenu .item{padding:7px 10px;border-radius:8px;font-size:12.5px;cursor:pointer;display:flex;gap:8px;align-items:center;color:var(--ink)}#chipmenu .item:hover{background:#f2f4f7}#chipmenu .item .dot{width:9px;height:9px;border-radius:50%;background:hsl(var(--h) 55% 50%)}#chipmenu .item.sub{padding-left:26px;font-size:12px;color:var(--ink-2)}#datestrip{position:fixed;left:0;right:0;bottom:0;height:78px;display:flex;align-items:flex-end;background:var(--surface);border-top:1px solid var(--line);z-index:25}#days{display:flex;align-items:flex-end;gap:3px;overflow-x:auto;padding:8px 14px 10px;width:100%;scrollbar-width:none}#days::-webkit-scrollbar{display:none}.day{flex:none;width:34px;display:flex;flex-direction:column;align-items:center;gap:4px;cursor:pointer;padding:4px 2px;border-radius:8px;border:1px solid transparent}.day:hover{background:#f2f4f7}.day.sel{border-color:var(--accent);background:#f0f5fe}.day .bars{display:flex;flex-direction:column-reverse;justify-content:flex-start;height:26px;width:12px;gap:1px}.day .bars i{display:block;width:100%;border-radius:1.5px;background:hsl(var(--h) 55% 52%)}.day .dues{display:flex;gap:2.5px;height:7px;align-items:center;justify-content:center}.day .dues i{width:5px;height:5px;border-radius:50%;background:hsl(var(--h) 55% 50%)}.day .dues i.over{background:#e5484d;box-shadow:0 0 0 2px #fdecec}.day.future .lab{color:#b3bccb}.day.today{border-left:1px solid var(--line);border-right:1px solid var(--line);border-radius:8px}.day .lab{font-family:var(--mono);font-size:9px;color:var(--ink-3);line-height:1.2;text-align:center}.day.today .lab{color:var(--accent);font-weight:600}.day .mon{font-size:8px;color:var(--ink-3);height:9px}#framebtn{position:fixed;right:16px;bottom:88px;z-index:26;background:var(--surface);border:1px solid var(--line);color:var(--ink-2);border-radius:9px;padding:5px 11px;font-size:11px;cursor:pointer;display:none;box-shadow:var(--shadow-sm)}#framebtn.show{display:block}#framebtn:hover{color:var(--ink);border-color:var(--line-2)}#toast{position:fixed;left:50%;bottom:160px;transform:translate(-50%) translateY(8px);opacity:0;background:#111827;color:#f3f4f6;border-radius:10px;padding:8px 14px;font-size:12.5px;z-index:60;transition:all .25s;pointer-events:none;box-shadow:var(--shadow-md)}#toast.show{opacity:1;transform:translate(-50%) translateY(0)}#help{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;z-index:70;display:none;align-items:center;justify-content:center}#help.open{display:flex}#help .card{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:26px 30px;width:min(460px,90vw);box-shadow:var(--shadow-md)}#help h2{font-size:13px;letter-spacing:.2em;color:var(--ink-3);margin-bottom:16px;font-family:var(--mono)}#help table{width:100%;border-collapse:collapse;font-size:12.5px}#help td{padding:5px 0;color:var(--ink-2)}#help td:first-child{width:150px}#help kbd{font-family:var(--mono);font-size:11px;background:#f6f7f9;border:1px solid var(--line);border-radius:5px;padding:2px 7px;color:var(--ink)}#help .syn{margin-top:14px;font-size:11.5px;color:var(--ink-3);font-family:var(--mono);line-height:1.7}.spark{position:fixed;width:10px;height:10px;border-radius:50%;z-index:50;pointer-events:none;background:hsl(var(--h) 65% 48%);box-shadow:0 0 0 3px hsl(var(--h) 65% 48% / .25)}#pop{position:fixed;z-index:45;width:250px;background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow-md);padding:10px 12px;-webkit-user-select:none;user-select:none}#pop .pr{display:flex;align-items:center;gap:8px;margin:7px 0}#pop .pr.head{margin-top:0;justify-content:space-between}#pop .pl{flex:none;width:52px;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);font-family:var(--mono)}#pop-kind{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);font-family:var(--mono)}#pop-close{background:none;border:none;color:var(--ink-3);font-size:16px;cursor:pointer;line-height:1;padding:2px 6px;border-radius:6px}#pop-close:hover{background:#f2f4f7;color:var(--ink)}#pop input[type=text],#pop-title{flex:1;min-width:0;border:1px solid var(--line);border-radius:8px;padding:7px 9px;font-size:13px;color:var(--ink);background:var(--surface);outline:none;font-family:var(--sans);user-select:text;-webkit-user-select:text}#pop-title:focus{border-color:var(--accent)}#pop .swatches{display:flex;gap:6px;flex-wrap:wrap}#pop .sw{width:20px;height:20px;border-radius:50%;cursor:pointer;border:2px solid transparent;background:hsl(var(--h) 60% 55%)}#pop .sw.inherit{background:var(--surface);border:1.5px dashed var(--line-2);position:relative}#pop .sw.on{border-color:var(--ink);box-shadow:0 0 0 2px var(--surface) inset}#pop select{flex:1;min-width:0;border:1px solid var(--line);border-radius:8px;padding:6px 7px;font-size:12.5px;color:var(--ink);background:var(--surface);outline:none}#pop input[type=date]{flex:1;min-width:0;border:1px solid var(--line);border-radius:8px;padding:6px 8px;font-size:12.5px;color:var(--ink);background:var(--surface);outline:none;font-family:var(--sans)}#pop-dateclear{background:none;border:1px solid var(--line);border-radius:7px;color:var(--ink-3);cursor:pointer;padding:4px 8px;font-size:12px}#pop-dateclear:hover{color:#c0303a;border-color:#f0b4b8}#pop .seg{display:flex;flex:1;border:1px solid var(--line);border-radius:8px;overflow:hidden}#pop .seg button{flex:1;border:none;background:var(--surface);color:var(--ink-2);font-size:11.5px;padding:6px 0;cursor:pointer;border-right:1px solid var(--line)}#pop .seg button:last-child{border-right:none}#pop .seg button.on{background:#eef3ff;color:var(--accent);font-weight:600}#pop .wide{flex:1;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink-2);font-size:12.5px;padding:7px 0;cursor:pointer}#pop .wide:hover{border-color:var(--line-2);color:var(--ink)}#pop .danger{color:#c0303a;border-color:#f0d4d6}#pop .danger:hover{border-color:#e5a3a8;background:#fdf7f7;color:#c0303a}#pop .danger.armed{background:#c0303a;border-color:#c0303a;color:#fff;font-weight:600}#viewport,.node,.ctl{touch-action:none}@media (pointer:coarse){.ctl{width:30px;height:30px;font-size:15px}.ctl.add{right:-14px}.ctl.check{left:-14px}.ctl.eye{top:-15px}.ctl.grab{bottom:-15px;font-size:13px}.node:hover .ctl{opacity:0}.node.selected .ctl{opacity:1}}@media (max-width:640px){#logo{font-size:11px;top:12px;left:12px;letter-spacing:.2em}#topbar{top:9px;right:9px;gap:5px}#topbar button{padding:5px 9px;font-size:11px}#capture{bottom:76px;width:94vw;padding:7px 8px;gap:6px}#capture input{font-size:16px}#capture kbd{display:none}#chip{max-width:120px;font-size:11px;padding:4px 9px}#chipmenu{bottom:136px;width:80vw}#datestrip{height:64px}#days{padding:6px 10px 8px}.day{width:30px}.day .bars{height:20px}#framebtn{bottom:70px;right:10px}#toast{bottom:142px;max-width:90vw;text-align:center}#pop{left:3vw!important;right:3vw;top:auto!important;bottom:138px;width:auto}#pop-title,#pop select,#pop input[type=date]{font-size:16px}#help .card{padding:20px}#help td:first-child{width:110px}}@media (prefers-reduced-motion: reduce){.node,.node.p2.pulse,#world.focus .node.active{animation:none!important;transition:none}.spark{display:none}}
