:root{color-scheme:light;--bg:#F2F3F6;--surface:#FFFFFF;--surface-2:#F6F7F9;--ink:#1B1E27;--ink-2:#525A6A;--ink-3:#848B9A;--line:#E2E5EB;--grid:#D8DCE3;--accent:#B42D5E;--accent-soft:#FBEAF1;--accent-ink:#8E1F48;--ok:#1D7F55;--ok-soft:#E3F3EA;--warn:#94600F;--warn-soft:#FBF0D9;--bad:#B93A33;--bad-soft:#FBE8E6;--info:#2D64A6;--info-soft:#E4EEFA;--mute-soft:#EDEFF3;--k-core:#F7E4EB;--k-master:#E2EAF7;--k-link:#EDEFF3;--shadow:0 1px 2px rgba(20,24,36,.06),0 4px 14px rgba(20,24,36,.05);--font:"Schibsted Grotesk",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;--mono:"IBM Plex Mono",ui-monospace,"SF Mono",Menlo,Consolas,monospace}*{box-sizing:border-box}[hidden]{display:none!important}html,body,#root{min-height:100%}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.5 var(--font);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}code,.mono{font-family:var(--mono);font-size:.92em}a{color:var(--accent-ink)}h1{font-size:30px;line-height:1.12;letter-spacing:-.02em;margin:6px 0 10px;font-weight:700;text-wrap:balance}h2{font-size:18px;margin:0;letter-spacing:-.01em;font-weight:600}h3{font-size:15px;margin:0;font-weight:600}.muted{color:var(--ink-3)}.fine{font-size:12.5px;color:var(--ink-3);margin:0}.sub{font-size:12.5px;color:var(--ink-3)}.grow{flex:1}.empty{color:var(--ink-3);text-align:center;padding:28px 0}.shell{min-height:100vh;display:flex;flex-direction:column}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:24px;height:56px;padding:0 24px;background:#fffffff0;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:16px;color:var(--ink);text-decoration:none;letter-spacing:-.01em}.brand-mark{width:26px;height:26px;border-radius:7px;background:var(--accent) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cpath d='M9 10h14M9 16h14M9 22h9' stroke='%23fff' stroke-width='2.6' stroke-linecap='round'/%3E%3C/svg%3E") center/100% no-repeat}.nav{display:flex;gap:4px}.nav a{padding:6px 12px;border-radius:8px;color:var(--ink-2);text-decoration:none;font-weight:500}.nav a:hover{background:var(--surface-2);color:var(--ink)}.nav a.active{background:var(--accent-soft);color:var(--accent-ink)}.usermenu{margin-left:auto;position:relative}.userbtn{display:flex;align-items:center;gap:8px;border:1px solid transparent;background:none;padding:4px 10px 4px 4px;border-radius:999px;cursor:pointer}.userbtn:hover{background:var(--surface-2);border-color:var(--line)}.userbtn-name{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.menu{position:absolute;right:0;top:calc(100% + 6px);width:260px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);padding:6px;display:flex;flex-direction:column}.menu-head{display:flex;flex-direction:column;gap:2px;padding:10px 10px 12px;border-bottom:1px solid var(--line);margin-bottom:6px}.menu-head span{font-size:12.5px;color:var(--ink-3)}.menu-head .pill{align-self:flex-start;margin-top:6px}.menu button{background:none;border:0;text-align:left;padding:8px 10px;border-radius:8px;cursor:pointer}.menu button:hover{background:var(--surface-2)}.avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:var(--accent-soft);color:var(--accent-ink);font-weight:600;object-fit:cover;flex:none}.page{flex:1}@media(max-width:700px){.topbar{gap:12px;padding:0 16px}.userbtn-name{display:none}}.wrap{max-width:1240px;margin:0 auto;padding:32px 32px 72px;display:flex;flex-direction:column;gap:20px}@media(max-width:700px){.wrap{padding:24px 16px 56px}}.center-screen{display:flex;align-items:center;justify-content:center;min-height:50vh}.empty-state{max-width:520px;margin:12vh auto;text-align:center;padding:0 16px;display:flex;flex-direction:column;gap:10px;align-items:center}.empty-state p{color:var(--ink-2);margin:0}.spinner{width:28px;height:28px;border-radius:50%;border:3px solid var(--line);border-top-color:var(--accent);animation:spin .8s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.eyebrow{font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--accent);font-weight:600}.intro p{margin:0;color:var(--ink-2);max-width:72ch;font-size:15px}.intro-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px}.facts{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.fact{display:inline-flex;align-items:center;gap:8px;height:30px;padding:0 12px;border-radius:999px;background:var(--surface);border:1px solid var(--line);font-size:13px;color:var(--ink-2)}.fact b{color:var(--ink);font-family:var(--mono);font-weight:600}.muted-fact{color:var(--ink-3)}.schema-pick{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-2)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:36px;padding:0 14px;border-radius:9px;border:1px solid var(--line);background:var(--surface);font-weight:500;cursor:pointer;white-space:nowrap}.btn:hover:not(:disabled){border-color:var(--grid);background:var(--surface-2)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover:not(:disabled){background:var(--accent-ink);border-color:var(--accent-ink)}.btn.danger{color:var(--bad);border-color:#efc9c5}.btn.small{height:30px;padding:0 10px;font-size:13px}.link-btn{background:none;border:0;padding:0 2px;color:var(--accent-ink);cursor:pointer;font-weight:500;text-decoration:underline;text-underline-offset:2px}.link-btn:disabled{color:var(--ink-3);cursor:default}.icon-btn{width:34px;height:34px;border-radius:8px;border:0;background:none;font-size:22px;line-height:1;cursor:pointer;color:var(--ink-2)}.icon-btn:hover{background:var(--surface-2)}select,input[type=text],input[type=email],input[type=search],input:not([type]),textarea{height:36px;padding:0 10px;border:1px solid var(--line);border-radius:9px;background:var(--surface);min-width:0}textarea{height:auto;padding:8px 10px;resize:vertical}select:focus,input:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}input:disabled,select:disabled{background:var(--surface-2);color:var(--ink-3)}.check{display:inline-flex;align-items:center;gap:8px;font-size:13.5px;color:var(--ink-2);cursor:pointer}.check input{accent-color:var(--accent);width:16px;height:16px;margin:0}.toolbar{position:sticky;top:64px;z-index:5;display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:10px 12px;background:#f2f3f6f0;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--line);border-radius:12px}.search{position:relative;flex:1 1 260px;max-width:420px;display:flex}.search svg{position:absolute;left:11px;top:50%;width:16px;height:16px;transform:translateY(-50%);color:var(--ink-3)}.search input{width:100%;padding-left:34px}.count{font-size:12.5px;color:var(--ink-3)}.seg{display:inline-flex;padding:3px;background:var(--surface);border:1px solid var(--line);border-radius:10px;gap:2px}.seg button{border:0;background:none;padding:5px 12px;border-radius:7px;cursor:pointer;color:var(--ink-2);font-weight:500}.seg button.on{background:var(--accent-soft);color:var(--accent-ink)}.card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:20px 22px;display:flex;flex-direction:column;gap:14px;min-width:0}.card-h{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:8px 16px}.legend{display:flex;flex-wrap:wrap;gap:14px;font-size:12.5px;color:var(--ink-2)}.legend i{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:6px;vertical-align:-2px;border:1px solid var(--grid)}.legend .l-core{background:var(--k-core)}.legend .l-master{background:var(--k-master)}.legend .l-link{background:var(--k-link);border-style:dashed}.alert{padding:10px 14px;border-radius:10px;font-size:13.5px;display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center}.alert.bad{background:var(--bad-soft);color:var(--bad)}.alert.warn{background:var(--warn-soft);color:var(--warn)}.alert.info{background:var(--info-soft);color:var(--info)}.alert.ok{background:var(--ok-soft);color:var(--ok)}.pill{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:999px;background:var(--mute-soft);color:var(--ink-2);font-size:12px;font-weight:500;white-space:nowrap}.pill.accent{background:var(--accent-soft);color:var(--accent-ink)}.pill.bad{background:var(--bad-soft);color:var(--bad)}.pill.small{height:18px;padding:0 6px;font-size:11px;margin-left:6px}.opts{display:flex;flex-wrap:wrap;gap:5px}.opts span{font-size:12px;padding:2px 8px;border-radius:6px;background:var(--surface-2);border:1px solid var(--line);color:var(--ink-2)}.login{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:16px;background:linear-gradient(160deg,#fafafb,#eceef2)}.login-card{width:100%;max-width:420px;background:var(--surface);border:1px solid var(--line);border-radius:18px;box-shadow:0 12px 40px #1b1e271a;padding:44px 36px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:6px}.login-card h1{font-size:24px;margin:2px 0}.login-card .muted{margin:0 0 18px}.login-card .alert{width:100%;text-align:left;margin-bottom:12px;display:block}.login-mark{width:72px;height:72px;border-radius:20px;background:var(--accent);display:flex;align-items:center;justify-content:center;margin-bottom:14px}.login-mark svg{width:40px;height:40px;fill:none;stroke:#fff;stroke-width:2.6;stroke-linecap:round}.login-button{min-height:48px;display:flex;align-items:center;justify-content:center;margin-bottom:18px}.diagram-card{padding-bottom:16px}.diagram-area{position:relative}.erd-wrap{height:min(72vh,720px);min-height:420px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);overflow:hidden}.erd-node{background:var(--surface);border:1.2px solid var(--grid);border-radius:10px;box-shadow:var(--shadow);overflow:hidden;cursor:pointer;transition:opacity .15s,border-color .15s}.erd-node.link{border-style:dashed}.erd-node:hover{border-color:var(--accent)}.erd-node.selected{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft),var(--shadow)}.erd-node.dim{opacity:.28}.erd-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;height:44px;padding:12px 14px 0;border-bottom:1px solid var(--line)}.erd-node.core .erd-head{background:var(--k-core)}.erd-node.master .erd-head{background:var(--k-master)}.erd-node.link .erd-head{background:var(--k-link)}.erd-name{font:600 13.5px var(--mono)}.erd-count{font:500 11px var(--mono);color:var(--ink-3)}.erd-rows{padding:4px 0}.erd-row{position:relative;display:flex;align-items:center;justify-content:space-between;gap:8px;height:26px;padding:0 14px}.erd-col{font:400 12px var(--mono);color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.erd-tag{font:600 10.5px var(--mono);color:var(--ink-3);white-space:nowrap}.erd-tag.pk{color:var(--accent)}.erd-tag.fk{color:var(--info)}.erd-more{height:26px;padding:0 14px;font-size:11.5px;color:var(--ink-3);display:flex;align-items:center}.erd-handle{width:6px!important;height:6px!important;min-width:0!important;min-height:0!important;background:var(--grid)!important;border:0!important;opacity:0}.react-flow__edge.erd-edge path{stroke:var(--ink-3);stroke-width:1.5}.react-flow__edge.erd-edge.hl path{stroke:var(--accent);stroke-width:2.2}.react-flow__edge.erd-edge.faded{opacity:.18}.react-flow__edge.erd-edge .react-flow__edge-text{font:600 11px var(--mono);fill:var(--ink-2)}.react-flow__edge.erd-edge.hl .react-flow__edge-text{fill:var(--accent-ink)}.react-flow__edge-textbg{fill:var(--surface-2)}.react-flow__controls{box-shadow:var(--shadow);border-radius:8px;overflow:hidden}.react-flow__minimap{border-radius:8px;border:1px solid var(--line)}.peek{position:absolute;top:12px;right:12px;width:300px;max-width:calc(100% - 24px);background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 28px #1b1e271f;padding:16px;display:flex;flex-direction:column;gap:8px;z-index:5}.peek h3{font-family:var(--mono)}.peek p{margin:0;font-size:13px;color:var(--ink-2)}.peek dl{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:4px 0 6px;font-size:12.5px}.peek dt{color:var(--ink-3)}.peek dd{margin:0;font-family:var(--mono);font-size:12px;word-break:break-word}.peek .btn{align-self:flex-start}.diagram-card>.sub{margin:0;line-height:1.55}.jump{display:flex;flex-wrap:wrap;gap:6px}.jump a{font-family:var(--mono);font-size:12px;padding:3px 9px;border-radius:7px;background:var(--surface);border:1px solid var(--line);color:var(--ink-2);text-decoration:none}.jump a:hover{border-color:var(--accent);color:var(--accent-ink)}.jump a.dim{opacity:.4}.tables{display:flex;flex-direction:column;gap:18px}.tcard{background:var(--surface);border:1px solid var(--line);border-radius:12px;overflow:hidden;scroll-margin-top:130px;transition:box-shadow .3s}.tcard.flash{box-shadow:0 0 0 3px var(--accent)}.tc-h{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,320px);gap:16px 24px;padding:18px 22px;border-bottom:1px solid var(--line)}.tcard.core .tc-h{background:var(--k-core)}.tcard.master .tc-h{background:var(--k-master)}.tcard.link .tc-h{background:var(--k-link)}.tc-kind{font-size:11px;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-3);font-weight:600}.tc-h h3{font:600 20px var(--mono);margin:2px 0 4px}.tc-h p{margin:0;color:var(--ink-2);max-width:70ch}.grain{background:#ffffffbf;border-radius:10px;padding:10px 12px;font-size:13px;color:var(--ink-2);display:flex;flex-direction:column;gap:2px;align-self:start}.grain b{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}.grain-count{font-family:var(--mono);font-size:12px;color:var(--ink);margin-top:4px}@media(max-width:760px){.tc-h{grid-template-columns:1fr}}.rels{display:flex;flex-direction:column;gap:6px;padding:14px 22px;border-bottom:1px solid var(--line);background:var(--surface-2)}.rel{display:grid;grid-template-columns:200px 1fr;gap:12px;font-size:13px;color:var(--ink-2)}.rel-t{text-align:left;background:none;border:0;padding:0;font:600 12.5px var(--mono);color:var(--info);cursor:pointer}.rel-t:disabled{color:var(--ink-2);cursor:default}@media(max-width:760px){.rel{grid-template-columns:1fr;gap:2px}}.fields{padding:0 22px}.field{display:grid;grid-template-columns:minmax(220px,340px) 1fr;gap:6px 24px;padding:12px 0;border-bottom:1px solid var(--line)}.field:last-child{border-bottom:0}.field.hit{background:linear-gradient(90deg,var(--warn-soft),transparent 70%);margin:0 -22px;padding:12px 22px}.fname{display:flex;flex-direction:column;gap:4px}.fname code{font-weight:600;font-size:13.5px;color:var(--ink)}.ftype{font-size:12px;color:var(--ink-3)}.badges{display:flex;flex-wrap:wrap;gap:4px}.b{font-size:11px;font-weight:600;padding:1px 7px;border-radius:5px;background:var(--mute-soft);color:var(--ink-2);border:0;text-decoration:none}.b.pk{background:var(--accent-soft);color:var(--accent-ink)}.b.fk{background:var(--info-soft);color:var(--info);cursor:pointer;font-family:var(--font)}.b.auto{background:var(--ok-soft);color:var(--ok)}.fmean{font-size:13.5px;color:var(--ink-2);display:flex;flex-direction:column;gap:6px}.fmean code{font-size:12px;color:var(--ink);background:var(--surface-2);padding:0 4px;border-radius:4px}.fmeta{font-size:12.5px;color:var(--ink-3)}.fmeta b{color:var(--ink-2);font-weight:600}@media(max-width:760px){.field{grid-template-columns:1fr}}.rules{margin:0 22px 16px;padding:12px 14px;border-radius:8px;background:var(--warn-soft);font-size:13px;color:var(--ink-2)}.rules b{color:var(--warn);font-size:11px;letter-spacing:.06em;text-transform:uppercase}.rules ul{margin:6px 0 0;padding-left:18px;display:flex;flex-direction:column;gap:4px}.rules code{font-size:12px;color:var(--ink);word-break:break-word}.sql{border-top:1px solid var(--line);padding:10px 22px}.sql-toggle{background:none;border:0;padding:4px 0;cursor:pointer;color:var(--ink-2);font-weight:500}.sql-toggle:before{content:"▸ ";color:var(--ink-3)}.sql-toggle[aria-expanded=true]:before{content:"▾ "}.sql-box{position:relative;margin:8px 0 6px}.sql-box pre{margin:0;padding:14px 16px;border-radius:9px;background:#1e2130;color:#e6e8ef;font:12px/1.6 var(--mono);overflow-x:auto}.sql-box .copy{position:absolute;top:8px;right:8px;background:#2b2f42;color:#e6e8ef;border-color:#3a3f55}.sql-box .fine{margin-top:6px}.lists{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:14px}.list-card{gap:10px}.list-card p{margin:0;font-size:13px}.used{font-size:12.5px;color:var(--ink-3);display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline}.table-card{padding:0;overflow-x:auto}table.data{width:100%;border-collapse:collapse;font-size:13.5px}.data th{text-align:left;font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);font-weight:600;padding:12px 16px;border-bottom:1px solid var(--line);white-space:nowrap;background:var(--surface-2)}.data td{padding:12px 16px;border-bottom:1px solid var(--line);vertical-align:middle}.data tr:last-child td{border-bottom:0}.data tr.inactive td{color:var(--ink-3)}.data tr.inactive .avatar{filter:grayscale(1);opacity:.6}.data .actions{text-align:right;width:1%}.person{display:flex;align-items:center;gap:10px}.person div{display:flex;flex-direction:column}.person span{font-size:12.5px;color:var(--ink-3)}.you{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--accent);margin-left:6px}.role-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}.role-card{gap:10px}.role-card p{margin:0;font-size:13px}.matrix th:not(:first-child),.matrix td.cell{text-align:center}.matrix th{white-space:normal;min-width:90px}.matrix .group-row td{background:var(--surface-2);font-weight:600;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2);padding:8px 16px}.matrix td:first-child{min-width:260px}.matrix .yes{color:var(--accent);font-size:14px}.matrix .no{color:var(--grid)}.drawer-backdrop{position:fixed;inset:0;z-index:50;background:#1b1e2752;display:flex;justify-content:flex-end;animation:fade .15s}.drawer{width:min(620px,100%);height:100%;background:var(--surface);display:flex;flex-direction:column;box-shadow:-12px 0 40px #1b1e2729;animation:slide .18s ease-out}@keyframes fade{0%{opacity:0}}@keyframes slide{0%{transform:translate(24px);opacity:.6}}.drawer-h{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line)}.drawer-body{flex:1;overflow-y:auto;padding:18px 20px;display:flex;flex-direction:column;gap:14px}.drawer-f{display:flex;gap:8px;align-items:center;padding:14px 20px;border-top:1px solid var(--line);background:var(--surface-2)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 16px}.fld{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--ink-2);min-width:0}.fld>span{font-weight:600;color:var(--ink)}.fld small{color:var(--ink-3);font-size:12px}.fld.wide,.fld.toggles{grid-column:1/-1}.fld.toggles{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.row-checks{display:flex;gap:16px;height:36px;align-items:center}@media(max-width:560px){.form-grid{grid-template-columns:1fr}}.section-h{font-size:14px;margin-top:6px;display:flex;align-items:baseline;gap:8px}.section-h small{font-weight:400;color:var(--ink-3);font-size:12.5px}.perm-picker{display:grid;grid-template-columns:1fr 1fr;gap:10px}@media(max-width:560px){.perm-picker{grid-template-columns:1fr}}.perm-picker fieldset{border:1px solid var(--line);border-radius:10px;padding:8px 12px 10px;margin:0;min-width:0}.perm-picker legend{font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2);padding:0 4px;display:flex;gap:8px;align-items:baseline}.perm-picker legend .link-btn{font-size:11.5px;text-transform:none;letter-spacing:0}.perm{display:grid;grid-template-columns:16px 1fr;column-gap:8px;align-items:start;padding:5px 0;cursor:pointer;font-size:13px}.perm input{accent-color:var(--accent);margin:2px 0 0;width:16px;height:16px}.perm code{grid-column:2;font-size:11px;color:var(--ink-3)}.perm.disabled{cursor:default;color:var(--ink-3)}.perm-picker.deny .perm input{accent-color:var(--bad)}
