:root{--bg:#f5f6f8;--surface:#fff;--ink:#1b2140;--muted:#5f6680;--line:#e1e4ec;--accent:#3348e8;--accent-soft:#e7eafe;--chip:#eceef4;--dot-coral:#ff6b4a;--dot-sun:#f2b705;--dot-mint:#1fa67a;--dot-violet:#8e5be8}@media (prefers-color-scheme:dark){:root{--bg:#0f1222;--surface:#171b30;--ink:#e7e9f3;--muted:#9aa0bc;--line:#272c47;--accent:#7b8cff;--accent-soft:#20275a;--chip:#21263f}html{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;word-break:keep-all;font-family:IBM Plex Sans KR,Apple SD Gothic Neo,system-ui,sans-serif;line-height:1.6}a{color:inherit;text-decoration:none}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.shell{max-width:960px;margin:0 auto;padding:0 1.25rem 4rem}.nav{border-bottom:1px solid var(--line);align-items:center;gap:1.5rem;margin-bottom:2rem;padding:1.1rem 0;display:flex}.nav .brand{color:var(--ink);align-items:center;gap:.5rem;margin-right:auto;font-size:1.05rem;font-weight:700;display:inline-flex}.nav a{color:var(--muted)}.nav a.active,.nav a:hover{color:var(--ink)}h1{letter-spacing:-.01em;margin-bottom:.25rem;font-size:1.75rem}h2{color:var(--muted);margin:2rem 0 .75rem;font-size:1rem;font-weight:600}.muted{color:var(--muted)}.small{font-size:.85rem}.search{gap:.5rem;margin:1.25rem 0 1.5rem;display:flex}.search input{border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:10px;flex:1;padding:.65rem .9rem;font-size:1rem}.search button{background:var(--ink);color:var(--bg);cursor:pointer;border:0;border-radius:10px;padding:.65rem 1rem}.grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:.85rem;display:grid}.card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:1rem 1.1rem;transition:border-color .15s,transform .15s;display:block}.card:hover{border-color:var(--accent);transform:translateY(-1px)}.card .name{font-size:1.05rem;font-weight:700}.card .sub{color:var(--muted);font-size:.9rem}.card .summary{-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-top:.5rem;font-size:.9rem;display:-webkit-box;overflow:hidden}.dots{vertical-align:middle;gap:3px;margin-left:.4rem;display:inline-flex}.dots i{background:var(--line);border-radius:50%;width:6px;height:6px}.dots i.on{background:var(--accent)}.chips{flex-wrap:wrap;gap:.35rem;margin-top:.5rem;display:flex}.chip{background:var(--chip);color:var(--muted);border-radius:999px;padding:.15rem .55rem;font-size:.78rem}.chip.kind{background:var(--accent-soft);color:var(--accent)}.profile-head{flex-wrap:wrap;align-items:baseline;gap:.5rem 1rem;display:flex}.facts{grid-template-columns:max-content 1fr;gap:.35rem 1rem;margin-top:1rem;font-size:.95rem;display:grid}.facts dt{color:var(--muted)}.summary-box{background:var(--surface);border:1px solid var(--line);white-space:pre-wrap;border-radius:14px;margin-top:1rem;padding:1rem 1.1rem}.rels{flex-wrap:wrap;gap:.5rem;display:flex}.rel{background:var(--surface);border:1px solid var(--line);border-radius:999px;align-items:center;gap:.4rem;padding:.35rem .8rem;font-size:.9rem;display:inline-flex}.rel .arrow{color:var(--muted)}.rel b{font-weight:600}.timeline{border-left:2px solid var(--line);margin-left:.4rem;padding-left:1.25rem;list-style:none}.timeline li{padding-bottom:1.25rem;position:relative}.timeline li:before{content:"";background:var(--accent);border:2px solid var(--bg);border-radius:50%;width:10px;height:10px;position:absolute;top:.5rem;left:calc(-1.25rem - 6px)}.timeline .meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:.5rem;font-size:.8rem;display:flex}.timeline .content{white-space:pre-wrap;margin-top:.25rem}.timeline .who a{color:var(--accent)}.empty{color:var(--muted);text-align:center;padding:2rem 0}.chip.group{background:var(--accent-soft);color:var(--accent)}.chip.group:hover{text-decoration:underline}.btn,button.primary,button.danger{border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;border-radius:10px;justify-content:center;align-items:center;gap:.3rem;padding:.5rem .95rem;font-size:.95rem;line-height:1.2;display:inline-flex}.btn.small{padding:.35rem .7rem;font-size:.85rem}.btn.ghost{color:var(--muted);border-color:#0000}.btn.ghost:hover{color:var(--accent);border-color:var(--line)}button.primary{background:var(--ink);color:var(--bg);border-color:var(--ink)}button.danger{color:#b42318;background:0 0;border-color:#0000}button.danger:hover{background:var(--accent-soft)}.form{gap:1.25rem;max-width:720px;margin-top:1.25rem;display:grid}.form fieldset{border:1px solid var(--line);background:var(--surface);border-radius:14px;gap:.8rem;padding:1rem 1.1rem 1.1rem;display:grid}.form legend{color:var(--muted);padding:0 .4rem;font-size:.85rem;font-weight:600}.form label{color:var(--muted);font-size:.9rem;display:block}.form label>input,.form label>select,.form label>textarea{width:100%;margin-top:.3rem;display:block}.form input,.form select,.form textarea{border:1px solid var(--line);background:var(--bg);color:var(--ink);font:inherit;border-radius:9px;padding:.55rem .75rem;font-size:.95rem}.form input:focus,.form select:focus,.form textarea:focus{outline:2px solid var(--accent);outline-offset:0;border-color:#0000}.form .row{grid-template-columns:1fr 1fr;gap:.8rem;display:grid}.form .req{color:var(--accent)}.form .hint{opacity:.8;font-size:.78rem;font-weight:400}.form-actions{align-items:center;gap:.6rem;display:flex}.group-picker{gap:.4rem;display:grid}.group-row{grid-template-columns:1fr 180px;align-items:center;gap:.6rem;display:grid}.group-row .check{color:var(--ink);flex-direction:row;align-items:center;gap:.5rem;font-size:.95rem;display:flex}.group-row .check input{width:16px;height:16px;accent-color:var(--accent)}.group-row>input{padding:.4rem .6rem;font-size:.85rem}.note-form{background:var(--surface);border:1px solid var(--line);border-radius:14px;gap:.5rem;margin-bottom:1rem;padding:.8rem .9rem;display:grid}.note-form textarea{border:1px solid var(--line);background:var(--bg);width:100%;color:var(--ink);font:inherit;resize:vertical;border-radius:9px;padding:.55rem .75rem}.note-form-row{flex-wrap:wrap;gap:.4rem;display:flex}.note-form-row input,.note-form-row select{border:1px solid var(--line);background:var(--bg);color:var(--ink);font:inherit;border-radius:8px;padding:.45rem .6rem;font-size:.88rem}.note-form-row input[name=people]{flex:1;min-width:140px}.note-form-row button{margin-left:auto}.rel-form select{border:1px solid var(--line);background:var(--surface);color:var(--ink);font:inherit;border-radius:9px;padding:.5rem .6rem}.rel-form input[name=type]{flex:0 200px}.rel .x-form,.timeline .x-form{display:inline}.x{color:var(--muted);cursor:pointer;background:0 0;border:0;padding:0 .1rem;font-size:1rem;line-height:1}.x:hover{color:#b42318}.rel{gap:.3rem}.rel a{align-items:center;gap:.4rem;display:inline-flex}.dup-warn{background:var(--accent-soft);border:1px solid color-mix(in srgb, var(--accent) 35%, transparent);color:var(--ink);border-radius:10px;gap:.4rem;margin-top:.4rem;padding:.6rem .8rem;font-size:.88rem;display:grid}.dup-warn a{color:var(--accent);text-decoration:underline}.dup-warn .check{color:var(--ink);flex-direction:row;align-items:center;gap:.4rem;display:flex}.dup-warn .check input{width:15px;height:15px;accent-color:var(--accent)}.banner{background:var(--accent-soft);border-radius:12px;margin:1rem 0 0;padding:.8rem 1rem;font-size:.95rem}.merge-form{margin-top:1.5rem}.merge-form select{border:1px solid var(--line);background:var(--bg);min-width:200px;color:var(--ink);font:inherit;border-radius:9px;flex:1;padding:.55rem .75rem}.auth-shell{flex-direction:column;justify-content:center;align-items:center;gap:1.75rem;min-height:100vh;padding:2rem 1rem;display:flex}.auth-brand{align-items:center;gap:.55rem;font-size:1.25rem;font-weight:700;display:inline-flex}.code-inline{background:var(--surface);border:1px solid var(--line);-webkit-user-select:all;user-select:all;word-break:break-all;border-radius:7px;padding:.15rem .45rem;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.88rem}.key-reveal{background:var(--accent-soft);border-radius:12px;gap:.6rem;margin-top:1rem;padding:.9rem 1rem;display:grid}.key-row{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.key-row code{background:var(--surface);border:1px solid var(--line);word-break:break-all;-webkit-user-select:all;user-select:all;border-radius:8px;flex:1;min-width:0;padding:.5rem .7rem;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.88rem}.member-list{gap:.5rem;list-style:none;display:grid}.member-row{background:var(--surface);border:1px solid var(--line);border-radius:12px;align-items:center;gap:.75rem;padding:.6rem .9rem;display:flex}.member-main{flex-direction:column;flex:1;display:flex}.member-main .name{font-weight:600}.member-main .sub{color:var(--muted);font-size:.85rem}.inline-form{flex-wrap:wrap;gap:.5rem;display:flex}.inline-form input{border:1px solid var(--line);background:var(--surface);min-width:160px;color:var(--ink);font:inherit;border-radius:9px;flex:1;padding:.55rem .75rem}@media (max-width:600px){.form .row,.group-row{grid-template-columns:1fr}}.gv{margin-top:1rem}.gv-toolbar{flex-wrap:wrap;align-items:center;gap:.5rem .9rem;margin-bottom:.6rem;display:flex}.gv-search{border:1px solid var(--line);background:var(--surface);min-width:200px;color:var(--ink);font:inherit;border-radius:9px;flex:1;padding:.5rem .75rem}.gv-ctl{color:var(--muted);align-items:center;gap:.4rem;font-size:.85rem;display:inline-flex}.gv-ctl select{border:1px solid var(--line);background:var(--surface);color:var(--ink);font:inherit;border-radius:7px;padding:.3rem .4rem;font-size:.85rem}.gv-ctl.check input{accent-color:var(--accent)}.gv-body{grid-template-columns:1fr 250px;align-items:start;gap:.8rem;display:grid}@media (max-width:760px){.gv-body{grid-template-columns:1fr}}.gv-panel{background:var(--surface);border:1px solid var(--line);border-radius:14px;min-height:200px;padding:.9rem 1rem;font-size:.95rem}.gv-panel h3{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:1rem 0 .4rem;font-size:.8rem}.gv-panel-head{flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:.25rem;font-size:1.05rem;display:flex}.gv-links{flex-wrap:wrap;gap:.4rem;margin-top:.7rem;display:flex}.gv-neighbors{gap:.3rem;list-style:none;display:grid}.gv-neighbors li{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.gv-neighbors button{color:var(--ink);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:.4rem;padding:.15rem 0;display:inline-flex}.gv-neighbors button:hover{color:var(--accent)}.sw{border-radius:50%;flex:none;width:12px;height:12px;display:inline-block}.sw.me{background:var(--accent)}.sw.person{background:#7d87b0}.sw.group{background:var(--dot-mint);border-radius:3px}.legend{color:var(--muted);flex-wrap:wrap;gap:.5rem 1rem;font-size:.8rem;display:flex}.legend span{align-items:center;gap:.35rem;display:inline-flex}.legend .ln{border-top:2px solid var(--muted);width:18px;height:0;display:inline-block}.legend .ln.member{border-top-style:dashed}.graph{background:var(--surface);border:1px solid var(--line);touch-action:none;-webkit-user-select:none;user-select:none;cursor:grab;border-radius:14px;width:100%;height:auto}.graph:active{cursor:grabbing}.graph .edge.lit line{stroke:var(--accent);stroke-opacity:.9;stroke-width:2px}.graph .node .ring{fill:none;stroke:var(--accent);stroke-width:2px;stroke-dasharray:4 3}.graph .node.match circle,.graph .node.match rect{stroke:var(--accent);stroke-width:3px}.graph .node text.sub{fill:var(--muted);font-size:10px;font-weight:400}.graph .edge line{stroke:var(--muted);stroke-width:1.5px;stroke-opacity:.6}.graph .edge.member line{stroke-dasharray:4 4}.graph .edge.me line{stroke-opacity:.3}.graph .edge text{fill:var(--muted);paint-order:stroke;stroke:var(--surface);stroke-width:3px;font-size:10px}.graph .node{cursor:pointer}.graph .node circle,.graph .node rect{stroke:var(--surface);stroke-width:2px}.graph .node.me circle{fill:var(--accent)}.graph .node.person circle{fill:#7d87b0}.graph .node.group rect{fill:var(--dot-mint)}.graph .node text{fill:var(--ink);paint-order:stroke;stroke:var(--surface);stroke-width:3px;font-size:12px;font-weight:600}.graph .node.me text{font-size:13px}
