:root{--color-paper: oklch(97% .003 240);--color-paper-2: oklch(94.5% .004 240);--color-card: oklch(100% 0 0);--color-header: oklch(26% .045 235);--color-header-2: oklch(31% .05 235);--color-ink: oklch(24% .02 250);--color-ink-2: oklch(45% .015 250);--color-ink-3: oklch(58% .012 250);--color-ink-inverse: oklch(98% .002 240);--color-brand-green: oklch(78% .21 140);--color-accent: oklch(52% .17 255);--color-accent-hover: oklch(46% .17 255);--color-accent-active: oklch(41% .16 255);--color-focus: oklch(52% .17 255);--color-p1: oklch(50% .19 28);--color-p1-bg: oklch(95% .03 28);--color-p2: oklch(58% .15 55);--color-p2-bg: oklch(95% .04 75);--color-p3: oklch(52% .1 90);--color-p3-bg: oklch(96% .05 100);--color-p4: oklch(45% .02 250);--color-p4-bg: oklch(94% .005 250);--color-success: oklch(52% .13 150);--color-error: oklch(50% .19 28);--color-error-bg: oklch(96% .02 28);--color-line: oklch(88% .006 250);--color-line-2: oklch(82% .008 250);--font-body: "Lato", -apple-system, "Segoe UI", sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", monospace;--text-xs: .6875rem;--text-sm: .75rem;--text-base: .8125rem;--text-md: .875rem;--text-lg: 1rem;--text-xl: 1.25rem;--space-2xs: .25rem;--space-xs: .5rem;--space-sm: .75rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2rem;--radius-sm: .1875rem;--radius-md: .375rem;--radius-pill: 999px;--rule: 1px solid var(--color-line);--shadow-card: 0 1px 2px oklch(24% .02 250 / .08);--shadow-card-drag: 0 8px 20px oklch(24% .02 250 / .18);--shadow-modal: 0 16px 48px oklch(24% .02 250 / .25);--dur-fast: .12s;--dur-base: .18s;--ease-out: cubic-bezier(.22, 1, .36, 1);--ease-in-out: cubic-bezier(.65, 0, .35, 1)}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;overflow-x:clip}body{font-family:var(--font-body);font-size:var(--text-base);color:var(--color-ink);background:var(--color-paper)}#root{display:flex;flex-direction:column;height:100dvh}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--color-focus);outline-offset:1px}.topnav{display:flex;align-items:center;gap:var(--space-md);height:3rem;padding:0 var(--space-md);background:var(--color-header);color:var(--color-ink-inverse);flex-shrink:0}.topnav__logo{display:flex;align-items:baseline;gap:2px;font-size:var(--text-lg);font-weight:400;letter-spacing:-.01em;white-space:nowrap}.topnav__logo strong{font-weight:900}.topnav__logo-dot{width:.5rem;height:.5rem;border-radius:var(--radius-pill);background:var(--color-brand-green);align-self:center;margin-left:var(--space-2xs)}.topnav__search{flex:1;max-width:26rem;margin-inline:auto;min-width:0}.topnav__search input{width:100%;height:2rem;padding:0 var(--space-sm);border:1px solid oklch(100% 0 0 / .25);border-radius:var(--radius-md);background:#ffffff1f;color:var(--color-ink-inverse)}.topnav__search input::placeholder{color:#ffffff8c}.topnav__right{display:flex;align-items:center;gap:var(--space-sm)}.avatar{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;border-radius:var(--radius-pill);font-size:var(--text-xs);font-weight:700;color:var(--color-ink-inverse);flex-shrink:0}.shell{display:flex;flex:1;min-height:0}.sidebar{width:13.5rem;flex-shrink:0;background:var(--color-card);border-right:var(--rule);padding:var(--space-sm) 0;overflow-y:auto}.sidebar__label{padding:var(--space-xs) var(--space-md);font-size:var(--text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--color-ink-3)}.sidebar__item{display:block;width:100%;padding:var(--space-xs) var(--space-md);border:0;background:none;text-align:left;cursor:pointer;color:var(--color-ink-2);border-left:3px solid transparent}.sidebar__item:hover{background:var(--color-paper);color:var(--color-ink)}.sidebar__item.is-active{border-left-color:var(--color-accent);background:var(--color-paper);color:var(--color-ink);font-weight:700}@media(max-width:768px){.sidebar{display:none}}.main{display:flex;flex-direction:column;flex:1;min-width:0}.boardbar{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-md);background:var(--color-card);border-bottom:var(--rule)}.boardbar h1{margin:0;font-size:var(--text-lg);font-weight:700;overflow-wrap:anywhere;min-width:0}.boardbar__meta{color:var(--color-ink-3);font-size:var(--text-sm)}.boardbar__spacer{flex:1}.board{display:flex;gap:var(--space-sm);flex:1;min-height:0;padding:var(--space-md);overflow-x:auto}.column{display:flex;flex-direction:column;width:17rem;flex-shrink:0;background:var(--color-paper-2);border-radius:var(--radius-md);border:1px solid transparent;transition:border-color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out)}.column.is-over{border-color:var(--color-accent);background:#dfe9f5}.column__head{display:flex;align-items:center;gap:var(--space-xs);padding:var(--space-sm) var(--space-sm) var(--space-xs)}.column__title{font-size:var(--text-sm);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--color-ink-2)}.column__count{font-size:var(--text-xs);font-weight:700;color:var(--color-ink-2);background:var(--color-line);border-radius:var(--radius-pill);padding:1px var(--space-xs)}.column__list{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-2xs) var(--space-xs) var(--space-xs);overflow-y:auto;flex:1}.column__empty{margin:var(--space-xs);padding:var(--space-md);border:1px dashed var(--color-line-2);border-radius:var(--radius-md);color:var(--color-ink-3);font-size:var(--text-sm);text-align:center}.card{background:var(--color-card);border:var(--rule);border-radius:var(--radius-md);box-shadow:var(--shadow-card);padding:var(--space-sm);cursor:grab;text-align:left;width:100%;transition:box-shadow var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out)}.card:hover{box-shadow:0 2px 6px #18202924}.card:active{cursor:grabbing}.card.is-dragging{opacity:.4;box-shadow:var(--shadow-card-drag)}.card__top{display:flex;align-items:center;gap:var(--space-xs);margin-bottom:var(--space-2xs)}.card__number{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-accent);font-weight:500}.card__short{margin:0 0 var(--space-xs);font-size:var(--text-base);font-weight:400;line-height:1.35;color:var(--color-ink);overflow-wrap:anywhere}.card__foot{display:flex;align-items:center;gap:var(--space-xs)}.card__foot .avatar{width:1.375rem;height:1.375rem;font-size:.5625rem}.card__group{font-size:var(--text-xs);color:var(--color-ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.badge{font-size:var(--text-xs);font-weight:700;border-radius:var(--radius-sm);padding:1px var(--space-2xs);white-space:nowrap}.badge--p1{color:var(--color-p1);background:var(--color-p1-bg)}.badge--p2{color:var(--color-p2);background:var(--color-p2-bg)}.badge--p3{color:var(--color-p3);background:var(--color-p3-bg)}.badge--p4{color:var(--color-p4);background:var(--color-p4-bg)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2xs);height:2rem;padding:0 var(--space-sm);border-radius:var(--radius-md);border:1px solid transparent;font-weight:700;font-size:var(--text-base);cursor:pointer;white-space:nowrap;transition:background-color var(--dur-fast) var(--ease-out)}.btn--primary{background:var(--color-accent);color:var(--color-ink-inverse)}.btn--primary:hover{background:var(--color-accent-hover)}.btn--primary:active{background:var(--color-accent-active);transform:translateY(1px)}.btn--ghost{background:var(--color-card);border-color:var(--color-line-2);color:var(--color-ink)}.btn--ghost:hover{background:var(--color-paper)}.btn--ghost:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#18202973;display:flex;align-items:flex-start;justify-content:center;padding:var(--space-xl) var(--space-md);overflow-y:auto;z-index:10}.modal{background:var(--color-card);border-radius:var(--radius-md);box-shadow:var(--shadow-modal);width:100%;max-width:34rem;animation:modal-in var(--dur-base) var(--ease-out)}@keyframes modal-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.modal__head{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-bottom:var(--rule)}.modal__head h2{margin:0;font-size:var(--text-md);font-weight:700;flex:1;min-width:0;overflow-wrap:anywhere}.modal__head .card__number{font-size:var(--text-sm)}.modal__close{border:0;background:none;cursor:pointer;color:var(--color-ink-3);font-size:var(--text-lg);line-height:1;padding:var(--space-2xs);border-radius:var(--radius-sm)}.modal__close:hover{color:var(--color-ink);background:var(--color-paper)}.form{padding:var(--space-md);display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm) var(--space-md)}.form .field--full{grid-column:1 / -1}@media(max-width:480px){.form{grid-template-columns:1fr}}.field{display:flex;flex-direction:column;gap:var(--space-2xs);min-width:0}.field label{font-size:var(--text-sm);font-weight:700;color:var(--color-ink-2)}.field label .req{color:var(--color-error)}.field input,.field select,.field textarea{width:100%;border:1px solid var(--color-line-2);border-radius:var(--radius-sm);padding:var(--space-xs);background:var(--color-card);transition:border-color var(--dur-fast) var(--ease-out)}.field input:hover,.field select:hover,.field textarea:hover{border-color:var(--color-ink-3)}.field textarea{resize:vertical;min-height:4.5rem}.field.has-error input{border-color:var(--color-error);background:var(--color-error-bg)}.field__error{font-size:var(--text-xs);color:var(--color-error)}.modal__foot{display:flex;justify-content:flex-end;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);border-top:var(--rule)}.toast{position:fixed;bottom:var(--space-lg);left:50%;transform:translate(-50%);background:var(--color-header);color:var(--color-ink-inverse);border-radius:var(--radius-md);padding:var(--space-xs) var(--space-md);font-size:var(--text-base);box-shadow:var(--shadow-modal);animation:modal-in var(--dur-base) var(--ease-out);z-index:20}.toast strong{font-family:var(--font-mono);font-weight:500;color:var(--color-brand-green)}.view-scroll{flex:1;min-height:0;overflow-y:auto;padding:var(--space-md)}.sidebar__item:disabled{color:var(--color-ink-3);cursor:default}.sidebar__item:disabled:hover{background:none;color:var(--color-ink-3)}.catalog{display:grid;grid-template-columns:repeat(auto-fill,minmax(16rem,1fr));gap:var(--space-md);max-width:60rem}.catalog__card{display:flex;flex-direction:column;gap:var(--space-xs);background:var(--color-card);border:var(--rule);border-radius:var(--radius-md);box-shadow:var(--shadow-card);padding:var(--space-md)}.catalog__tag{align-self:flex-start;font-size:var(--text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--color-accent);background:#e2ecf9;border-radius:var(--radius-sm);padding:1px var(--space-2xs)}.catalog__title{margin:0;font-size:var(--text-lg);font-weight:700;overflow-wrap:anywhere}.catalog__desc{margin:0;color:var(--color-ink-2);line-height:1.4;flex:1}.catalog__rules{margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:var(--space-2xs)}.catalog__rules li{font-size:var(--text-xs);color:var(--color-ink-2);background:var(--color-paper);border:var(--rule);border-radius:var(--radius-pill);padding:1px var(--space-xs)}.catalog .btn{align-self:flex-start}.rules-preview{display:flex;flex-direction:column;gap:var(--space-2xs);background:var(--color-paper);border:var(--rule);border-radius:var(--radius-md);padding:var(--space-xs) var(--space-sm);font-size:var(--text-sm)}.rules-preview__label{display:inline-block;width:6rem;color:var(--color-ink-3);font-weight:700;font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.05em}.rules-preview code{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--color-ink)}.rules-preview__warn{color:var(--color-p2);font-weight:700;font-size:var(--text-xs)}.requests{background:var(--color-card);border:var(--rule);border-radius:var(--radius-md);overflow-x:auto}.requests-empty{color:var(--color-ink-3);padding:var(--space-xl);text-align:center}.reqtable{width:100%;border-collapse:collapse;font-size:var(--text-base)}.reqtable th{text-align:left;font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.05em;color:var(--color-ink-3);padding:var(--space-xs) var(--space-sm);border-bottom:var(--rule);white-space:nowrap}.reqtable td{padding:var(--space-xs) var(--space-sm);border-bottom:var(--rule);white-space:nowrap}.reqtable tbody tr{cursor:pointer}.reqtable tbody tr:hover{background:var(--color-paper)}.reqtable tbody tr:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}.reqtable__date{color:var(--color-ink-3);font-size:var(--text-sm)}.state{display:inline-block;font-size:var(--text-xs);font-weight:700;border-radius:var(--radius-pill);padding:2px var(--space-xs);white-space:nowrap}.state--pending{color:var(--color-p2);background:var(--color-p2-bg)}.state--wip{color:var(--color-accent);background:#e2ecf9}.state--complete{color:var(--color-success);background:#e1f5e4}.state--rejected{color:var(--color-p1);background:var(--color-p1-bg)}.modal--wide{max-width:44rem}.stages{display:flex;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);border-bottom:var(--rule);overflow-x:auto}.stage{display:flex;align-items:center;gap:var(--space-2xs);flex:1;min-width:0}.stage__dot{width:.625rem;height:.625rem;border-radius:var(--radius-pill);background:var(--color-line-2);flex-shrink:0}.stage.is-done .stage__dot{background:var(--color-success)}.stage.is-current .stage__dot{background:var(--color-accent)}.stage.is-rejected .stage__dot{background:var(--color-p1)}.stage__label{font-size:var(--text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--color-ink-3);white-space:nowrap}.stage.is-done .stage__label,.stage.is-current .stage__label{color:var(--color-ink)}.stage.is-rejected .stage__label{color:var(--color-p1)}.req-body{padding:var(--space-md);max-height:60dvh;overflow-y:auto}.req-fields{display:grid;grid-template-columns:repeat(auto-fill,minmax(11rem,1fr));gap:var(--space-xs) var(--space-md);margin:0 0 var(--space-md)}.req-fields div{min-width:0}.req-fields dt{font-size:var(--text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--color-ink-3)}.req-fields dd{margin:0;overflow-wrap:anywhere}.req-fields code{font-family:var(--font-mono);font-size:var(--text-sm)}.approval-box{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap;background:var(--color-p2-bg);border:1px solid oklch(85% .06 75);border-radius:var(--radius-md);padding:var(--space-sm) var(--space-md);margin-bottom:var(--space-md)}.approval-box__text{flex:1;min-width:12rem}.approval-box__hint{color:var(--color-ink-2);font-size:var(--text-sm)}.approval-box__actions{display:flex;gap:var(--space-xs)}.req-section-title{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap;margin:0 0 var(--space-xs);font-size:var(--text-md)}.running-pill{font-size:var(--text-xs);font-weight:700;color:var(--color-accent);background:#e2ecf9;border-radius:var(--radius-pill);padding:2px var(--space-xs);animation:pulse 1.4s var(--ease-in-out) infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.55}}.timeline{list-style:none;margin:0;padding:0;border-left:2px solid var(--color-line)}.tl{display:flex;align-items:baseline;gap:var(--space-sm);padding:var(--space-2xs) 0 var(--space-2xs) var(--space-sm);animation:modal-in var(--dur-base) var(--ease-out)}.tl__time{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-ink-3);flex-shrink:0}.tl__text{line-height:1.4}.tl--approval .tl__text{font-weight:700}.tl--mail .tl__text{color:var(--color-success)}.tl--hook .tl__text{color:var(--color-accent);font-weight:700}.tl__code{font-family:var(--font-mono);font-size:var(--text-sm);background:#0b1723;color:#bce3c3;border-radius:var(--radius-sm);padding:var(--space-2xs) var(--space-xs);overflow-wrap:anywhere;line-height:1.4}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:1ms!important;transition-duration:1ms!important}}
