ontic-tabicl-api / ui /components.css
fbdeme's picture
Deploy e5011ab from GitHub Actions
b2500f9 verified
Raw History Blame Contribute Delete
46.9 kB
/* ontic-ui ๋ถ€ํ’ˆ v0.3 โ€” ์ด๋ฆ„ o-*, ํ† ํฐ๋งŒ ์“ด๋‹ค(์ˆซ์ž ์ƒ‰ ๊ธˆ์ง€). ๋ถ€ํ’ˆ ๋ชฉ๋ก ยท ์“ฐ๋Š” ๋ฒ• = registry.json, ์›์น™ = DESIGN.md
๋ฐ€๋„(์‹ค์ธก ๊ทผ๊ฑฐ DESIGN.md): ๋ณธ๋ฌธ 13px ยท ์ปจํŠธ๋กค 28px ยท ํ‘œ ์ค„ 32px ยท ๋ชจ์„œ๋ฆฌ 4. ๊นŠ์ด: ๋ฉด์€ ์„ ๋งŒ, ๋–  ์žˆ๋Š” ์ธต๋งŒ --lift.
์„œ๋ช…: ์ฒญ์—ฐํ•„(ํ›„๋ณด, --draft ์ ์„ ) โ†’ ๋จน(ํ™•์ •, --ink ์‹ค์„ ) โ†’ ์ธ์ฃผ(๊ฒฐ์žฌ, --seal ๋„์žฅ). ๋ถ‰์€์ƒ‰์€ ๋„์žฅ ๋ชจ์–‘์—๋งŒ. */
/* โ”€โ”€ ๋„์žฅ ยท ๊ฒฐ์žฌ๋ž€ โ€” ์„œ๋ช… ์š”์†Œ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
/* ๋„์žฅ: ์‚ฌ๋žŒ์ด ๊ฒฐ์žฌํ–ˆ๋‹ค๋Š” ํ‘œ์‹œ. ์ด๋ฆ„ ์•ž ๋‘ ๊ธ€์ž๋ฅผ ์ธ์ฃผ ํ…Œ๋‘๋ฆฌ ์•ˆ์— ์ƒˆ๊ธด๋‹ค. ํฌ๊ธฐ --sm 16 ยท ๊ธฐ๋ณธ 22 ยท --lg 36 */
.o-seal{display:inline-grid;place-items:center;flex:none;width:22px;height:22px;border:1.5px solid var(--seal);border-radius:var(--r-1);color:var(--seal);background:var(--paper);font:700 9px/1 var(--sans);letter-spacing:-.04em;writing-mode:horizontal-tb;transform:rotate(-4deg);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--seal) 18%,transparent)}
.o-seal--sm{width:16px;height:16px;font-size:0;border-width:1.5px}
.o-seal--sm::after{content:"";width:6px;height:6px;background:var(--seal);border-radius:1px}
.o-seal--lg{width:36px;height:36px;font-size:13px;border-width:2px}
.o-seal--void{border-style:dashed;border-color:var(--void);color:var(--void);transform:none;box-shadow:none}
/* ๊ฒฐ์žฌ๋ž€: ์ œ์•ˆ โ†’ ๊ฒ€ํ†  โ†’ ๊ฒฐ์žฌ ์นธ. ์นธ๋งˆ๋‹ค ์—ญํ•  ยท ๋„์žฅ ๋˜๋Š” ๋Œ€๊ธฐ ยท ์‹œ๊ฐ */
.o-approval{display:inline-grid;grid-auto-flow:column;grid-auto-columns:minmax(64px,auto);border:1px solid var(--rule-2);border-radius:var(--r-2);background:var(--paper);overflow:hidden;font-size:var(--t-11)}
.o-approval__cell{display:grid;grid-template-rows:20px 36px 16px;justify-items:center;align-items:center;border-left:1px solid var(--rule-2);padding:0 var(--s-2) 2px}
.o-approval__cell:first-child{border-left:0}
.o-approval__role{width:calc(100% + var(--s-4));height:20px;display:grid;place-items:center;background:var(--well);border-bottom:1px solid var(--rule-2);color:var(--pencil);font-weight:500}
.o-approval__who{font:500 var(--t-11) var(--sans);color:var(--graphite)}
.o-approval__when{font:400 10px var(--mono);color:var(--faint)}
.o-approval__wait{width:22px;height:22px;border:1.5px dashed var(--draft);border-radius:var(--r-1)}
.o-approval__agent{font:600 10px var(--mono);letter-spacing:.06em;color:var(--draft)}
/* โ”€โ”€ ๋จธ๋ฆฌ๋  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-topbar{position:sticky;top:0;z-index:20;height:var(--bar);display:flex;align-items:center;gap:var(--s-5);padding:0 var(--s-4);background:color-mix(in srgb,var(--paper) 92%,transparent);backdrop-filter:saturate(1.4) blur(10px);border-bottom:1px solid var(--rule)}
.o-wordmark{display:inline-flex;align-items:center;gap:8px;font:700 var(--t-13)/1 var(--mono);letter-spacing:.16em;color:var(--ink);text-decoration:none;flex:none}
.o-wordmark::before{content:"";width:12px;height:12px;border:2px solid var(--seal);border-radius:2px;transform:rotate(-4deg);background:linear-gradient(var(--seal),var(--seal)) center/4px 4px no-repeat}
.o-topbar__nav{display:flex;gap:var(--s-5);font-size:var(--t-13)}
.o-topbar__nav a{color:var(--graphite);text-decoration:none}.o-topbar__nav a:hover{color:var(--ink)}
.o-topbar__end{margin-left:auto;display:flex;align-items:center;gap:var(--s-3);opacity:0;transition:opacity var(--d-2) var(--ease)}
.o-topbar__end.is-ready{opacity:1}
.o-who{font:400 var(--t-12) var(--mono);color:var(--pencil);max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* โ”€โ”€ ๋ฒ„ํŠผ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--h-md);padding:0 10px;border-radius:var(--r-2);border:1px solid transparent;font:500 var(--t-13)/1 var(--sans);letter-spacing:-.005em;white-space:nowrap;text-decoration:none;cursor:pointer;transition:background-color var(--d-1) var(--ease),border-color var(--d-1) var(--ease),color var(--d-1) var(--ease),transform var(--d-1) var(--ease)}
.o-btn:active{transform:translateY(1px)}
.o-btn:disabled,.o-btn[aria-disabled=true]{opacity:.42;cursor:not-allowed;transform:none}
.o-btn--primary{background:var(--ink);color:var(--paper)}.o-btn--primary:hover:not(:disabled){background:var(--graphite)}
.o-btn--secondary{background:var(--paper);color:var(--ink);border-color:var(--rule-2);box-shadow:0 1px 0 var(--rule)}.o-btn--secondary:hover:not(:disabled){border-color:var(--rule-3)}
.o-btn--ghost{background:transparent;color:var(--graphite)}.o-btn--ghost:hover:not(:disabled){background:var(--well);color:var(--ink)}
/* ๊ฒฐ์žฌ ๋ฒ„ํŠผ: ๋ˆ„๋ฅด๋ฉด ๊ธฐ๋ก์ด ๋‚จ๋Š”๋‹ค โ€” ๋จน ๋ฐ”ํƒ• + ์ธ์ฃผ ๋„์žฅ ํ‘œ์‹œ */
.o-btn--seal{background:var(--ink);color:var(--paper)}
.o-btn--seal::before{content:"";width:10px;height:10px;border:1.5px solid var(--seal);border-radius:2px;background:linear-gradient(var(--seal),var(--seal)) center/4px 4px no-repeat;transform:rotate(-4deg)}
.o-btn--seal:hover:not(:disabled){background:var(--graphite)}
/* ํ›„๋ณด๋ฅผ ์ •ํ•˜๋Ÿฌ ๊ฐ€๋Š” ๋ฒ„ํŠผ: ์ฒญ์—ฐํ•„ */
.o-btn--draft{background:var(--draft-wash);color:var(--draft-ink);border-color:color-mix(in srgb,var(--draft) 30%,transparent)}.o-btn--draft:hover:not(:disabled){border-color:var(--draft)}
.o-btn--danger{background:var(--paper);color:var(--alert);border-color:color-mix(in srgb,var(--alert) 30%,transparent)}.o-btn--danger:hover:not(:disabled){background:var(--alert-wash)}
.o-btn--sm{height:var(--h-sm);padding:0 8px;font-size:var(--t-12)}
.o-btn--lg{height:var(--h-xl);padding:0 var(--s-4);font-size:var(--t-14)}
.o-btn--link{height:auto;padding:2px 4px;background:none;color:var(--draft-ink);font-size:var(--t-12)}.o-btn--link:hover{text-decoration:underline}
/* โ”€โ”€ ์ž…๋ ฅ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-input,.o-textarea,.o-select{width:100%;min-height:var(--h-md);padding:0 9px;border-radius:var(--r-2);border:1px solid var(--rule-2);background:var(--paper);color:var(--ink);font-size:var(--t-13);box-shadow:inset 0 1px 0 var(--rule);transition:border-color var(--d-1) var(--ease),box-shadow var(--d-1) var(--ease)}
.o-textarea{padding:6px 9px;line-height:1.5;resize:vertical}
.o-select{padding-right:26px;appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--pencil) 50%),linear-gradient(135deg,var(--pencil) 50%,transparent 50%);background-position:calc(100% - 13px) 52%,calc(100% - 9px) 52%;background-size:4px 4px;background-repeat:no-repeat;cursor:pointer}
.o-input::placeholder,.o-textarea::placeholder{color:var(--faint)}
.o-input:hover,.o-textarea:hover,.o-select:hover{border-color:var(--rule-3)}
.o-input:focus,.o-textarea:focus,.o-select:focus{outline:0;border-color:var(--draft);box-shadow:0 0 0 3px var(--draft-wash)}
.o-search{position:relative;display:block}.o-search .o-input{padding-left:28px;padding-right:32px;background:var(--well);border-color:transparent;box-shadow:none}
.o-search::before{content:"";position:absolute;left:9px;top:50%;width:9px;height:9px;margin-top:-6px;border:1.5px solid var(--pencil);border-radius:50%;pointer-events:none}
.o-search::after{content:"";position:absolute;left:17px;top:50%;width:2px;height:2px;margin-top:2px;background:var(--pencil);box-shadow:1px 1px 0 var(--pencil),2px 2px 0 var(--pencil);pointer-events:none}
.o-search .o-input:focus{background:var(--paper);border-color:var(--draft)}
.o-kbd{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 4px;border-radius:var(--r-1);border:1px solid var(--rule-2);border-bottom-width:2px;background:var(--paper);font:500 var(--t-11) var(--mono);color:var(--pencil)}
.o-search .o-kbd{position:absolute;right:6px;top:50%;transform:translateY(-50%)}
/* โ”€โ”€ ์นฉ โ€” ์ฒญ์—ฐํ•„(ํ›„๋ณด) โ†’ ๋จน(ํ™•์ •) โ†’ ์ธ์ฃผ(๊ฒฐ์žฌ) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-chips{display:flex;flex-wrap:wrap;gap:4px;align-items:center}
.o-chip{display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 6px;border-radius:var(--r-1);border:1px solid var(--rule-2);background:var(--paper);color:var(--graphite);font:500 var(--t-11)/1 var(--sans);white-space:nowrap}
.o-chip--dom{background:var(--well);border-color:transparent;color:var(--graphite)}
.o-chip--key{border-color:var(--ink);color:var(--ink);font:600 10px/1 var(--mono);letter-spacing:.04em;height:18px;padding:0 4px}
.o-chip--fk{color:var(--graphite);font:500 var(--t-11)/1 var(--mono)}
.o-chip--draft{border:1px dashed var(--draft);background:var(--draft-wash);color:var(--draft-ink)}
.o-chip--seal{border-color:var(--rule-2);color:var(--ink)}
.o-chip--seal::before{content:"";width:8px;height:8px;border:1.5px solid var(--seal);border-radius:1px;background:linear-gradient(var(--seal),var(--seal)) center/3px 3px no-repeat;transform:rotate(-4deg)}
.o-chip--void{border:1px dotted var(--void);color:var(--pencil);text-decoration:line-through;text-decoration-color:var(--void)}
.o-chip--tag{background:var(--well);border-color:transparent;color:var(--graphite)}.o-chip--tag::before{content:"#";color:var(--faint)}
.o-chip--owner{border-radius:999px;font:500 var(--t-11)/1 var(--mono)}
.o-chip--masked{height:16px;padding:0 4px;border-color:transparent;background:var(--alert-wash);color:var(--alert);font-size:10px}
/* โ”€โ”€ ๊ธ€ ยท ๊ฒฝ๋กœ ยท ์ƒํƒœ ๋ฌธ๊ตฌ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-label{display:block;font:500 var(--t-11)/1.4 var(--sans);color:var(--pencil);letter-spacing:.01em}
.o-muted{color:var(--pencil);font-size:var(--t-12)}
.o-crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:4px;font:400 var(--t-11) var(--mono);color:var(--pencil)}
.o-crumbs__sep{color:var(--faint)}
.o-desc{color:var(--graphite);font-size:var(--t-12);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.o-empty{padding:var(--s-8) var(--s-4);text-align:center;color:var(--pencil);font-size:var(--t-12)}
.o-empty strong{display:block;color:var(--ink);font-weight:600;font-size:var(--t-13);margin-bottom:2px}
.o-alert{display:flex;flex-direction:column;gap:2px;padding:10px var(--s-3);border-radius:var(--r-2);border:1px solid var(--rule-2);border-left:3px solid var(--graphite);background:var(--paper);font-size:var(--t-12)}
.o-alert strong{font-weight:600;font-size:var(--t-13)}
.o-alert--error{border-color:color-mix(in srgb,var(--alert) 25%,transparent);border-left-color:var(--alert);background:var(--alert-wash);color:var(--alert)}
.o-alert--error strong{color:var(--alert)}
/* โ”€โ”€ ๋ฉด ยท ๋จธ๋ฆฌ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-panel{background:var(--paper);border:1px solid var(--rule);border-radius:var(--r-3);padding:var(--s-3) var(--s-4) var(--s-4)}
.o-panel__head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-3);min-height:28px;margin:0 0 var(--s-2);border-bottom:1px solid var(--rule)}
.o-panel__title{font-size:var(--t-12);font-weight:650;color:var(--graphite);letter-spacing:.01em}
.o-pagehead{display:flex;flex-direction:column;gap:2px;margin-bottom:var(--s-5)}
.o-pagehead__title{font-size:var(--t-20);letter-spacing:-.02em;line-height:1.25;font-weight:700}
.o-pagehead__lead{color:var(--pencil);font-size:var(--t-12);max-width:720px}
.o-entity{padding:0 0 var(--s-4);border-bottom:1px solid var(--rule)}
.o-entity__title{margin:4px 0 var(--s-2);font:600 var(--t-24)/1.15 var(--mono);letter-spacing:-.02em;overflow-wrap:anywhere}
.o-entity__facts{display:flex;flex-wrap:wrap;gap:0;margin-top:var(--s-3);border:1px solid var(--rule);border-radius:var(--r-2);background:var(--paper)}
.o-entity__facts>*{padding:6px var(--s-3);border-left:1px solid var(--rule);font-size:var(--t-11);color:var(--pencil)}
.o-entity__facts>*:first-child{border-left:0}
.o-entity__facts strong{display:block;font:600 var(--t-14) var(--mono);color:var(--ink);font-variant-numeric:tabular-nums}
/* โ”€โ”€ ์ˆซ์ž โ€” ์นด๋“œ ๋Œ€์‹  ์žฅ๋ถ€์˜ ํ•œ ์นธ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-stat{display:flex;flex-direction:column;gap:0;padding:var(--s-2) var(--s-4) var(--s-2) 0;color:var(--ink);text-decoration:none;border-right:1px solid var(--rule)}
.o-stat:last-child{border-right:0}
a.o-stat:hover .o-stat__value{color:var(--draft-ink)}
.o-stat__label{font:500 var(--t-11) var(--sans);color:var(--pencil)}
.o-stat__value{font:600 var(--t-24)/1.15 var(--mono);letter-spacing:-.04em;font-variant-numeric:tabular-nums;margin-top:2px;transition:color var(--d-1)}
.o-stat__meta{font-size:var(--t-11);color:var(--pencil)}
/* ์ง„ํ–‰ ๋ง‰๋Œ€: ๊ฒฐ์žฌ๋œ ๋ชซ(๋จน) ยท ๋‚จ์€ ํ›„๋ณด(์ฒญ์—ฐํ•„ ๋น—๊ธˆ) */
.o-progress{display:flex;height:6px;border-radius:1px;overflow:hidden;background:repeating-linear-gradient(-45deg,var(--draft-wash) 0 3px,color-mix(in srgb,var(--draft) 28%,var(--draft-wash)) 3px 4px)}
.o-progress__done{background:var(--ink)}
/* โ”€โ”€ ์ •ํ•  ๊ฒƒ ๋Œ€๊ธฐ์—ด โ€” ํ™ˆ์˜ ์ดˆ์  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-queue{display:flex;flex-direction:column;border:1px solid var(--rule);border-radius:var(--r-3);background:var(--paper);overflow:hidden}
.o-queue__head{display:grid;grid-template-columns:1fr auto;align-items:end;gap:var(--s-2) var(--s-4);padding:var(--s-4) var(--s-4) var(--s-3)}
.o-queue__count{font:600 var(--t-48)/.9 var(--mono);letter-spacing:-.06em;color:var(--draft-ink);font-variant-numeric:tabular-nums}
.o-queue__count small{margin-left:6px;font:500 var(--t-13) var(--sans);letter-spacing:0;color:var(--pencil)}
.o-queue__lead{grid-column:1/-1;font-size:var(--t-12);color:var(--pencil);max-width:560px}
.o-queue__head .o-progress{grid-column:1/-1}
.o-queue__row{display:grid;grid-template-columns:minmax(0,1fr) 72px 120px auto;align-items:center;gap:var(--s-3);min-height:40px;padding:0 var(--s-4);border-top:1px solid var(--rule);font-size:var(--t-12);color:var(--pencil)}
.o-queue__row:hover{background:color-mix(in srgb,var(--draft-wash) 45%,transparent)}
.o-queue__name{font:500 var(--t-13) var(--mono);color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-decoration:none}a.o-queue__name:hover{text-decoration:underline}
.o-queue__n{font:600 var(--t-13) var(--mono);color:var(--draft-ink);text-align:right;font-variant-numeric:tabular-nums}
/* โ”€โ”€ ๊ฒฐ๊ณผ ์ค„ ยท ์‚ฌ์‹ค ๋ชฉ๋ก ยท ์ˆœ์œ„ ๋ชฉ๋ก โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
/* ๊ฒฐ๊ณผ ํ•œ ์ค„: ์นด๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์žฅ๋ถ€์˜ ์ค„. ๊ณ ๋ฅธ ์ค„์€ ์™ผ์ชฝ ๋จน ๋  */
.o-result{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1px var(--s-3);width:100%;text-align:left;padding:7px var(--s-3) 7px var(--s-4);background:var(--paper);border:0;border-bottom:1px solid var(--rule);border-radius:0;color:var(--ink);cursor:pointer;transition:background-color var(--d-1) var(--ease)}
.o-result:hover{background:var(--desk)}
.o-result.is-active{background:var(--draft-wash)}
.o-result.is-active::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--ink)}
.o-result>.o-crumbs{grid-column:1/-1;order:2}
.o-result__name{font:500 var(--t-13) var(--mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.o-result__meta{font-size:var(--t-11);color:var(--pencil);text-align:right;white-space:nowrap;align-self:center}
.o-result__match{grid-column:1/-1;order:3;font:400 var(--t-11) var(--mono);color:var(--draft-ink)}
.o-result>.o-desc,.o-result>.o-chips{grid-column:1/-1;order:4}
.o-facts{display:grid;grid-template-columns:max-content 1fr;gap:0 var(--s-4);margin:0;font-size:var(--t-12)}
.o-facts dt,.o-facts dd{padding:5px 0;border-bottom:1px solid var(--rule)}
.o-facts dt{color:var(--pencil)}.o-facts dd{margin:0;overflow-wrap:anywhere}
.o-rank{list-style:none;margin:0;padding:0}
.o-rank li{display:flex;justify-content:space-between;align-items:center;gap:var(--s-3);min-height:30px;border-top:1px solid var(--rule);font-size:var(--t-12)}
.o-rank li:first-child{border-top:0}
.o-rank a{font-family:var(--mono);text-decoration:none}.o-rank a:hover{text-decoration:underline}
/* โ”€โ”€ ํƒญ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-tabs{display:flex;gap:var(--s-4);border-bottom:1px solid var(--rule);overflow-x:auto;scrollbar-width:none}
.o-tabs a{position:relative;display:inline-flex;align-items:center;gap:5px;height:36px;color:var(--pencil);text-decoration:none;font-size:var(--t-13);font-weight:500;white-space:nowrap}
.o-tabs a:hover{color:var(--ink)}
.o-tabs a[aria-selected=true]{color:var(--ink);font-weight:600}
.o-tabs a[aria-selected=true]::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--ink)}
.o-tabs__count{font:500 var(--t-11) var(--mono);color:var(--faint)}
/* โ”€โ”€ ํ‘œ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-table-wrap{overflow-x:auto}
.o-table{width:100%;border-collapse:collapse;font-size:var(--t-12)}
.o-table th{height:var(--row-head);padding:0 var(--s-3);text-align:left;font:600 var(--t-11) var(--sans);color:var(--pencil);background:var(--desk);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule-2);white-space:nowrap}
.o-table th:first-child{padding-left:var(--s-2)}
.o-table td{height:var(--row);padding:4px var(--s-3);border-bottom:1px solid var(--rule);vertical-align:middle;overflow-wrap:anywhere}
.o-table td:first-child{padding-left:var(--s-2)}
.o-table tbody tr:hover td{background:var(--desk)}
.o-table .is-ok{color:var(--ok);font-weight:500}.o-table .is-no{color:var(--alert)}
.o-table--sample td{white-space:nowrap;max-width:240px;overflow:hidden;text-overflow:ellipsis;font:400 var(--t-11) var(--mono)}
.o-table--sample td,.o-table--sample th{border-right:1px solid var(--rule)}
.o-cell-null{color:var(--faint);font-style:italic}
.o-cell-masked{color:var(--alert);letter-spacing:.15em}
/* โ”€โ”€ ์—ฐ๊ฒฐ ์ค„(ํ‘œ ์‚ฌ์ด ์—ฐ๊ฒฐ ํ•˜๋‚˜) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-edge{display:grid;grid-template-columns:1fr auto;gap:2px var(--s-3);align-items:center;padding:10px 0;border-bottom:1px solid var(--rule)}
.o-edge:last-child{border-bottom:0}
.o-edge__path{font:500 var(--t-12) var(--mono);overflow-wrap:anywhere}
.o-edge__why{grid-column:1/-1;font-size:var(--t-11);color:var(--pencil)}
.o-edge__said{grid-column:1/-1;font-size:var(--t-12);color:var(--graphite)}
.o-edge__said::before{content:"โ€œ";color:var(--faint)}.o-edge__said::after{content:"โ€";color:var(--faint)}
.o-edge__actions{grid-column:1/-1;display:flex;gap:var(--s-2);margin-top:4px}
/* โ”€โ”€ ๊ฒฐ์ • ์žฅ๋ถ€ โ€” ๋ˆ„๊ฐ€ ยท ์–ธ์ œ ยท ๋ฌด์Šจ ๋ง๋กœ ยท ๋„์žฅ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-ledger{list-style:none;margin:0;padding:0}
.o-ledger__item{position:relative;display:grid;grid-template-columns:88px minmax(0,1fr) 28px;gap:1px var(--s-3);padding:10px 0;border-top:1px solid var(--rule)}
.o-ledger__item:first-child{border-top:0}
.o-ledger__time{grid-row:1/span 3;font:400 var(--t-11)/1.7 var(--mono);color:var(--pencil)}
.o-ledger__what{display:flex;align-items:center;gap:var(--s-2);font:500 var(--t-12) var(--mono);overflow-wrap:anywhere}
.o-ledger__said{font-size:var(--t-12);color:var(--graphite)}
.o-ledger__said::before{content:"โ€œ";color:var(--faint)}.o-ledger__said::after{content:"โ€";color:var(--faint)}
.o-ledger__by{font:400 var(--t-11) var(--mono);color:var(--pencil)}
.o-ledger__what,.o-ledger__said,.o-ledger__by{grid-column:2}
.o-ledger__item>.o-seal{grid-column:3;grid-row:1/span 2;align-self:start}
.o-ledger__item--approved .o-ledger__what::before{content:"";flex:none;width:16px;border-top:2px solid var(--ink)}
.o-ledger__item--rejected .o-ledger__what{color:var(--pencil);text-decoration:line-through;text-decoration-color:var(--void)}
.o-ledger__item--rejected .o-ledger__what::before{content:"";flex:none;width:16px;border-top:2px dotted var(--void)}
.o-ledger__item--edit .o-ledger__what::before{content:"";flex:none;width:8px;height:8px;border-radius:1px;background:var(--well);border:1px solid var(--rule-3)}
/* โ”€โ”€ ๋ฒ”๋ก€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-legend{display:flex;flex-wrap:wrap;gap:var(--s-4);font-size:var(--t-11);color:var(--graphite)}
.o-legend__item{display:inline-flex;align-items:center;gap:6px}
.o-legend__item::before{content:"";width:20px;border-top:1.5px solid var(--graphite)}
.o-legend__item[data-kind=candidate]::before{border-top:2px dashed var(--draft)}
.o-legend__item[data-kind=approved]::before{width:20px;height:8px;border-top:0;background:linear-gradient(var(--ink),var(--ink)) 0 50%/100% 2px no-repeat,linear-gradient(var(--seal),var(--seal)) 50% 50%/6px 6px no-repeat}
.o-legend__item[data-kind=rejected]::before{border-top:2px dotted var(--void)}
.o-legend__item[data-kind=use]::before{border-top:1px solid var(--rule-3)}
/* โ”€โ”€ ์„ค๋ช… ยท ์†Œ์œ ์ž ยท ํƒœ๊ทธ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-meta{display:flex;flex-direction:column}
.o-meta__row{display:grid;grid-template-columns:64px minmax(0,1fr) auto;gap:var(--s-3);align-items:start;padding:5px 0;border-bottom:1px solid var(--rule)}
.o-meta__row:last-child{border-bottom:0}
.o-meta__label{font:500 var(--t-11)/20px var(--sans);color:var(--pencil)}
.o-meta__value{display:flex;flex-wrap:wrap;gap:4px;align-items:center;min-height:20px;font-size:var(--t-13)}
.o-meta__value p{white-space:pre-wrap;max-width:720px;color:var(--ink)}
.o-meta__empty{color:var(--faint);font-size:var(--t-12)}
.o-edit{display:flex;flex-wrap:wrap;gap:var(--s-2);align-items:flex-start;padding:5px 0}
.o-edit .o-input,.o-edit .o-textarea{flex:1 1 320px;width:auto}
.o-edit__err{flex-basis:100%;color:var(--alert);font-size:var(--t-11)}.o-edit__err:empty{display:none}
/* โ”€โ”€ ์™ผ์ชฝ ๋ฉ”๋‰ด ยท ํƒ์ƒ‰ ํŠธ๋ฆฌ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-nav{display:flex;flex-direction:column;gap:1px}
.o-nav a{position:relative;display:flex;align-items:center;gap:8px;height:var(--h-md);padding:0 10px;border-radius:var(--r-2);color:var(--graphite);text-decoration:none;font-size:var(--t-13);font-weight:500}
.o-nav a:hover{background:var(--well);color:var(--ink)}
.o-nav a[aria-current=true]{background:var(--paper);color:var(--ink);font-weight:600;box-shadow:0 0 0 1px var(--rule-2),0 1px 0 var(--rule-2)}
.o-tree{display:flex;flex-direction:column;gap:0;font-size:var(--t-12)}
.o-tree__group{margin:var(--s-4) 8px var(--s-1);font:600 var(--t-11) var(--sans);color:var(--faint);letter-spacing:.02em}
.o-tree__group:first-child{margin-top:0}
.o-tree__item{display:flex;justify-content:space-between;gap:var(--s-2);height:26px;align-items:center;padding:0 8px;border-radius:var(--r-2);color:var(--graphite);text-decoration:none}
.o-tree__item span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.o-tree__item:hover{background:var(--well);color:var(--ink)}
.o-tree__item.is-active{background:var(--well-hover);color:var(--ink);font-weight:600}.o-tree__item.is-active .o-tree__count{color:var(--graphite)}
.o-tree__count{font:400 var(--t-11) var(--mono);color:var(--faint);font-variant-numeric:tabular-nums}
/* โ”€โ”€ ๋„๊ตฌ ์ค„ ยท ๊ทœ์น™ ํ•œ ์ค„ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
.o-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2) var(--s-4);margin-bottom:var(--s-2);font-size:var(--t-12);color:var(--graphite)}
.o-toolbar label{display:inline-flex;align-items:center;gap:6px;cursor:pointer}
.o-toolbar input[type=checkbox]{accent-color:var(--ink);width:13px;height:13px}
.o-toolbar .o-legend{margin-left:auto}
.o-code-row{display:block;margin-top:6px;padding:5px 9px;border-radius:var(--r-2);background:var(--well);font:400 var(--t-11) var(--mono);color:var(--graphite);overflow-wrap:anywhere}
/* โ”€โ”€ ๊ณ„๋ณด ์บ”๋ฒ„์Šค(lineage.js) โ€” ๋ชจ๋ˆˆ ์œ„ ๋„๋ฉด. ์„ ์€ ์ฒญ์—ฐํ•„ โ†’ ๋จน, ๊ฒฐ์žฌ๋œ ์„  ๊ฐ€์šด๋ฐ ์ธ์ฃผ โ”€โ”€ */
.o-canvas{position:relative;height:min(62dvh,560px);border:1px solid var(--rule);border-radius:var(--r-3);overflow:hidden;background:var(--paper)}
.o-canvas--tall{height:min(74dvh,760px)}
.lg{background-image:linear-gradient(color-mix(in srgb,var(--draft) 7%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--draft) 7%,transparent) 1px,transparent 1px);background-size:24px 24px;touch-action:none}
.lg-svg{display:block;width:100%;height:100%;cursor:grab;user-select:none}.lg-svg.grabbing{cursor:grabbing}
.lg-colhead{font:600 10.5px var(--mono);fill:var(--faint);letter-spacing:.08em}
.lg-card{fill:var(--paper);stroke:var(--rule-3);stroke-width:1}
.lg-bar{fill:var(--rule-3)}
.lg-kind{font:500 10px var(--sans);fill:var(--pencil)}
.lg-title{font:500 12.5px var(--mono);fill:var(--ink)}
.lg-sub{font:400 10.5px var(--sans);fill:var(--pencil)}
.lg-node{cursor:pointer;outline:0}
.lg-node:hover .lg-card{stroke:var(--ink)}
.lg-node:focus-visible .lg-card{stroke:var(--draft);stroke-width:2}
.lg-node.domain .lg-card{fill:var(--ink);stroke:var(--ink)}.lg-node.domain .lg-bar{fill:var(--seal)}.lg-node.domain .lg-title{fill:var(--paper);font-family:var(--sans);font-weight:650}.lg-node.domain .lg-kind,.lg-node.domain .lg-sub{fill:var(--faint)}
.lg-node.project .lg-bar{fill:var(--graphite)}.lg-node.project .lg-title{font-family:var(--sans);font-weight:650}
.lg-node.service .lg-bar{fill:var(--rule-3)}
.lg-node.store .lg-bar,.lg-node.table .lg-bar{fill:var(--graphite)}
.lg-node.todo .lg-card{stroke:var(--draft);stroke-dasharray:5 3}.lg-node.todo .lg-bar{fill:var(--draft)}
.lg-node.focus .lg-card{stroke:var(--ink);stroke-width:2}.lg-node.focus .lg-bar{fill:var(--ink)}
.lg-node.more .lg-card{fill:var(--desk);stroke-dasharray:3 3}.lg-node.more .lg-title{font-family:var(--sans);font-weight:650}
.lg-line{fill:none;stroke-width:1.25;transition:opacity var(--d-1)}
.lg-hit{fill:none;stroke:transparent;stroke-width:12}.lg-edge.click .lg-hit{cursor:pointer}
.lg-edge.use .lg-line{stroke:var(--rule-3)}.lg-head.use{fill:var(--rule-3)}
.lg-edge.fk .lg-line{stroke:var(--graphite)}.lg-head.fk{fill:var(--graphite)}
.lg-edge.candidate .lg-line{stroke:var(--draft);stroke-dasharray:5 4;stroke-width:1.5}.lg-head.candidate{fill:var(--draft)}
.lg-edge.approved .lg-line{stroke:var(--ink);stroke-width:2}.lg-head.approved{fill:var(--ink)}
.lg-stamp{fill:var(--paper);stroke:var(--seal);stroke-width:1.5}.lg-stamp-dot{fill:var(--seal)}
.lg-edge.rejected .lg-line{stroke:var(--void);stroke-dasharray:2 4}.lg-head.rejected{fill:var(--void)}
.lg-edge.dim .lg-line{opacity:.14}.lg-edge.hot .lg-line{stroke-width:2.5}
.lg-tools{position:absolute;right:var(--s-3);bottom:var(--s-3);display:flex;gap:2px;padding:3px;background:var(--paper);border-radius:var(--r-3);box-shadow:var(--lift)}
.lg-tools button{min-width:28px;height:24px;padding:0 7px;border:0;border-radius:var(--r-2);background:none;font:500 var(--t-11) var(--sans);color:var(--graphite);cursor:pointer}
.lg-tools button:hover{background:var(--well);color:var(--ink)}
.lg-hint{position:absolute;left:var(--s-4);bottom:var(--s-3);margin:0;font-size:var(--t-11);color:var(--faint)}
@media(max-width:720px){
.o-topbar{gap:var(--s-3);padding:0 var(--s-3)}.o-topbar__nav,.o-who{display:none}
.o-meta__row{grid-template-columns:1fr auto}.o-meta__label{grid-column:1/-1;line-height:1.4}
.o-ledger__item{grid-template-columns:1fr 28px}.o-ledger__time{grid-row:auto;grid-column:1}.o-ledger__what,.o-ledger__said,.o-ledger__by{grid-column:1}.o-ledger__item>.o-seal{grid-column:2;grid-row:1}
.o-queue__row{grid-template-columns:minmax(0,1fr) auto auto;padding:6px var(--s-3)}.o-queue__row .o-progress{display:none}
.o-stat{padding-right:var(--s-3)}.o-stat:nth-child(2n){border-right:0}
.o-canvas,.o-canvas--tall{height:68dvh}
}
/* โ”€โ”€ ์•ฑ ํ‹€(v0.4): ์™ผ์ชฝ ์‚ฌ์ด๋“œ๋ฐ” + ๋ฐ”ํƒ• ์œ„์— ๋œฌ ๋ณธ๋ฌธ ํŒจ๋„ + ๋–  ์žˆ๋Š” ์ฐฝ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
์‚ฌ์ด๋“œ๋ฐ”๋Š” ๋ฐ”ํƒ•(desk) ์œ„์— ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ์ผํ•˜๋Š” ๋ฉด๋งŒ ์ข…์ด(paper) ํ•œ ์žฅ์œผ๋กœ ๋„์šด๋‹ค. ๋จธ๋ฆฌ๋Š” ํŒจ๋„ ์•ˆ ์–‡์€ ์ค„ ํ•˜๋‚˜. */
.o-icon{width:16px;height:16px;flex:none;color:currentColor}
.o-shell{display:grid;grid-template-columns:232px minmax(0,1fr);height:100dvh;background:var(--desk);overflow:hidden}
.o-side{display:flex;flex-direction:column;gap:2px;min-height:0;padding:var(--s-2) var(--s-2) var(--s-2) var(--s-3);overflow:auto}
.o-side__brand{display:flex;align-items:center;gap:8px;height:var(--h-xl);padding:0 6px;border-radius:var(--r-2)}
.o-side__brand .o-wordmark{flex:none}
.o-side__scope{position:relative;flex:1;min-width:0;display:flex;align-items:center}
.o-side__scope select{appearance:none;width:100%;height:var(--h-md);padding:0 22px 0 8px;border:0;border-radius:var(--r-2);background:transparent;font:500 var(--t-12) var(--sans);color:var(--pencil);text-overflow:ellipsis;cursor:pointer}
.o-side__scope select:hover{background:var(--well-hover);color:var(--ink)}
.o-side__scope .o-icon{position:absolute;right:6px;width:12px;height:12px;color:var(--faint);pointer-events:none}
.o-side__search{display:flex;align-items:center;gap:8px;height:var(--h-md);margin:2px 0 var(--s-2);padding:0 8px;border:1px solid var(--rule);border-radius:var(--r-2);background:var(--paper);color:var(--faint);font-size:var(--t-13);cursor:text}
.o-side__search input{flex:1;min-width:0;border:0;outline:0;background:transparent;font:inherit;color:var(--ink)}
.o-side__search:focus-within{border-color:var(--draft);box-shadow:var(--focus)}
.o-side__search input:focus-visible{box-shadow:none}.o-side__search input::-webkit-search-cancel-button{display:none} /* ๊ณ ๋ฆฌ๋Š” ๋ฐ”๊นฅ ์นธ ํ•˜๋‚˜๋งŒ */
.o-side__section{margin:var(--s-4) 0 2px;padding:0 8px;font-size:var(--t-11);font-weight:600;color:var(--faint);letter-spacing:.02em}
.o-side__item{display:flex;align-items:center;gap:10px;height:30px;padding:0 8px;border:0;border-radius:var(--r-2);background:none;color:var(--graphite);text-decoration:none;font:500 var(--t-13) var(--sans);text-align:left;cursor:pointer}
.o-side__item .o-icon{color:var(--pencil)}
.o-side__item:hover{background:var(--well-hover);color:var(--ink)}
.o-side__item[aria-current=true]{background:var(--well-hover);color:var(--ink);font-weight:600}
.o-side__item[aria-current=true] .o-icon{color:var(--ink)}
.o-side__item .o-kbd{margin-left:auto}
.o-side__item .o-side__count{margin-left:auto;font:500 var(--t-11) var(--mono);color:var(--draft)}
.o-side__foot{margin-top:auto;display:flex;flex-direction:column;gap:2px;padding-top:var(--s-2);border-top:1px solid var(--rule)}
.o-side__me{display:flex;align-items:center;gap:8px;height:36px;padding:0 4px 0 8px;font:400 var(--t-12) var(--mono);color:var(--pencil)}
.o-side__me>span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.o-iconbtn{display:inline-grid;place-items:center;width:var(--h-md);height:var(--h-md);flex:none;border:0;border-radius:var(--r-2);background:none;color:var(--pencil);cursor:pointer;text-decoration:none}
.o-iconbtn:hover{background:var(--well-hover);color:var(--ink)}
.o-frame{position:relative;display:flex;flex-direction:column;min-width:0;min-height:0;margin:var(--s-2) var(--s-2) var(--s-2) 0;background:var(--paper);border:1px solid var(--rule);border-radius:var(--r-4);box-shadow:0 1px 2px rgba(21,23,28,.04);overflow:hidden}
.o-framehead{display:flex;align-items:center;gap:var(--s-3);flex:none;height:44px;padding:0 var(--s-4) 0 var(--s-5);border-bottom:1px solid var(--rule)}
.o-framehead__path{display:flex;align-items:center;gap:6px;min-width:0;font-size:var(--t-13);color:var(--pencil)}
.o-framehead__path>*{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.o-framehead__path a{color:var(--pencil);text-decoration:none}.o-framehead__path a:hover{color:var(--ink)}
.o-framehead__path>:last-child{color:var(--ink);font-weight:600}
.o-framehead__sep{color:var(--faint);flex:none}
.o-framehead__end{margin-left:auto;display:flex;align-items:center;gap:var(--s-2)}
.o-frame__body{flex:1;min-height:0;overflow:auto;padding:var(--s-8) var(--s-10) var(--s-12)}
.o-frame__body--flush{padding:0}
.o-float{position:absolute;right:var(--s-4);bottom:var(--s-4);z-index:30;display:flex;flex-direction:column;width:min(480px,calc(100% - 32px));height:min(620px,calc(100% - 72px));background:var(--paper);border:1px solid var(--rule-2);border-radius:var(--r-4);box-shadow:var(--lift);overflow:hidden}
.o-float[hidden]{display:none}
.o-float__head{display:flex;align-items:center;gap:var(--s-2);height:44px;flex:none;padding:0 var(--s-2) 0 var(--s-4);border-bottom:1px solid var(--rule)}
.o-float__title{font-size:var(--t-13);font-weight:600}
.o-float__head .o-chat-model{margin-right:auto}
.o-float__body{flex:1;min-height:0;overflow:auto;padding:var(--s-4)}
.o-float .o-composer{border-top:1px solid var(--rule)}
.o-float .o-table th,.o-float .o-table td{white-space:nowrap} /* ์ข์€ ์ฐฝ์—์„œ ๊ธ€์ž๋ฅผ ์ชผ๊ฐœ์ง€ ๋ง๊ณ  ํ‘œ๋ฅผ ์˜†์œผ๋กœ ๋„˜๊ธด๋‹ค(o-table-wrap ์ด ์Šคํฌ๋กค) */
@media(max-width:820px){
.o-shell{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);height:auto;min-height:100dvh;overflow:visible}
.o-side{min-width:0}
.o-side{flex-direction:row;flex-wrap:wrap;align-items:center;gap:4px;padding:var(--s-2) var(--s-3);overflow:visible}
.o-side__brand{width:100%}.o-side__search{flex:1 1 100%;margin:0}
.o-side__section,.o-side__me>span{display:none}
.o-side__foot{margin:0;flex-direction:row;border:0;padding:0}
.o-frame{margin:0 var(--s-2) var(--s-2);min-height:70dvh}
.o-frame__body{padding:var(--s-5) var(--s-4) var(--s-8)}
.o-frame>.o-float{position:fixed;inset:auto 8px 8px;width:auto;height:min(80dvh,620px)}
.o-side .o-kbd{display:none}
}
/* โ”€โ”€ ์ž‘์—…๋Œ€(v0.5): ์œ„ ๋ง‰๋Œ€ + ์•„์ด์ฝ˜ ์ค„ + ์นธ ๋ฉ”๋‰ด + ๋ณธ๋ฌธ โ€” ์ €์žฅ์†Œ ยท ํ‘œ์ฒ˜๋Ÿผ ์˜ค๋ž˜ ๋“ค์—ฌ๋‹ค๋ณด๋Š” ํ™”๋ฉด. ํŒ ํ•˜๋‚˜(๋„์šฐ์ง€ ์•Š์Œ), ์นธ์€ ์„ ์œผ๋กœ๋งŒ ๋‚˜๋ˆˆ๋‹ค โ”€โ”€ */
.o-app{display:grid;grid-template:"bar bar bar" 48px "rail menu main" minmax(0,1fr)/48px 248px minmax(0,1fr);height:100dvh;background:var(--paper);overflow:hidden}
.o-app--nomenu{grid-template:"bar bar" 48px "rail main" minmax(0,1fr)/48px minmax(0,1fr)}
.o-app__bar{grid-area:bar;display:flex;align-items:center;gap:var(--s-3);min-width:0;padding:0 var(--s-3) 0 var(--s-4);border-bottom:1px solid var(--rule)}
.o-app__bar .o-search{flex:0 1 320px;margin-left:auto}
.o-app__end{display:flex;align-items:center;gap:var(--s-2)}
.o-app__bar .o-crumbs{flex-wrap:nowrap;gap:6px;min-width:0;font:400 var(--t-13) var(--sans);color:var(--pencil)} /* ๊ธฐ์กด o-crumbs(์ž‘์€ ๊ฒฝ๋กœ ๊ธ€)๋ฅผ ์œ„ ๋ง‰๋Œ€ ์•ˆ์—์„œ๋งŒ ํ‚ค์šด๋‹ค */
.o-app__bar .o-crumbs a{color:inherit;text-decoration:none;white-space:nowrap}.o-app__bar .o-crumbs a:hover{color:var(--ink)}
.o-app__bar .o-crumbs>:last-child{color:var(--ink);font-weight:600}
.o-app__bar .o-crumbs__sep{color:var(--rule-3);flex:none}
.o-rail{grid-area:rail;display:flex;flex-direction:column;align-items:center;gap:2px;padding:var(--s-2) 0;border-right:1px solid var(--rule);background:var(--desk)}
.o-rail a{display:grid;place-items:center;width:32px;height:32px;border-radius:var(--r-3);color:var(--pencil)}
.o-rail a:hover{background:var(--well-hover);color:var(--ink)}
.o-rail a[aria-current=true]{background:var(--paper);color:var(--ink);box-shadow:0 0 0 1px var(--rule-2)}
.o-rail__sep{width:20px;height:1px;margin:6px 0;background:var(--rule-2)}
.o-rail__end{margin-top:auto}
.o-secmenu{grid-area:menu;display:flex;flex-direction:column;min-height:0;overflow:auto;padding:var(--s-3) var(--s-2) var(--s-6);border-right:1px solid var(--rule);background:var(--desk)}
.o-secmenu__head{display:flex;flex-direction:column;gap:2px;padding:2px var(--s-2) var(--s-3);margin-bottom:var(--s-1);border-bottom:1px solid var(--rule)}
.o-secmenu__title{font-size:var(--t-14);font-weight:650;color:var(--ink)}
.o-secmenu__meta{font:400 var(--t-11) var(--mono);color:var(--pencil)}
.o-secmenu__label{padding:var(--s-4) var(--s-2) var(--s-1);font:500 10.5px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--faint)}
.o-secmenu__item{display:flex;align-items:center;gap:8px;min-height:28px;padding:0 var(--s-2);border-radius:var(--r-2);color:var(--graphite);text-decoration:none;font-size:var(--t-13)}
.o-secmenu__item .o-icon{width:14px;height:14px;color:var(--faint)}
.o-secmenu__item:hover{background:var(--well-hover);color:var(--ink)}
.o-secmenu__item[aria-current=true]{background:var(--well-hover);color:var(--ink);font-weight:600}
.o-secmenu__item[aria-current=true] .o-icon{color:var(--ink)}
.o-secmenu__item>span:first-of-type{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.o-secmenu__item--sub{min-height:26px;font-size:var(--t-12)}
.o-secmenu__find{display:flex;align-items:center;gap:6px;height:28px;margin:var(--s-1) 0;padding:0 var(--s-2);border:1px solid var(--rule);border-radius:var(--r-2);background:var(--paper);color:var(--faint);font-size:var(--t-12)}
.o-badge{display:inline-flex;align-items:center;height:18px;padding:0 6px;border:1px solid var(--rule-2);border-radius:var(--r-1);font:500 10.5px var(--mono);color:var(--pencil);white-space:nowrap}
.o-badge--alert{border-color:color-mix(in srgb,var(--alert) 40%,transparent);background:var(--alert-wash);color:var(--alert)}
.o-badge--draft{border-color:color-mix(in srgb,var(--draft) 40%,transparent);background:var(--draft-wash);color:var(--draft-ink)}
.o-badge--ok{border-color:color-mix(in srgb,var(--ok) 35%,transparent);color:var(--ok)}
.o-badge .o-icon{width:11px;height:11px;margin-right:4px}
.o-btn--primary .o-kbd{background:transparent;border-color:rgba(255,255,255,.35);color:inherit}
.o-main{grid-area:main;display:flex;flex-direction:column;min-width:0;min-height:0}
.o-main__body{flex:1;min-height:0;overflow:auto;padding:var(--s-8) var(--s-10) var(--s-12)}
.o-main__body>h1{font-size:var(--t-24);margin-bottom:var(--s-1)}
.o-main__lead{margin-bottom:var(--s-6);color:var(--pencil);font-size:var(--t-13)}
.o-main__body h2{margin:var(--s-8) 0 var(--s-3);font-size:var(--t-16)}
/* โ”€โ”€ ๋ฐ์ดํ„ฐ ๊ฒฉ์ž: ์—ด๋ฆฐ ํ‘œ ํƒญ ยท ๋„๊ตฌ ์ค„ ยท ๊ฒฉ์ž ยท ์•„๋ž˜ ์ค„ (Supabase Table Editor ์‹, ์ฝ๊ธฐ ์ „์šฉ) โ”€โ”€ */
.o-filetabs{display:flex;flex:none;height:38px;background:var(--desk);border-bottom:1px solid var(--rule);overflow-x:auto;scrollbar-width:none}
.o-filetabs a{display:inline-flex;align-items:center;gap:6px;padding:0 var(--s-4);border-right:1px solid var(--rule);color:var(--pencil);text-decoration:none;font-size:var(--t-12);white-space:nowrap}
.o-filetabs a .o-icon{width:13px;height:13px}
.o-filetabs a:hover{color:var(--ink)}
.o-filetabs a[aria-selected=true]{background:var(--paper);color:var(--ink);font-weight:600;margin-bottom:-1px;border-bottom:1px solid var(--paper)}
.o-gridbar{display:flex;flex:none;align-items:center;gap:var(--s-2);height:44px;padding:0 var(--s-3);border-bottom:1px solid var(--rule)}
.o-gridbar__find{display:flex;flex:1;align-items:center;gap:8px;min-width:0;height:28px;padding:0 var(--s-2);color:var(--faint);font-size:var(--t-13)}
.o-gridbar__find span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.o-gridbar .o-btn .o-icon{width:13px;height:13px}
.o-gridbar__sep{width:1px;height:20px;background:var(--rule-2)}
.o-grid-wrap{flex:1;min-height:0;overflow:auto}
.o-grid{border-collapse:separate;border-spacing:0;min-width:100%;font:400 var(--t-12)/1 var(--mono);color:var(--graphite)}
.o-grid th{position:sticky;top:0;z-index:1;height:34px;padding:0 var(--s-3);background:var(--desk);border-bottom:1px solid var(--rule-2);border-right:1px solid var(--rule);text-align:left;white-space:nowrap;font-weight:400}
.o-grid td{height:32px;max-width:280px;min-width:120px;padding:0 var(--s-3);border-bottom:1px solid var(--rule);border-right:1px solid var(--rule);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.o-grid tbody tr:hover td{background:var(--desk)}
.o-grid th.o-grid__check,.o-grid td.o-grid__check{width:36px;min-width:36px;padding:0;text-align:center}
.o-grid__check input{accent-color:var(--ink);width:13px;height:13px;vertical-align:middle}
.o-grid__name{font:600 var(--t-12) var(--sans);color:var(--ink)}
.o-grid__type{margin-left:6px;font:400 var(--t-11) var(--mono);color:var(--faint)}
.o-grid__key{width:12px;height:12px;margin-right:6px;vertical-align:-2px;color:var(--pencil)}
.o-grid__key--fk{color:var(--draft)}
.o-grid .o-cell-masked{color:var(--alert)}
.o-grid__foot{display:flex;flex:none;align-items:center;gap:var(--s-3);height:40px;padding:0 var(--s-3);border-top:1px solid var(--rule);font-size:var(--t-12);color:var(--pencil)}
.o-grid__foot .o-badge{margin-left:auto}
.o-grid__pager{display:flex;align-items:center;gap:6px}
.o-grid__pager input{width:40px;height:24px;padding:0 6px;border:1px solid var(--rule-2);border-radius:var(--r-2);font:inherit;text-align:center}
/* โ”€โ”€ ๊ณ ์น  ๊ฒƒ ์นด๋“œ(Supabase Advisor ์‹): ๊ฐˆ๋ž˜ ยท ๋ฌด๊ฒŒ ยท ํ•œ ์ค„ ยท ๊ทผ๊ฑฐ ยท ํ•  ์ผ โ”€โ”€ */
.o-advisor{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--s-3)}
.o-advisor__card{display:flex;flex-direction:column;gap:var(--s-2);min-height:150px;padding:var(--s-4);border:1px solid var(--rule-2);border-radius:var(--r-4);background:var(--paper)}
.o-advisor__card--high{border-color:color-mix(in srgb,var(--alert) 30%,transparent);background:color-mix(in srgb,var(--alert-wash) 45%,var(--paper))}
.o-advisor__head{display:flex;align-items:center;gap:8px;font:500 var(--t-11) var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--pencil)}
.o-advisor__head .o-badge{margin-left:auto}
.o-advisor__card--high .o-advisor__head .o-icon{color:var(--alert)}
.o-advisor__title{margin-top:auto;font-size:var(--t-13);font-weight:600;color:var(--ink)}
.o-advisor__why{font-size:var(--t-12);color:var(--pencil);line-height:1.5}
.o-advisor__why code{font-size:var(--t-11);padding:1px 4px;border:1px solid var(--rule);border-radius:var(--r-1);background:var(--desk)}
@media(max-width:820px){
.o-app,.o-app--nomenu{grid-template:"bar" 48px "rail" auto "menu" auto "main" minmax(70dvh,1fr)/minmax(0,1fr);height:auto;min-height:100dvh;overflow:visible}
.o-rail{flex-direction:row;justify-content:flex-start;padding:4px 8px;border-right:0;border-bottom:1px solid var(--rule);overflow-x:auto}
.o-rail__sep{width:1px;height:20px;margin:0 6px}.o-rail__end{margin:0 0 0 auto}
.o-secmenu{max-height:40dvh;border-right:0;border-bottom:1px solid var(--rule)}
.o-app__bar .o-search{display:none}
.o-app__bar .o-crumbs{overflow:hidden}.o-app__bar .o-crumbs>:not(:last-child){display:none}
.o-gridbar{flex-wrap:wrap;height:auto;padding:6px var(--s-3)}.o-gridbar__find{flex-basis:100%}
.o-main__body{padding:var(--s-5) var(--s-4) var(--s-8)}
}
/* โ”€โ”€ ์ž‘์—…๋Œ€ ๋ณธ๋ฌธ + ์˜ค๋ฅธ์ชฝ ์นธ(์‚ฐ์ถœ๋ฌผ ยท ์†์„ฑ ยท ๋‹ค์Œ์— ํ•  ์ผ) โ”€โ”€ */
.o-main__cols{display:grid;grid-template-columns:minmax(0,1fr) 300px;flex:1;min-height:0}
.o-main__cols>.o-main__body{min-width:0}
.o-main__aside{display:flex;flex-direction:column;gap:var(--s-6);min-height:0;overflow:auto;padding:var(--s-8) var(--s-5);border-left:1px solid var(--rule);background:var(--desk)}
.o-main__aside h2{margin:0 0 var(--s-2);font-size:var(--t-12);font-weight:600;color:var(--pencil)}
.o-secmenu__count{margin-left:auto;font:400 var(--t-11) var(--mono);color:var(--faint)}
/* โ”€โ”€ ํƒ€์ผ ๊ฒฉ์ž: Space ํ•˜๋‚˜ = ์นด๋“œ ํ•œ ์žฅ(์ด๋ฆ„ ยท ํ•œ ์ค„ ยท ์ƒํƒœ ยท ๋ณ„์นญ). ์ˆซ์ž ยท ๊ฑด๊ฐ•์€ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค โ”€โ”€ */
.o-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--s-3)}
.o-tile{display:flex;flex-direction:column;gap:var(--s-2);min-height:120px;padding:var(--s-4);border:1px solid var(--rule-2);border-radius:var(--r-4);background:var(--paper);color:inherit;text-decoration:none;transition:border-color var(--d-1) var(--ease),box-shadow var(--d-1) var(--ease)}
.o-tile:hover{border-color:var(--rule-3);box-shadow:0 1px 2px rgba(21,23,28,.06)}
.o-tile__name{display:flex;align-items:center;gap:6px;font-size:var(--t-14);font-weight:650;color:var(--ink)}
.o-tile__name .o-icon{color:var(--faint)}
.o-tile__line{font-size:var(--t-13);color:var(--graphite);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.o-tile__foot{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto}
/* โ”€โ”€ ๋ฌธ์„œ ๋ณธ๋ฌธ: ์ œ๋ชฉ ยท ๋ฌธ๋‹จ ยท ๋ชฉ๋ก ยท ์ฝ”๋“œ ยท ํ‘œ (๋งˆํฌ๋‹ค์šด์„ ์˜ฎ๊ธด ๊ธ€) โ”€โ”€ */
.o-prose{max-width:760px;font-size:var(--t-14);line-height:1.75;color:var(--graphite)}
.o-prose h1{font-size:var(--t-24);margin:0 0 var(--s-4);color:var(--ink)}
.o-prose h2{font-size:var(--t-16);margin:var(--s-8) 0 var(--s-2);color:var(--ink)}
.o-prose h3{font-size:var(--t-14);margin:var(--s-6) 0 var(--s-2);color:var(--ink)}
.o-prose p{margin:0 0 var(--s-3)}
.o-prose ul,.o-prose ol{margin:0 0 var(--s-3);padding-left:1.4em}.o-prose li{margin:2px 0}
.o-prose code{padding:1px 5px;border:1px solid var(--rule);border-radius:var(--r-1);background:var(--desk)}
.o-prose a{color:var(--draft-ink)}
/* โ”€โ”€ ๊ด€๊ณ„ ๊ทธ๋ฆผ(SVG): ์ƒ์ž ยท ๋จธ๋ฆฌ ยท PK/FK ์•Œ์•ฝ ยท ์„ (ํ›„๋ณด = ์ ์„ ) ยท ๊ฐ€์šด๋ฐ ๊ฐ•์กฐ โ”€โ”€ */
.o-graph text{font-size:11px;fill:var(--graphite)}
.o-graph{display:block;width:100%;height:auto;border:1px solid var(--rule);border-radius:var(--r-3);background:var(--desk);font-family:var(--sans)}
.o-graph__node{fill:var(--paper);stroke:var(--rule-3)}
.o-graph a:hover .o-graph__node{stroke:var(--ink)}
.o-graph__node--focus{fill:var(--ink);stroke:var(--ink)}
.o-graph__node--focus~text{fill:var(--paper)}
.o-graph__node--edge{stroke:var(--ink);stroke-width:2}
.o-graph__text{font-size:11px;fill:var(--graphite)}
.o-graph__head{font-size:12px;font-weight:600;fill:var(--ink)}
.o-graph__group{font-size:10.5px;font-family:var(--mono);letter-spacing:.06em;fill:var(--faint)}
.o-graph__pill{font:700 9px var(--mono);fill:var(--pencil)}.o-graph__pill--fk{fill:var(--draft)}
.o-graph__line{fill:none;stroke:var(--rule-3);stroke-width:1.25}
.o-graph__line--draft{stroke:var(--draft);stroke-dasharray:4 3}
.o-graph__more{font-size:11px;fill:var(--faint)}
@media(max-width:820px){.o-main__cols{grid-template-columns:minmax(0,1fr)}.o-main__aside{border-left:0;border-top:1px solid var(--rule)}}