archik 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-rose-700:oklch(51.4% .222 16.935);--spacing:.25rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-semibold:600;--tracking-tight:-.025em;--radius-md:.375rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-auto{margin-top:auto}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-full{height:100%}.h-screen{height:100vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-72{width:calc(var(--spacing) * 72)}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.flex-1{flex:1}.grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.pt-4{padding-top:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.whitespace-pre-wrap{white-space:pre-wrap}.text-rose-700{color:var(--color-rose-700)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media(hover:hover){.hover\:no-underline:hover{text-decoration-line:none}}}:root,[data-theme=light]{--archik-canvas:#f8fafc;--archik-panel:#fff;--archik-surface:#f1f5f9;--archik-surface-hover:#e2e8f0;--archik-fg:#0f172a;--archik-fg-dim:#475569;--archik-fg-muted:#94a3b8;--archik-border:#e2e8f0;--archik-border-strong:#cbd5e1;--archik-accent:#2563eb;--archik-accent-bright:#3b82f6;--archik-magenta:#db2777;--archik-success:#10b981;--archik-warning:#d97706;--archik-danger:#e11d48;--archik-node-fill:#fff;--archik-node-fill-tinted:#f1f5f9;--archik-node-fill-frame:#fff;--archik-node-stroke:#0f172a;--archik-node-stroke-soft:#475569;--archik-container-border:#94a3b8;--archik-node-text:#0f172a;--archik-node-text-dim:#475569;--archik-node-caption:#64748b;--archik-node-chrome-dot:#cbd5f5;--archik-edge-filled:#0f172a;--archik-edge-open:#334155;--archik-edge-dim:#64748b;--archik-edge-async:#2563eb;--archik-grid-minor:#e2e8f0;--archik-grid-major:#cbd5e1;--archik-selected:#2563eb;--archik-selected-glow:#2563eb2e;--archik-status-proposed:#6366f1;--archik-status-deprecated:#d97706;--archik-stereotype-boundary:#0369a1;--archik-stereotype-control:#b45309;--archik-stereotype-entity:#15803d;color-scheme:light}[data-theme=dark]{--archik-canvas:#050912;--archik-panel:#0c1426;--archik-surface:#14203a;--archik-surface-hover:#1c2c4d;--archik-fg:#e6edf7;--archik-fg-dim:#8b9bb8;--archik-fg-muted:#5b6a87;--archik-border:#1d2b48;--archik-border-strong:#2c3e63;--archik-accent:#22d3ee;--archik-accent-bright:#67e8f9;--archik-magenta:#f472b6;--archik-success:#34d399;--archik-warning:#fbbf24;--archik-danger:#fb7185;--archik-node-fill:#0c1426;--archik-node-fill-tinted:#142037;--archik-node-fill-frame:#14203a;--archik-node-stroke:#2c3e63;--archik-node-stroke-soft:#1d2b48;--archik-container-border:#3a4f7a;--archik-node-text:#e6edf7;--archik-node-text-dim:#b6c2d8;--archik-node-caption:#67e8f9;--archik-node-chrome-dot:#475878;--archik-edge-filled:#cbd5e1;--archik-edge-open:#94a3b8;--archik-edge-dim:#64748b;--archik-edge-async:#67e8f9;--archik-grid-minor:#0d1830;--archik-grid-major:#182748;--archik-selected:#22d3ee;--archik-selected-glow:#22d3ee47;--archik-status-proposed:#818cf8;--archik-status-deprecated:#fbbf24;--archik-stereotype-boundary:#38bdf8;--archik-stereotype-control:#f59e0b;--archik-stereotype-entity:#22c55e;color-scheme:dark}html,body,#root{background:var(--archik-canvas);height:100%;color:var(--archik-fg);-webkit-font-smoothing:antialiased;margin:0;font-family:Inter,system-ui,sans-serif}.archik-panel{background:var(--archik-panel);border:1px solid var(--archik-border);border-radius:8px}.archik-input{background:var(--archik-surface);color:var(--archik-fg);border:1px solid var(--archik-border);font:inherit;border-radius:4px;outline:none;padding:4px 8px;font-size:12px;transition:border-color .12s,box-shadow .12s}.archik-input:focus{border-color:var(--archik-accent);box-shadow:0 0 0 3px var(--archik-selected-glow)}.archik-btn{background:var(--archik-surface);color:var(--archik-fg);border:1px solid var(--archik-border);cursor:pointer;border-radius:4px;align-items:center;gap:4px;padding:5px 10px;font-size:12px;font-weight:500;transition:background .12s,border-color .12s,color .12s;display:inline-flex}.archik-btn:hover{background:var(--archik-surface-hover);border-color:var(--archik-border-strong)}.archik-btn:disabled{opacity:.5;cursor:not-allowed}.archik-btn-primary{background:var(--archik-accent);border-color:var(--archik-accent);color:#050912}.archik-btn-primary:hover{background:var(--archik-accent-bright);border-color:var(--archik-accent-bright)}[data-theme=light] .archik-btn-primary{color:#fff}.archik-btn-danger{color:var(--archik-danger);border-color:var(--archik-danger);background:0 0;border-style:dashed}.archik-btn-danger:hover{background:var(--archik-danger);color:#050912;border-style:solid}.archik-pill{letter-spacing:.02em;border:1px solid #0000;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;font-size:11px;display:inline-flex}.archik-pill--info{color:var(--archik-accent);border-color:var(--archik-border-strong);background:var(--archik-accent)}@supports (color:color-mix(in lab,red,red)){.archik-pill--info{background:color-mix(in oklab,var(--archik-accent) 8%,transparent)}}.archik-pill--success{color:var(--archik-success);background:var(--archik-success)}@supports (color:color-mix(in lab,red,red)){.archik-pill--success{background:color-mix(in oklab,var(--archik-success) 12%,transparent)}}.archik-pill--warning{color:var(--archik-warning);background:var(--archik-warning)}@supports (color:color-mix(in lab,red,red)){.archik-pill--warning{background:color-mix(in oklab,var(--archik-warning) 14%,transparent)}}.archik-pill--danger{color:var(--archik-danger);background:var(--archik-danger)}@supports (color:color-mix(in lab,red,red)){.archik-pill--danger{background:color-mix(in oklab,var(--archik-danger) 14%,transparent)}}.archik-label{letter-spacing:.12em;text-transform:uppercase;color:var(--archik-fg-muted);margin-bottom:4px;font-size:10px;display:block}.archik-mono{color:var(--archik-fg);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.archik-divider{border-top:1px solid var(--archik-border)}.archik-grid{background-color:var(--archik-canvas);background-image:radial-gradient(var(--archik-grid-minor) 1px,transparent 1px),radial-gradient(var(--archik-grid-major) 1px,transparent 1px);background-position:0 0,0 0;background-size:20px 20px,100px 100px}.archik-selected-glow{filter:drop-shadow(0 0 6px var(--archik-selected-glow)) drop-shadow(0 0 2px var(--archik-selected-glow));animation:1.8s ease-in-out infinite archikPulse}[data-archik-node-id][data-archik-status=proposed]{opacity:.82}[data-archik-node-id][data-archik-status=proposed] rect,[data-archik-node-id][data-archik-status=proposed] path,[data-archik-node-id][data-archik-status=proposed] ellipse,[data-archik-node-id][data-archik-status=proposed] line{stroke:var(--archik-status-proposed);stroke-dasharray:5 3}[data-archik-node-id][data-archik-status=deprecated]{opacity:.7}[data-archik-node-id][data-archik-status=deprecated] rect,[data-archik-node-id][data-archik-status=deprecated] path,[data-archik-node-id][data-archik-status=deprecated] ellipse,[data-archik-node-id][data-archik-status=deprecated] line{stroke:var(--archik-status-deprecated);stroke-dasharray:2 4}[data-archik-node-id][data-archik-status=deprecated] text{text-decoration:line-through;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--archik-status-deprecated);text-decoration-color:var(--archik-status-deprecated)}.archik-stereotype-band{pointer-events:none}[data-archik-stereotype=boundary] .archik-stereotype-band{fill:var(--archik-stereotype-boundary)}[data-archik-stereotype=control] .archik-stereotype-band{fill:var(--archik-stereotype-control)}[data-archik-stereotype=entity] .archik-stereotype-band{fill:var(--archik-stereotype-entity)}.archik-stereotype-pill{letter-spacing:.08em;border:1px solid #0000;border-radius:10px;align-self:flex-start;align-items:center;padding:3px 10px;font-size:10px;font-weight:700;display:inline-flex}.archik-stereotype-pill[data-stereotype=boundary]{background:var(--archik-stereotype-boundary)}@supports (color:color-mix(in lab,red,red)){.archik-stereotype-pill[data-stereotype=boundary]{background:color-mix(in srgb,var(--archik-stereotype-boundary) 15%,transparent)}}.archik-stereotype-pill[data-stereotype=boundary]{border-color:var(--archik-stereotype-boundary);color:var(--archik-stereotype-boundary)}.archik-stereotype-pill[data-stereotype=control]{background:var(--archik-stereotype-control)}@supports (color:color-mix(in lab,red,red)){.archik-stereotype-pill[data-stereotype=control]{background:color-mix(in srgb,var(--archik-stereotype-control) 15%,transparent)}}.archik-stereotype-pill[data-stereotype=control]{border-color:var(--archik-stereotype-control);color:var(--archik-stereotype-control)}.archik-stereotype-pill[data-stereotype=entity]{background:var(--archik-stereotype-entity)}@supports (color:color-mix(in lab,red,red)){.archik-stereotype-pill[data-stereotype=entity]{background:color-mix(in srgb,var(--archik-stereotype-entity) 15%,transparent)}}.archik-stereotype-pill[data-stereotype=entity]{border-color:var(--archik-stereotype-entity);color:var(--archik-stereotype-entity)}@keyframes archikPulse{0%,to{filter:drop-shadow(0 0 4px var(--archik-selected-glow)) drop-shadow(0 0 1px var(--archik-selected-glow))}50%{filter:drop-shadow(0 0 12px var(--archik-selected-glow)) drop-shadow(0 0 3px var(--archik-selected-glow))}}.archik-modal-overlay{z-index:50;background:var(--archik-canvas);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}@supports (color:color-mix(in lab,red,red)){.archik-modal-overlay{background:color-mix(in oklab,var(--archik-canvas) 70%,transparent)}}.archik-modal-overlay{-webkit-backdrop-filter:blur(4px);animation:.14s ease-out archikFadeIn}.archik-modal{background:var(--archik-panel);border:1px solid var(--archik-border);width:360px;max-width:calc(100vw - 32px);box-shadow:0 12px 40px #00000059,0 0 0 1px var(--archik-border-strong);border-radius:8px;padding:16px;animation:.2s cubic-bezier(.2,.8,.2,1) archikModalIn}.archik-selected-outline{fill:none;stroke:var(--archik-selected);stroke-width:2px;pointer-events:none}@keyframes archikEdgeFlow{0%{stroke-dashoffset:0}to{stroke-dashoffset:calc(-1 * var(--archik-dash-period,8) * 1px)}}.archik-edge-flowing{animation:1.4s linear infinite archikEdgeFlow}@media(prefers-reduced-motion:reduce){.archik-edge-flowing{animation:none}}.archik-popover{background:var(--archik-panel);border:1px solid var(--archik-border-strong);border-radius:6px;flex-direction:column;max-height:min(80vh,600px);padding:4px;animation:.16s cubic-bezier(.2,.8,.2,1) archikModalIn;display:flex;overflow:hidden;box-shadow:0 12px 32px #00000059}.archik-menu-item{width:100%;color:var(--archik-fg);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:4px;align-items:center;gap:8px;padding:6px 10px;font-size:12px;display:flex}.archik-menu-item:hover{background:var(--archik-surface-hover)}.archik-menu-item--danger{color:var(--archik-danger)}@keyframes archikFadeIn{0%{opacity:0}to{opacity:1}}@keyframes archikModalIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}.archik-drawer-shell{flex-direction:column;min-width:0;transition:width .22s cubic-bezier(.2,.8,.2,1),opacity .2s,margin-left .22s cubic-bezier(.2,.8,.2,1);display:flex;overflow:hidden}.archik-drawer-shell--open{opacity:1;width:320px;margin-left:16px}.archik-drawer-shell--closed{opacity:0;pointer-events:none;width:0;margin-left:0}.archik-drawer-content{flex-shrink:0;width:320px;height:100%}.archik-drawer-fade{animation:.22s ease-out archikFadeIn}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
@@ -14,8 +14,8 @@
14
14
  }
15
15
  } catch {}
16
16
  </script>
17
- <script type="module" crossorigin src="/assets/index-Cd7sGYmr.js"></script>
18
- <link rel="stylesheet" crossorigin href="/assets/index-EA4oKR1S.css">
17
+ <script type="module" crossorigin src="/assets/index-BkcoNVrI.js"></script>
18
+ <link rel="stylesheet" crossorigin href="/assets/index-CQxn9Zg8.css">
19
19
  </head>
20
20
  <body>
21
21
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "archik",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "description": "The shared vocabulary between you and Claude Code, at the engineering level. Plain-YAML architecture diagrams with a live browser canvas, headless SVG render in CI, and an installable Claude skill so the model treats the diagram as the spec.",
5
5
  "keywords": [
6
6
  "architecture",
@@ -39,6 +39,7 @@
39
39
  "docs/templates/principles/functional.md",
40
40
  "skills",
41
41
  "commands",
42
+ "patterns",
42
43
  ".claude-plugin",
43
44
  "README.md",
44
45
  "LICENSE"
@@ -0,0 +1,69 @@
1
+ # Blueprint fragment merged into your diagram by `archik patterns apply
2
+ # evolution-loop`. All nodes are `status: proposed` — they describe what
3
+ # you are about to build, so no sourcePath is required yet. Rename ids
4
+ # and fill in sourcePaths as you implement each piece.
5
+ nodes:
6
+ - id: evo-event-log
7
+ kind: database
8
+ name: Event Log
9
+ status: proposed
10
+ description: >-
11
+ Append-only store of usage events (actions, outcomes, corrections).
12
+ Sanitized at capture time; local to the project; opt-in.
13
+ - id: evo-reflect-engine
14
+ kind: module
15
+ name: Reflect Engine
16
+ status: proposed
17
+ description: >-
18
+ Pure rules that turn events into insights with evidence, e.g.
19
+ "the same failure happened 5 times this week". Deterministic and
20
+ unit-testable; an LLM can reflect more deeply on the same data.
21
+ - id: evo-proposal-store
22
+ kind: database
23
+ name: Proposal Store
24
+ status: proposed
25
+ description: >-
26
+ One readable file per proposed self-improvement, with evidence
27
+ and a status (pending / approved / rejected / applied).
28
+ - id: evo-approval-gate
29
+ kind: module
30
+ name: Approval Gate
31
+ status: proposed
32
+ description: >-
33
+ The human yes/no step. Approved proposals are applied as normal,
34
+ reviewable changes; rejected ones are recorded as signals too.
35
+ - id: evo-learned-overlay
36
+ kind: prompt
37
+ name: Learned Overlay
38
+ status: proposed
39
+ description: >-
40
+ Append-only file of approved lessons, read by the AI at session
41
+ start. The system gets smarter without code or prompt redeploys.
42
+ - id: evo-metrics
43
+ kind: module
44
+ name: Evolution Metrics
45
+ status: proposed
46
+ description: >-
47
+ Before/after trend reports (error rate, acceptance rate) that
48
+ prove an applied proposal actually helped.
49
+ edges:
50
+ - id: evo-reflect-reads-log
51
+ from: evo-reflect-engine
52
+ to: evo-event-log
53
+ relationship: reads
54
+ - id: evo-reflect-writes-proposals
55
+ from: evo-reflect-engine
56
+ to: evo-proposal-store
57
+ relationship: writes
58
+ - id: evo-gate-reads-proposals
59
+ from: evo-approval-gate
60
+ to: evo-proposal-store
61
+ relationship: reads
62
+ - id: evo-gate-writes-overlay
63
+ from: evo-approval-gate
64
+ to: evo-learned-overlay
65
+ relationship: writes
66
+ - id: evo-metrics-reads-log
67
+ from: evo-metrics
68
+ to: evo-event-log
69
+ relationship: reads
@@ -0,0 +1,64 @@
1
+ # Evolution Loop
2
+
3
+ > Intent: Make a system improve itself in small, safe, visible steps.
4
+
5
+ ## The idea in one line
6
+
7
+ The system watches its own use, finds weak spots, suggests fixes,
8
+ and applies them — but only after a human says yes.
9
+
10
+ ## The six stages
11
+
12
+ ```
13
+ observe → reflect → propose → validate → apply → measure
14
+ ↑ │
15
+ └────────────────────────────────────────────────┘
16
+ ```
17
+
18
+ | Stage | Question it answers | Example |
19
+ | --- | --- | --- |
20
+ | Observe | What is really happening? | Log every command run and its outcome |
21
+ | Reflect | What patterns repeat? | "Validation failed 5 times this week" |
22
+ | Propose | What should change? | A written proposal file a human can read |
23
+ | Validate | Is the change safe? | Schema check + "would the system still work?" |
24
+ | Apply | Make the change — gated | Human approves; change lands as a normal diff |
25
+ | Measure | Did it actually help? | Compare error rates before and after |
26
+
27
+ ## When to use
28
+
29
+ - Your system has users who correct it (accept/reject, edit, undo).
30
+ - The same mistakes happen again and again.
31
+ - You want improvement without a human redesigning things each time.
32
+
33
+ ## Rules that keep it safe
34
+
35
+ 1. **Observation is opt-in and local.** No silent data collection.
36
+ 2. **Every proposal is a readable file.** Evidence included.
37
+ 3. **Nothing applies without approval.** The gate is explicit.
38
+ 4. **Rejection is also a signal.** The loop records "no" and learns from it.
39
+ 5. **Measure or it didn't happen.** A change with no metric is a guess.
40
+
41
+ ## Trade-offs
42
+
43
+ - Costs storage and a little time on every action (keep logging cheap).
44
+ - Deterministic heuristics find less than an LLM would — but they are
45
+ testable and free. Best of both: deterministic core, LLM on top.
46
+
47
+ ## Blueprint
48
+
49
+ `archik patterns apply evolution-loop` stages these components into
50
+ your diagram (as `status: proposed` nodes you fill in later):
51
+
52
+ - `evo-event-log` — append-only store of usage events
53
+ - `evo-reflect-engine` — pure rules: events in, insights out
54
+ - `evo-proposal-store` — proposals waiting for review
55
+ - `evo-approval-gate` — the human yes/no step
56
+ - `evo-learned-overlay` — approved knowledge the system reads back
57
+ - `evo-metrics` — before/after trend reports
58
+
59
+ ## Seen in archik
60
+
61
+ `archik evolution` implements this loop for archik itself:
62
+ events in `.archik/evolution/events.jsonl`, proposals in
63
+ `.archik/evolution/proposals/`, the gate is `archik evolution approve`,
64
+ and `archik evolution report` is the measure stage.
@@ -0,0 +1,52 @@
1
+ # Feedback Pipeline
2
+
3
+ > Intent: Turn every user correction into a recorded signal a system can learn from.
4
+
5
+ ## The idea in one line
6
+
7
+ Users already tell your system what is wrong — by rejecting, undoing,
8
+ and re-editing. Record those moments; they are free training data.
9
+
10
+ ## Structure
11
+
12
+ ```
13
+ user action (accept / reject / edit / undo / retry)
14
+ ↓ capture at the boundary, not inside features
15
+ event log (append-only, sanitized, local)
16
+ ↓
17
+ reflection (heuristics or LLM) → insights with evidence
18
+ ```
19
+
20
+ ## When to use
21
+
22
+ - Your system makes suggestions users can act on.
23
+ - You want learning signals **without** asking users to fill surveys.
24
+ - You are building toward an Evolution Loop and need its observe stage.
25
+
26
+ ## Rules that keep it safe
27
+
28
+ 1. **Capture at one boundary** (dispatcher, middleware, API gateway) —
29
+ features stay unaware they are observed.
30
+ 2. **Sanitize at capture time.** Record *that* something happened and
31
+ its outcome — names and counts, never contents or values.
32
+ 3. **Failure to record must never break the user's action.**
33
+ 4. **Opt-in.** The user turns the pipeline on, and can read every
34
+ byte it stores.
35
+
36
+ ## Trade-offs
37
+
38
+ - Boundary capture sees less detail than in-feature capture; start
39
+ coarse, add detail only where an insight needs it.
40
+ - Logs grow; rotate or window them.
41
+
42
+ ## Blueprint
43
+
44
+ Doc-only pattern — model it as `cli/gateway --writes--> event-log` plus
45
+ `reflect-engine --reads--> event-log` (see Evolution Loop blueprint).
46
+
47
+ ## Seen in archik
48
+
49
+ The dispatcher hook in `src/cli/observe.ts`: every finished command
50
+ appends sanitized events to `.archik/evolution/events.jsonl`, and
51
+ `suggest accept` / `suggest reject` become first-class accept/reject
52
+ signals — the corrections the loop learns from.
@@ -0,0 +1,52 @@
1
+ # Learned Overlay
2
+
3
+ > Intent: Let an AI system get smarter across sessions without changing its code or base prompt.
4
+
5
+ ## The idea in one line
6
+
7
+ Keep the base prompt fixed; append approved lessons to a separate
8
+ file the AI reads at the start of every session.
9
+
10
+ ## Structure
11
+
12
+ ```
13
+ base prompt / skill (fixed, versioned, shipped)
14
+ +
15
+ learned.md (grows over time, one approved note per line)
16
+ ↓
17
+ the agent reads BOTH and behaves better than last week
18
+ ```
19
+
20
+ ## When to use
21
+
22
+ - The same correction keeps being made to the AI's behaviour.
23
+ - You cannot (or do not want to) redeploy a prompt for every lesson.
24
+ - You need an audit trail: *why* does the agent behave this way?
25
+
26
+ ## Rules that keep it safe
27
+
28
+ 1. **Append-only, human-gated.** A note enters the overlay only
29
+ through an approval step (see Evolution Loop).
30
+ 2. **Every note carries its origin** — date and proposal id — so any
31
+ behaviour can be traced back to evidence.
32
+ 3. **The overlay is plain text in the repo.** Review it, diff it,
33
+ delete a bad lesson with a normal commit.
34
+ 4. Keep it short. If the overlay grows past a page, promote stable
35
+ lessons into the base prompt and clear them from the overlay.
36
+
37
+ ## Trade-offs
38
+
39
+ - The overlay consumes context tokens each session.
40
+ - Conflicting notes confuse the agent — the approval gate must reject
41
+ notes that contradict existing ones.
42
+
43
+ ## Blueprint
44
+
45
+ Doc-only pattern — model it as a node `learned-overlay` (kind:
46
+ `prompt`) with an edge `agent --reads--> learned-overlay`.
47
+
48
+ ## Seen in archik
49
+
50
+ `.archik/evolution/learned.md`, written only by
51
+ `archik evolution approve`, read by the archik Claude skill at session
52
+ start and exposed to other agents as the MCP resource `archik://learned`.
@@ -0,0 +1,52 @@
1
+ # Sidecar Approval Gate
2
+
3
+ > Intent: Let a machine propose changes to a file a human owns — without ever touching the file itself.
4
+
5
+ ## The idea in one line
6
+
7
+ The machine writes its draft to a *sidecar* file next to the real one;
8
+ the human sees a diff and decides; only "accept" touches the real file.
9
+
10
+ ## Structure
11
+
12
+ ```
13
+ main.yaml ← owned by the human, never written by the machine
14
+ main.suggested.yaml ← the machine's full proposed end state
15
+ │
16
+ [show diff] → human → accept (sidecar replaces main)
17
+ → reject (sidecar deleted)
18
+ ```
19
+
20
+ ## When to use
21
+
22
+ - An AI agent (or any tool) wants to edit configuration, models,
23
+ or documents that a human is responsible for.
24
+ - You want review to be a *diff*, not a wall of text.
25
+ - You want "no" to be cheap: rejecting must cost one command.
26
+
27
+ ## Rules that keep it safe
28
+
29
+ 1. The sidecar holds the **complete end state**, not a patch — so the
30
+ diff is always computable and the apply is always atomic.
31
+ 2. The sidecar passes **the same validation** as the real file. An
32
+ invalid draft never reaches the human.
33
+ 3. The machine **refuses to write the main file**, even if asked.
34
+ 4. One pending sidecar at a time. A second proposal must wait.
35
+
36
+ ## Trade-offs
37
+
38
+ - One extra file and one extra step per change.
39
+ - Whole-file proposals can conflict if the main file moves underneath;
40
+ re-validate at accept time.
41
+
42
+ ## Blueprint
43
+
44
+ Doc-only pattern (it is a workflow, not components) — model it as an
45
+ edge in your diagram: `agent --writes--> sidecar`, `human --reads--> diff`,
46
+ `gate --writes--> main`.
47
+
48
+ ## Seen in archik
49
+
50
+ `archik suggest set / show / accept / reject`, and the canvas diff
51
+ overlay. The evolution loop reuses the same gate: an approved
52
+ `update-node` proposal becomes a sidecar, never a direct write.
@@ -0,0 +1,54 @@
1
+ # Truth Chain
2
+
3
+ > Intent: Prove a model is true at every altitude — against itself, against the code, and against production.
4
+
5
+ ## The idea in one line
6
+
7
+ One check is an opinion; a chain of independent checks at different
8
+ altitudes is proof.
9
+
10
+ ## Structure
11
+
12
+ ```
13
+ model ──(validate)── is the model consistent with itself?
14
+ model ──(drift)───── does the model match the source code?
15
+ model ──(traffic)─── does the model match what production really does?
16
+ ```
17
+
18
+ Each check has a different blind spot, so together they cover what
19
+ no single check can:
20
+
21
+ | Check | Catches | Blind to |
22
+ | --- | --- | --- |
23
+ | Self-consistency | broken references, rule violations | reality |
24
+ | Code comparison | renamed/moved/deleted code | runtime behaviour |
25
+ | Production comparison | calls nobody declared | code that never runs |
26
+
27
+ ## When to use
28
+
29
+ - You keep a model/diagram/spec of a system that changes under you.
30
+ - "The docs are stale" is a sentence people say in your team.
31
+ - A self-evolving system needs ground truth to learn against —
32
+ without it, the system optimizes toward its own mistakes.
33
+
34
+ ## Rules that keep it safe
35
+
36
+ 1. Checks must be **independent** — different inputs, different code.
37
+ 2. Each check is **mechanical and CI-gateable** (exit code, JSON).
38
+ 3. Undeclared reality **fails** the check; declared-but-unseen is a
39
+ warning (it may simply not have run yet).
40
+
41
+ ## Trade-offs
42
+
43
+ - Three checks to maintain instead of one.
44
+ - Production comparison needs tracing infrastructure (e.g. OTel).
45
+
46
+ ## Blueprint
47
+
48
+ Doc-only pattern — in your diagram, give the three verifier components
49
+ edges pointing at the model node, each labelled with its altitude.
50
+
51
+ ## Seen in archik
52
+
53
+ `archik validate` (model vs itself), `archik drift --edges` (model vs
54
+ the import graph), `archik otel check` (model vs production traffic).
@@ -11,6 +11,7 @@ description: Use whenever .archik/main.archik.yaml or architecture.archik.yaml e
11
11
  - **The CLI is your only interface to it.** You never read, write, or edit archik files directly. Every read goes through `npx archik q ...`; every write goes through `npx archik suggest set` → user accepts via `/archik:accept`.
12
12
  - **Two command surfaces:** the user types `/archik:*` slash commands; you run `npx archik ...` directly. They're not interchangeable — see the tables below.
13
13
  - **Actors first, one use case to ship.** When a user hands you a brief on a fresh project, the right opening move is *model the actors, then propose the first use case to ship* — never "let me sketch your whole system." Actors-first because you can't validate a use case without knowing who initiates it. Pick exactly one because forcing priorities into the open before any code lands is the entire point of the loop. "To ship" because the use case names its test paths from message one — slices start `status: proposed` (the tests don't exist on disk yet) and flip to `status: active` automatically when the tests land in BUILD. The project's commitments live in the YAML, not in the chat log.
14
+ - **Read the learned overlay at session start.** If `.archik/evolution/learned.md` exists, read it (with the Read tool — it is docs, not an archik YAML) before your first archik action and treat every note as binding guidance. Each note is a lesson this project's evolution loop gathered from real usage and a human approved. After a suggestion of yours is rejected, run `npx archik evolution reflect` — repeated rejections become proposals the user can review.
14
15
 
15
16
  ## Command surfaces
16
17
 
@@ -32,6 +33,7 @@ These are the user's entry points. They're triggered by the user typing `/archik
32
33
  | `/archik:usecase <name>` | Author a use case — flows + slices + tests (direct-write) |
33
34
  | `/archik:trace` | Coverage matrix + concrete next action |
34
35
  | `/archik:alpha [show \| promote]` | Read or move project alphas with a machine-checked criteria |
36
+ | `/archik:self-evolving <idea>` | Design a self-evolving architecture for the user's idea, using the pattern library |
35
37
 
36
38
  The full protocol for each lives at `commands/<name>.md` in the repo (or `.claude/commands/archik/<name>.md` once installed in a project). Follow it when invoked.
37
39
 
@@ -62,6 +64,10 @@ These are the verbs you reach for during the loop. Default to `npx archik` (no g
62
64
  | Detect drift vs source tree | `npx archik drift` |
63
65
  | Open the live canvas (foreground) | `npx archik dev` |
64
66
  | Open the canvas (detached) | `npx archik start` / `stop` / `status` |
67
+ | Evolution loop state | `npx archik evolution status [--json]` |
68
+ | Turn usage history into proposals | `npx archik evolution reflect` |
69
+ | File a proposal yourself | `npx archik evolution propose - <<'YAML' … YAML` |
70
+ | Self-evolution pattern library | `npx archik patterns list \| show <id> \| apply <id>` |
65
71
  | Per-command help | `npx archik <cmd> --help` |
66
72
 
67
73
  ## Hard rule: the CLI is the only interface to archik files
@@ -1 +0,0 @@
1
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-rose-700:oklch(51.4% .222 16.935);--spacing:.25rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-semibold:600;--tracking-tight:-.025em;--radius-md:.375rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-auto{margin-top:auto}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-full{height:100%}.h-screen{height:100vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-72{width:calc(var(--spacing) * 72)}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.flex-1{flex:1}.grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.pt-4{padding-top:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.whitespace-pre-wrap{white-space:pre-wrap}.text-rose-700{color:var(--color-rose-700)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media(hover:hover){.hover\:no-underline:hover{text-decoration-line:none}}}:root,[data-theme=light]{--archik-canvas:#f8fafc;--archik-panel:#fff;--archik-surface:#f1f5f9;--archik-surface-hover:#e2e8f0;--archik-fg:#0f172a;--archik-fg-dim:#475569;--archik-fg-muted:#94a3b8;--archik-border:#e2e8f0;--archik-border-strong:#cbd5e1;--archik-accent:#2563eb;--archik-accent-bright:#3b82f6;--archik-magenta:#db2777;--archik-success:#10b981;--archik-warning:#d97706;--archik-danger:#e11d48;--archik-node-fill:#fff;--archik-node-fill-tinted:#f1f5f9;--archik-node-fill-frame:#fff;--archik-node-stroke:#0f172a;--archik-node-stroke-soft:#475569;--archik-container-border:#94a3b8;--archik-node-text:#0f172a;--archik-node-text-dim:#475569;--archik-node-caption:#64748b;--archik-node-chrome-dot:#cbd5f5;--archik-edge-filled:#0f172a;--archik-edge-open:#334155;--archik-edge-dim:#64748b;--archik-edge-async:#2563eb;--archik-grid-minor:#e2e8f0;--archik-grid-major:#cbd5e1;--archik-selected:#2563eb;--archik-selected-glow:#2563eb2e;--archik-status-proposed:#6366f1;--archik-status-deprecated:#d97706;--archik-stereotype-boundary:#0369a1;--archik-stereotype-control:#b45309;--archik-stereotype-entity:#15803d;color-scheme:light}[data-theme=dark]{--archik-canvas:#050912;--archik-panel:#0c1426;--archik-surface:#14203a;--archik-surface-hover:#1c2c4d;--archik-fg:#e6edf7;--archik-fg-dim:#8b9bb8;--archik-fg-muted:#5b6a87;--archik-border:#1d2b48;--archik-border-strong:#2c3e63;--archik-accent:#22d3ee;--archik-accent-bright:#67e8f9;--archik-magenta:#f472b6;--archik-success:#34d399;--archik-warning:#fbbf24;--archik-danger:#fb7185;--archik-node-fill:#0c1426;--archik-node-fill-tinted:#142037;--archik-node-fill-frame:#14203a;--archik-node-stroke:#2c3e63;--archik-node-stroke-soft:#1d2b48;--archik-container-border:#3a4f7a;--archik-node-text:#e6edf7;--archik-node-text-dim:#b6c2d8;--archik-node-caption:#67e8f9;--archik-node-chrome-dot:#475878;--archik-edge-filled:#cbd5e1;--archik-edge-open:#94a3b8;--archik-edge-dim:#64748b;--archik-edge-async:#67e8f9;--archik-grid-minor:#0d1830;--archik-grid-major:#182748;--archik-selected:#22d3ee;--archik-selected-glow:#22d3ee47;--archik-status-proposed:#818cf8;--archik-status-deprecated:#fbbf24;--archik-stereotype-boundary:#38bdf8;--archik-stereotype-control:#f59e0b;--archik-stereotype-entity:#22c55e;color-scheme:dark}html,body,#root{background:var(--archik-canvas);height:100%;color:var(--archik-fg);-webkit-font-smoothing:antialiased;margin:0;font-family:Inter,system-ui,sans-serif}.archik-panel{background:var(--archik-panel);border:1px solid var(--archik-border);border-radius:8px}.archik-input{background:var(--archik-surface);color:var(--archik-fg);border:1px solid var(--archik-border);font:inherit;border-radius:4px;outline:none;padding:4px 8px;font-size:12px;transition:border-color .12s,box-shadow .12s}.archik-input:focus{border-color:var(--archik-accent);box-shadow:0 0 0 3px var(--archik-selected-glow)}.archik-btn{background:var(--archik-surface);color:var(--archik-fg);border:1px solid var(--archik-border);cursor:pointer;border-radius:4px;align-items:center;gap:4px;padding:5px 10px;font-size:12px;font-weight:500;transition:background .12s,border-color .12s,color .12s;display:inline-flex}.archik-btn:hover{background:var(--archik-surface-hover);border-color:var(--archik-border-strong)}.archik-btn:disabled{opacity:.5;cursor:not-allowed}.archik-btn-primary{background:var(--archik-accent);border-color:var(--archik-accent);color:#050912}.archik-btn-primary:hover{background:var(--archik-accent-bright);border-color:var(--archik-accent-bright)}[data-theme=light] .archik-btn-primary{color:#fff}.archik-btn-danger{color:var(--archik-danger);border-color:var(--archik-danger);background:0 0;border-style:dashed}.archik-btn-danger:hover{background:var(--archik-danger);color:#050912;border-style:solid}.archik-pill{letter-spacing:.02em;border:1px solid #0000;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;font-size:11px;display:inline-flex}.archik-pill--info{color:var(--archik-accent);border-color:var(--archik-border-strong);background:var(--archik-accent)}@supports (color:color-mix(in lab,red,red)){.archik-pill--info{background:color-mix(in oklab,var(--archik-accent) 8%,transparent)}}.archik-pill--success{color:var(--archik-success);background:var(--archik-success)}@supports (color:color-mix(in lab,red,red)){.archik-pill--success{background:color-mix(in oklab,var(--archik-success) 12%,transparent)}}.archik-pill--warning{color:var(--archik-warning);background:var(--archik-warning)}@supports (color:color-mix(in lab,red,red)){.archik-pill--warning{background:color-mix(in oklab,var(--archik-warning) 14%,transparent)}}.archik-pill--danger{color:var(--archik-danger);background:var(--archik-danger)}@supports (color:color-mix(in lab,red,red)){.archik-pill--danger{background:color-mix(in oklab,var(--archik-danger) 14%,transparent)}}.archik-label{letter-spacing:.12em;text-transform:uppercase;color:var(--archik-fg-muted);margin-bottom:4px;font-size:10px;display:block}.archik-mono{color:var(--archik-fg);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.archik-divider{border-top:1px solid var(--archik-border)}.archik-grid{background-color:var(--archik-canvas);background-image:radial-gradient(var(--archik-grid-minor) 1px,transparent 1px),radial-gradient(var(--archik-grid-major) 1px,transparent 1px);background-position:0 0,0 0;background-size:20px 20px,100px 100px}.archik-selected-glow{filter:drop-shadow(0 0 6px var(--archik-selected-glow)) drop-shadow(0 0 2px var(--archik-selected-glow));animation:1.8s ease-in-out infinite archikPulse}[data-archik-node-id][data-archik-status=proposed]{opacity:.82}[data-archik-node-id][data-archik-status=proposed] rect,[data-archik-node-id][data-archik-status=proposed] path,[data-archik-node-id][data-archik-status=proposed] ellipse,[data-archik-node-id][data-archik-status=proposed] line{stroke:var(--archik-status-proposed);stroke-dasharray:5 3}[data-archik-node-id][data-archik-status=deprecated]{opacity:.7}[data-archik-node-id][data-archik-status=deprecated] rect,[data-archik-node-id][data-archik-status=deprecated] path,[data-archik-node-id][data-archik-status=deprecated] ellipse,[data-archik-node-id][data-archik-status=deprecated] line{stroke:var(--archik-status-deprecated);stroke-dasharray:2 4}[data-archik-node-id][data-archik-status=deprecated] text{text-decoration:line-through;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--archik-status-deprecated);text-decoration-color:var(--archik-status-deprecated)}.archik-stereotype-band{pointer-events:none}[data-archik-stereotype=boundary] .archik-stereotype-band{fill:var(--archik-stereotype-boundary)}[data-archik-stereotype=control] .archik-stereotype-band{fill:var(--archik-stereotype-control)}[data-archik-stereotype=entity] .archik-stereotype-band{fill:var(--archik-stereotype-entity)}.archik-stereotype-pill{letter-spacing:.08em;border:1px solid #0000;border-radius:10px;align-self:flex-start;align-items:center;padding:3px 10px;font-size:10px;font-weight:700;display:inline-flex}.archik-stereotype-pill[data-stereotype=boundary]{background:var(--archik-stereotype-boundary)}@supports (color:color-mix(in lab,red,red)){.archik-stereotype-pill[data-stereotype=boundary]{background:color-mix(in srgb,var(--archik-stereotype-boundary) 15%,transparent)}}.archik-stereotype-pill[data-stereotype=boundary]{border-color:var(--archik-stereotype-boundary);color:var(--archik-stereotype-boundary)}.archik-stereotype-pill[data-stereotype=control]{background:var(--archik-stereotype-control)}@supports (color:color-mix(in lab,red,red)){.archik-stereotype-pill[data-stereotype=control]{background:color-mix(in srgb,var(--archik-stereotype-control) 15%,transparent)}}.archik-stereotype-pill[data-stereotype=control]{border-color:var(--archik-stereotype-control);color:var(--archik-stereotype-control)}.archik-stereotype-pill[data-stereotype=entity]{background:var(--archik-stereotype-entity)}@supports (color:color-mix(in lab,red,red)){.archik-stereotype-pill[data-stereotype=entity]{background:color-mix(in srgb,var(--archik-stereotype-entity) 15%,transparent)}}.archik-stereotype-pill[data-stereotype=entity]{border-color:var(--archik-stereotype-entity);color:var(--archik-stereotype-entity)}@keyframes archikPulse{0%,to{filter:drop-shadow(0 0 4px var(--archik-selected-glow)) drop-shadow(0 0 1px var(--archik-selected-glow))}50%{filter:drop-shadow(0 0 12px var(--archik-selected-glow)) drop-shadow(0 0 3px var(--archik-selected-glow))}}.archik-modal-overlay{z-index:50;background:var(--archik-canvas);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}@supports (color:color-mix(in lab,red,red)){.archik-modal-overlay{background:color-mix(in oklab,var(--archik-canvas) 70%,transparent)}}.archik-modal-overlay{-webkit-backdrop-filter:blur(4px);animation:.14s ease-out archikFadeIn}.archik-modal{background:var(--archik-panel);border:1px solid var(--archik-border);width:360px;max-width:calc(100vw - 32px);box-shadow:0 12px 40px #00000059,0 0 0 1px var(--archik-border-strong);border-radius:8px;padding:16px;animation:.2s cubic-bezier(.2,.8,.2,1) archikModalIn}.archik-selected-outline{fill:none;stroke:var(--archik-selected);stroke-width:2px;pointer-events:none}@keyframes archikEdgeFlow{0%{stroke-dashoffset:0}to{stroke-dashoffset:calc(-1 * var(--archik-dash-period,8) * 1px)}}.archik-edge-flowing{animation:1.4s linear infinite archikEdgeFlow}@media(prefers-reduced-motion:reduce){.archik-edge-flowing{animation:none}}.archik-popover{background:var(--archik-panel);border:1px solid var(--archik-border-strong);border-radius:6px;flex-direction:column;max-height:min(80vh,600px);padding:4px;animation:.16s cubic-bezier(.2,.8,.2,1) archikModalIn;display:flex;overflow:hidden;box-shadow:0 12px 32px #00000059}.archik-menu-item{width:100%;color:var(--archik-fg);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:4px;align-items:center;gap:8px;padding:6px 10px;font-size:12px;display:flex}.archik-menu-item:hover{background:var(--archik-surface-hover)}.archik-menu-item--danger{color:var(--archik-danger)}@keyframes archikFadeIn{0%{opacity:0}to{opacity:1}}@keyframes archikModalIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}.archik-drawer-shell{flex-direction:column;min-width:0;transition:width .22s cubic-bezier(.2,.8,.2,1),opacity .2s,margin-left .22s cubic-bezier(.2,.8,.2,1);display:flex;overflow:hidden}.archik-drawer-shell--open{opacity:1;width:320px;margin-left:16px}.archik-drawer-shell--closed{opacity:0;pointer-events:none;width:0;margin-left:0}.archik-drawer-content{flex-shrink:0;width:320px;height:100%}.archik-drawer-fade{animation:.22s ease-out archikFadeIn}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}