@roll-agent/core 0.18.0 → 0.20.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.
- package/THIRD_PARTY_NOTICES.txt +112 -0
- package/dist/cli/chat/banner.d.ts +13 -0
- package/dist/cli/chat/banner.js +1 -1
- package/dist/cli/chat/ink/app.d.ts +4 -1
- package/dist/cli/chat/ink/app.js +1 -1
- package/dist/cli/chat/ink/banner-view.d.ts +15 -0
- package/dist/cli/chat/ink/banner-view.js +1 -0
- package/dist/cli/chat/ink/commands.d.ts +4 -12
- package/dist/cli/chat/ink/commands.js +1 -1
- package/dist/cli/chat/ink/history-from-messages.js +1 -1
- package/dist/cli/chat/ink/history-item.js +1 -1
- package/dist/cli/chat/ink/input-history.d.ts +2 -0
- package/dist/cli/chat/ink/input-history.js +1 -0
- package/dist/cli/chat/ink/line-buffer.d.ts +2 -0
- package/dist/cli/chat/ink/line-buffer.js +1 -1
- package/dist/cli/chat/ink/live-region.d.ts +2 -0
- package/dist/cli/chat/ink/live-region.js +1 -1
- package/dist/cli/chat/ink/reasoning-block.d.ts +4 -0
- package/dist/cli/chat/ink/reasoning-block.js +1 -0
- package/dist/cli/chat/ink/run-ink-repl.js +1 -1
- package/dist/cli/chat/ink/spinner.d.ts +3 -1
- package/dist/cli/chat/ink/spinner.js +1 -1
- package/dist/cli/chat/ink/state.d.ts +26 -3
- package/dist/cli/chat/ink/state.js +1 -1
- package/dist/cli/chat/ink/text-prompt.d.ts +3 -1
- package/dist/cli/chat/ink/text-prompt.js +1 -1
- package/dist/cli/chat/ink/turn-activity.d.ts +19 -0
- package/dist/cli/chat/ink/turn-activity.js +1 -0
- package/dist/cli/chat/ink/turn-status-line.d.ts +14 -0
- package/dist/cli/chat/ink/turn-status-line.js +1 -0
- package/dist/cli/chat/ink/use-session.js +1 -1
- package/dist/cli/commands/chat.d.ts +28 -0
- package/dist/cli/commands/chat.js +1 -1
- package/dist/cli/commands/config-explain.js +1 -1
- package/dist/cli/commands/config-setup.js +1 -1
- package/dist/cli/commands/config.js +1 -1
- package/dist/cli/commands/doctor.js +1 -1
- package/dist/cli/commands/ui.d.ts +30 -0
- package/dist/cli/commands/ui.js +1 -0
- package/dist/cli/index.js +1 -1
- package/dist/cli/utils/chat-renderer.js +1 -1
- package/dist/cli/utils/current-cli-shim.d.ts +14 -0
- package/dist/cli/utils/current-cli-shim.js +1 -0
- package/dist/cli/utils/debug-format.d.ts +4 -0
- package/dist/cli/utils/debug-format.js +1 -0
- package/dist/config/application-service.d.ts +90 -0
- package/dist/config/application-service.js +1 -0
- package/dist/config/catalog.d.ts +76 -0
- package/dist/config/catalog.js +1 -0
- package/dist/config/defaults.d.ts +4 -3
- package/dist/config/defaults.js +1 -1
- package/dist/config/document-store.d.ts +70 -0
- package/dist/config/document-store.js +1 -0
- package/dist/config/guidance.d.ts +571 -0
- package/dist/config/guidance.js +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.js +1 -1
- package/dist/config/key-codec.d.ts +24 -3
- package/dist/config/key-codec.js +1 -1
- package/dist/config/migration.js +1 -1
- package/dist/config/schema.d.ts +52 -7
- package/dist/config/schema.js +1 -1
- package/dist/config/secret-policy.d.ts +20 -0
- package/dist/config/secret-policy.js +1 -0
- package/dist/llm/providers.d.ts +8 -4
- package/dist/llm/providers.js +1 -1
- package/dist/registry/agent-lifecycle.d.ts +97 -0
- package/dist/registry/agent-lifecycle.js +1 -0
- package/dist/registry/discovery.js +1 -1
- package/dist/registry/install.js +1 -1
- package/dist/registry/process-identity.d.ts +14 -0
- package/dist/registry/process-identity.js +1 -0
- package/dist/registry/process-manager.d.ts +28 -7
- package/dist/registry/process-manager.js +1 -1
- package/dist/registry/store.js +1 -1
- package/dist/skills/invocation.d.ts +27 -0
- package/dist/skills/invocation.js +1 -0
- package/dist/types/agent.d.ts +6 -0
- package/dist/types/agent.js +1 -1
- package/dist/types/chat.d.ts +3 -0
- package/dist/ui/config-controller.d.ts +15 -0
- package/dist/ui/config-controller.js +1 -0
- package/dist/ui/contracts.d.ts +49 -0
- package/dist/ui/contracts.js +1 -0
- package/dist/ui/index.d.ts +8 -0
- package/dist/ui/index.js +1 -0
- package/dist/ui/runtime-controller.d.ts +38 -0
- package/dist/ui/runtime-controller.js +1 -0
- package/dist/ui/server.d.ts +21 -0
- package/dist/ui/server.js +1 -0
- package/dist/ui/static-assets.d.ts +2 -0
- package/dist/ui/static-assets.js +1 -0
- package/dist/ui-assets/assets/app.css +1 -0
- package/dist/ui-assets/assets/app.js +53 -0
- package/dist/ui-assets/assets/roll-mark-wXIkY5y0.svg +5 -0
- package/dist/ui-assets/index.html +17 -0
- package/package.json +16 -8
- package/dist/cli/commands/config-guidance.d.ts +0 -148
- package/dist/cli/commands/config-guidance.js +0 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { RollUiController, RollUiStaticAssetProvider } from "./contracts.ts";
|
|
2
|
+
export declare const ROLL_UI_HOST: "127.0.0.1";
|
|
3
|
+
export declare const ROLL_UI_SESSION_COOKIE: "roll_ui_session";
|
|
4
|
+
export declare const ROLL_UI_DEFAULT_BODY_LIMIT_BYTES: number;
|
|
5
|
+
export interface StartRollUiServerOptions {
|
|
6
|
+
readonly controller: RollUiController;
|
|
7
|
+
readonly staticAssets: RollUiStaticAssetProvider;
|
|
8
|
+
readonly signal?: AbortSignal;
|
|
9
|
+
readonly onError?: (error: unknown) => void;
|
|
10
|
+
readonly bodyLimitBytes?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface RollUiServerHandle {
|
|
13
|
+
readonly host: typeof ROLL_UI_HOST;
|
|
14
|
+
readonly port: number;
|
|
15
|
+
readonly origin: string;
|
|
16
|
+
readonly basePath: string;
|
|
17
|
+
/** Contains a one-time token in the URL fragment. Fragments are never sent in HTTP requests. */
|
|
18
|
+
readonly url: string;
|
|
19
|
+
close(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export declare function startRollUiServer(options: StartRollUiServerOptions): Promise<RollUiServerHandle>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{randomBytes as t,timingSafeEqual as e}from"node:crypto";import{createServer as o}from"node:http";import{CONFIG_ACTIVATION_KINDS as r,ConfigApplicationValidationError as n}from"../config/application-service.js";import{ConfigRevisionConflictError as i,ConfigWriteLockError as s}from"../config/document-store.js";import{RollUiActivationInProgressError as a}from"./runtime-controller.js";export const ROLL_UI_HOST="127.0.0.1";export const ROLL_UI_SESSION_COOKIE="roll_ui_session";export const ROLL_UI_DEFAULT_BODY_LIMIT_BYTES=1048576;const l=8388608,c=64,d=5e4,f=32,u=24,p=1e4,h=3e4,g=["default-src 'self'","base-uri 'none'","connect-src 'self'","font-src 'self'","form-action 'self'","frame-ancestors 'none'","frame-src 'none'","img-src 'self' data:","media-src 'none'","object-src 'none'","script-src 'self'","style-src 'self'","worker-src 'none'"].join("; ");class RollUiHttpError extends Error{statusCode;code;details;constructor(t,e,o,r){super(o),this.name="RollUiHttpError",this.statusCode=t,this.code=e,this.details=r}}export async function startRollUiServer(e){if(!0===e.signal?.aborted)throw new DOMException("The Roll UI server start was aborted.","AbortError");const r=tt(e.bodyLimitBytes,1048576,l,"bodyLimitBytes"),n=B(),i=t(u).toString("base64url"),s=`/__roll_ui/${i}`;let a=null;const c=o((t,o)=>{if(null===a)return D(o),void M(o,503,"server_starting","Roll UI is still starting.");v(t,o,a,e).catch(r=>{X(t),F(o,r,e.onError)})});c.headersTimeout=p,c.requestTimeout=h,c.keepAliveTimeout=5e3,c.maxHeadersCount=64;const d=await ot(c,t=>{a={origin:`http://127.0.0.1:${t}`,expectedHost:`127.0.0.1:${t}`,basePath:s,sessionCookieName:`roll_ui_session_${i}`,bodyLimitBytes:r,bootstrapToken:n,session:null}}),f=`http://127.0.0.1:${d}`;let g,m=null;const w=()=>(null!==m||(void 0!==g&&void 0!==e.signal&&e.signal.removeEventListener("abort",g),m=new Promise((t,e)=>{c.close(o=>{void 0!==o?e(o):t()})})),m);return void 0!==e.signal&&(g=()=>{w().catch(t=>e.onError?.(t))},e.signal.addEventListener("abort",g,{once:!0}),e.signal.aborted&&g()),{host:"127.0.0.1",port:d,origin:f,basePath:s,url:`${f}${s}/#token=${encodeURIComponent(n)}`,close:w}}async function v(t,e,o,r){D(e),k(t.headers,o.expectedHost);const n=A(O(t.url,o.origin).pathname,o.basePath);"/api"===n||n.startsWith("/api/")?await m(t,e,n,o,r.controller):await w(t,e,n,r.staticAssets)}async function m(t,e,o,r,n){const i=t.method??"";if(L(t.headers,r.origin,"GET"!==i),"/api/bootstrap"===o){if("GET"===i){return void J(e,P(S(t.headers,r)))}if("POST"===i){const o=y(await C(t,r.bodyLimitBytes));if(null===r.bootstrapToken||!G(o,r.bootstrapToken))throw new RollUiHttpError(401,"invalid_bootstrap_token","Invalid bootstrap token.");r.bootstrapToken=null;const n=N();return r.session=n,e.setHeader("Set-Cookie",$(n,r.sessionCookieName,r.basePath)),void J(e,P(n))}throw K("GET, POST")}const s=S(t.headers,r);if("/api/config"!==o||"GET"!==i)if("/api/catalog"!==o||"GET"!==i){if("/api/agents/status"!==o||"GET"!==i){if("/api/config/preview"===o&&"POST"===i){I(t.headers,s);const o=E(await C(t,r.bodyLimitBytes),!1);return void J(e,await n.previewConfig(o))}if("/api/config/save"===o&&"POST"===i){I(t.headers,s);const o=E(await C(t,r.bodyLimitBytes),!0);return void J(e,await n.saveConfig(o))}if("/api/agents/apply"===o&&"POST"===i){I(t.headers,s);const o=_(await C(t,r.bodyLimitBytes));return void J(e,await n.applyAgentEffects(o))}if(Q(o))throw K(V(o));throw new RollUiHttpError(404,"not_found","Not found.")}J(e,await n.getAgentStatus())}else J(e,await n.getCatalog());else J(e,await n.getConfig())}async function w(t,e,o,r){const n=t.method??"";if("GET"!==n&&"HEAD"!==n)throw K("GET, HEAD");const i=x(o),s=await r.getAsset(i);if(null===s)throw new RollUiHttpError(404,"not_found","Not found.");Y(e,s,"HEAD"===n)}function y(t){if(!et(t)||"string"!=typeof t.token||t.token.length>256)throw new RollUiHttpError(400,"invalid_request","Expected a bootstrap token.");return t.token}function E(t,e){if(!et(t))throw new RollUiHttpError(400,"invalid_request","Expected a JSON object.");const o=b(t.expectedRevision);if(e&&void 0===o)throw new RollUiHttpError(400,"config_revision_required","Saving requires the latest config revision.");if("structured"===t.mode){if(!et(t.persisted))throw new RollUiHttpError(400,"invalid_request","Structured mode requires a persisted object.");return{mode:"structured",persisted:t.persisted,...void 0!==o?{expectedRevision:o}:{}}}if("yaml"===t.mode){if("string"!=typeof t.yaml)throw new RollUiHttpError(400,"invalid_request","YAML mode requires yaml text.");return{mode:"yaml",yaml:t.yaml,...void 0!==o?{expectedRevision:o}:{}}}throw new RollUiHttpError(400,"invalid_request","Config mode must be structured or yaml.")}function _(t){if(!et(t)||!Array.isArray(t.effects))throw new RollUiHttpError(400,"invalid_request","Expected an effects array.");return{effects:t.effects.map(R)}}function R(t){if(!et(t)||!q(t.kind))throw new RollUiHttpError(400,"invalid_request","Invalid activation effect kind.");if(!Array.isArray(t.paths)||0===t.paths.length)throw new RollUiHttpError(400,"invalid_request","Activation effect paths are required.");const e=t.paths.map(H),o=U(t.title,"effect title",500),r=U(t.description,"effect description",2e3);if("boolean"!=typeof t.requiresConfirmation)throw new RollUiHttpError(400,"invalid_request","Effect confirmation flag must be boolean.");const n=void 0===t.agentName?void 0:U(t.agentName,"agent name",200);if("restart-agent"===t.kind&&void 0===n)throw new RollUiHttpError(400,"invalid_request","Restart effects require an agent name.");return{kind:t.kind,paths:e,title:o,description:r,...void 0!==n?{agentName:n}:{},requiresConfirmation:t.requiresConfirmation}}function H(t){if(!Array.isArray(t)||0===t.length||t.length>64)throw new RollUiHttpError(400,"invalid_request","Invalid config path.");return t.map(t=>{if("string"==typeof t&&t.length>0&&t.length<=256)return t;if("number"==typeof t&&Number.isSafeInteger(t)&&t>=0)return t;throw new RollUiHttpError(400,"invalid_request","Invalid config path segment.")})}function b(t){if(void 0!==t){if("string"!=typeof t||!/^[a-f0-9]{64}$/u.test(t))throw new RollUiHttpError(400,"invalid_request","Invalid config revision.");return t}}function U(t,e,o){if("string"!=typeof t||0===t.length||t.length>o)throw new RollUiHttpError(400,"invalid_request",`Invalid ${e}.`);return t}function q(t){return r.some(e=>e===t)}async function C(t,e){const o=Z(t.headers["content-type"]);if(void 0===o||!/^application\/json(?:\s*;\s*charset=utf-8)?$/iu.test(o))throw new RollUiHttpError(415,"unsupported_media_type","Expected application/json.");const r=Z(t.headers["content-encoding"]);if(void 0!==r&&"identity"!==r)throw new RollUiHttpError(415,"unsupported_content_encoding","Compressed request bodies are not accepted.");const n=Z(t.headers["content-length"]);if(void 0!==n){const t=Number(n);if(!Number.isSafeInteger(t)||t<0)throw new RollUiHttpError(400,"invalid_content_length","Invalid Content-Length.");if(t>e)throw z()}const i=[];let s,a=0;for await(const o of t){const r=Buffer.from(o);if(a+=r.byteLength,a>e)throw t.resume(),z();i.push(r)}try{s=JSON.parse(Buffer.concat(i).toString("utf8"))}catch(t){throw new RollUiHttpError(400,"invalid_json","Malformed JSON body.",t)}return T(s),s}function T(t){const e=[{value:t,depth:0}];let o=0;for(;e.length>0;){const t=e.pop();if(void 0===t)break;if(o+=1,o>d||t.depth>c)throw new RollUiHttpError(400,"json_too_complex","JSON body is too complex.");if(Array.isArray(t.value))for(const o of t.value)e.push({value:o,depth:t.depth+1});else if(et(t.value))for(const o of Object.values(t.value))e.push({value:o,depth:t.depth+1})}}function S(t,e){const o=e.session;if(null===o)throw new RollUiHttpError(401,"authentication_required","Authentication required.");const r=j(t.cookie,e.sessionCookieName);if(void 0===r||!G(r,o.id))throw new RollUiHttpError(401,"authentication_required","Authentication required.");return o}function I(t,e){const o=Z(t["x-csrf-token"]);if(void 0===o||!G(o,e.csrfToken))throw new RollUiHttpError(403,"invalid_csrf_token","Invalid CSRF token.")}function k(t,e){if(t.host!==e)throw new RollUiHttpError(421,"invalid_host","Invalid Host header.")}function L(t,e,o){const r=Z(t.origin);if(o&&r!==e||void 0!==r&&r!==e)throw new RollUiHttpError(403,"invalid_origin","Invalid Origin header.");const n=Z(t["sec-fetch-site"]);if(void 0!==n&&"same-origin"!==n)throw new RollUiHttpError(403,"invalid_request_site","Cross-site requests are not accepted.")}function O(t,e){if(void 0===t||!t.startsWith("/"))throw new RollUiHttpError(400,"invalid_request_target","Invalid request target.");const o=new URL(t,e);if(o.origin!==e)throw new RollUiHttpError(400,"invalid_request_target","Invalid request target.");return o}function A(t,e){const o=`${e}/`;if(!t.startsWith(o))throw new RollUiHttpError(404,"not_found","Not found.");return`/${t.slice(o.length)}`}function x(t){let e;try{e=decodeURIComponent(t)}catch(t){throw new RollUiHttpError(400,"invalid_path","Invalid URL path.",t)}if("/"===e)return"/index.html";if(!e.startsWith("/")||e.includes("\0")||e.includes("\\"))throw new RollUiHttpError(400,"invalid_path","Invalid URL path.");const o=e.slice(1).split("/");if(o.some(t=>""===t||"."===t||".."===t))throw new RollUiHttpError(400,"invalid_path","Invalid URL path.");return`/${o.join("/")}`}function N(){return{id:B(),csrfToken:B()}}function P(t){return{csrfToken:t.csrfToken}}function $(t,e,o){return`${e}=${t.id}; Path=${o}/; HttpOnly; SameSite=Strict`}function j(t,e){if(void 0===t)return;const o=t.split(";").map(t=>t.trim()).filter(t=>t.startsWith(`${e}=`)).map(t=>t.slice(e.length+1));return 1===o.length&&""!==o[0]?o[0]:void 0}function B(){return t(f).toString("base64url")}function G(t,o){const r=Buffer.from(t),n=Buffer.from(o);return r.byteLength===n.byteLength&&e(r,n)}function D(t){t.setHeader("Cache-Control","no-store"),t.setHeader("Content-Security-Policy",g),t.setHeader("Cross-Origin-Opener-Policy","same-origin"),t.setHeader("Cross-Origin-Resource-Policy","same-origin"),t.setHeader("Permissions-Policy","camera=(), microphone=(), geolocation=()"),t.setHeader("Referrer-Policy","no-referrer"),t.setHeader("X-Content-Type-Options","nosniff"),t.setHeader("X-DNS-Prefetch-Control","off"),t.setHeader("X-Frame-Options","DENY")}function J(t,e){W(t,200,{data:e})}function M(t,e,o,r,n){W(t,e,{error:{code:o,message:r,...void 0!==n?{details:n}:{}}})}function W(t,e,o){const r=Buffer.from(JSON.stringify(o));t.statusCode=e,t.setHeader("Content-Type","application/json; charset=utf-8"),t.setHeader("Content-Length",r.byteLength),t.end(r)}function Y(t,e,o){const r=(e.body,Buffer.from(e.body));t.statusCode=200,t.setHeader("Content-Type",e.contentType),t.setHeader("Content-Length",r.byteLength),t.end(o?void 0:r)}function F(t,e,o){return t.headersSent?(t.destroy(),void o?.(e)):e instanceof RollUiHttpError?("method_not_allowed"===e.code&&"string"==typeof e.details&&t.setHeader("Allow",e.details),void M(t,e.statusCode,e.code,e.message)):void(e instanceof n?M(t,422,e.code,e.message,{issues:e.issues}):e instanceof i?M(t,409,e.code,e.message,{actualRevision:e.actualRevision,expectedRevision:e.expectedRevision}):e instanceof s||e instanceof a?M(t,409,e.code,e.message):(o?.(e),M(t,500,"internal_error","Internal server error.")))}function X(t){t.complete||t.destroyed||t.resume()}function K(t){return new RollUiHttpError(405,"method_not_allowed","Method not allowed.",t)}function z(){return new RollUiHttpError(413,"body_too_large","Request body is too large.")}function Q(t){return["/api/config","/api/catalog","/api/agents/status","/api/config/preview","/api/config/save","/api/agents/apply"].includes(t)}function V(t){return"/api/config"===t||"/api/catalog"===t||"/api/agents/status"===t?"GET":"POST"}function Z(t){return"string"==typeof t?t:void 0}function tt(t,e,o,r){const n=t??e;if(!Number.isSafeInteger(n)||n<=0||n>o)throw new RangeError(`${r} must be a positive integer no greater than ${o}.`);return n}function et(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function ot(t,e){return new Promise((o,r)=>{const n=t=>{r(t)};t.once("error",n),t.listen({host:"127.0.0.1",port:0,exclusive:!0},()=>{t.off("error",n);const i=t.address();if(null===i||"string"==typeof i)return void r(new Error("Roll UI server did not receive an IPv4 address."));const s=i.port;e(s),o(s)})})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{readFile as t,realpath as e,stat as n}from"node:fs/promises";import{extname as o,isAbsolute as s,relative as i,resolve as r,sep as a}from"node:path";const c={".css":"text/css; charset=utf-8",".html":"text/html; charset=utf-8",".ico":"image/x-icon",".js":"text/javascript; charset=utf-8",".json":"application/json; charset=utf-8",".map":"application/json; charset=utf-8",".png":"image/png",".svg":"image/svg+xml",".txt":"text/plain; charset=utf-8",".webp":"image/webp",".woff":"font/woff",".woff2":"font/woff2"};export function createFileSystemStaticAssetProvider(s){const i=r(s);return{async getAsset(s){const a=f(s);if(null===a)return null;let p,m;try{p=await e(i),m=await e(r(p,a))}catch(t){if(u(t))return null;throw t}if(!l(p,m))return null;return(await n(m)).isFile()?{body:await t(m),contentType:c[o(m).toLowerCase()]??"application/octet-stream"}:null}}}function f(t){if(!t.startsWith("/")||t.includes("\0")||t.includes("\\"))return null;const e=t.slice(1).split("/");return e.some(t=>""===t||"."===t||".."===t)?null:e.join("/")}function l(t,e){const n=i(t,e);return".."!==n&&!n.startsWith(`..${a}`)&&!s(n)}function u(t){return t instanceof Error&&"code"in t&&("ENOENT"===t.code||"ENOTDIR"===t.code)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */@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;--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--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{.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.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}}.block{display:block}.inline{display:inline}}:root{color:#f4f4f5;font-family:var(--font-mono);font-synthesis:none;text-rendering:optimizelegibility;color-scheme:dark;--bg:#09090b;--bg-darker:#050506;--panel-bg:#111113;--panel-raised:#141416;--border:#242427;--border-glow:#3f3f46;--fg:#f4f4f5;--fg-muted:#8e8e93;--fg-dim:#78787f;--orange:#ff5e00;--orange-hover:#ff7b25;--orange-glow:#ff5e0026;--green:#0f6;--green-glow:#00ff6626;--blue:#00d2ff;--blue-glow:#00d2ff26;--error-fg:#ffb088;--font-mono:"Berkeley Mono", "Berkeley Mono Trial", "Maple Mono", "Fira Code", "Microsoft YaHei", "PingFang SC", ui-monospace, monospace;--font-sans:"Microsoft YaHei", "PingFang SC", "Segoe UI", sans-serif;--font-xs:10px;--font-sm:12px;--font-md:14px;--font-lg:16px;--font-xl:20px;--font-xxl:24px;--weight-normal:400;--weight-medium:500;--weight-bold:700;--weight-black:900;--space-xs:4px;--space-sm:8px;--space-md:12px;--space-lg:16px;--space-xl:24px;--space-xxl:32px;--space-huge:48px;--radius-xs:2px;--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--transition-fast:all .15s ease;--transition-normal:all .25s cubic-bezier(.16, 1, .3, 1);--ink:var(--bg);--ink-2:var(--panel-bg);--ink-3:var(--panel-raised);--paper:var(--bg);--paper-2:var(--panel-bg);--paper-3:var(--panel-raised);--amber:var(--orange);--amber-bright:var(--orange-hover);--amber-wash:var(--orange-glow);--green-wash:#00ff6614;--red:var(--orange);--red-wash:#ff5e0014;--muted:var(--fg-muted);--line:var(--border);--line-dark:var(--border-glow);--mono:var(--font-mono);--serif:var(--font-mono);--focus:0 0 0 4px #ff5e001f;background:#09090b}*{box-sizing:border-box}html,body,#root{min-width:320px;min-height:100%;margin:0}body{color:var(--fg);background:var(--bg);-webkit-font-smoothing:antialiased}button,input,textarea,select{font:inherit}button{cursor:pointer;touch-action:manipulation}button:disabled{cursor:not-allowed;opacity:.48}button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,summary:focus-visible,[tabindex]:focus-visible{box-shadow:var(--focus);outline:none}code,kbd,.eyebrow,.section-count,.source-chip,.field-path{font-family:var(--mono)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{top:var(--space-md);left:var(--space-md);z-index:100;padding:var(--space-md) var(--space-lg);color:#000;background:var(--orange);border:1px solid var(--orange);border-radius:var(--radius-sm);font-size:var(--font-sm);font-weight:var(--weight-bold);transform:translateY(calc(-100% - var(--space-xl)));text-decoration:none;transition:transform .15s;position:fixed}.skip-link:hover{background:var(--orange-hover);border-color:var(--orange-hover)}.skip-link:focus-visible{box-shadow:var(--focus);outline:none;transform:translateY(0)}.app-shell{background:var(--paper);grid-template:"top top top"72px"nav main review"minmax(0,1fr)/272px minmax(480px,1fr) 356px;height:100dvh;display:grid;overflow:hidden}.top-bar{z-index:10;color:#f9f4e8;background:linear-gradient(90deg,#ffffff05 1px,transparent 1px) 0 0 / 24px 24px,var(--ink);border-bottom:1px solid #4b514d;grid-area:top;grid-template-columns:272px minmax(260px,1fr) auto;align-items:stretch;min-width:0;display:grid}.brand-block{border-right:1px solid var(--line-dark);align-items:center;gap:12px;padding:0 18px;display:flex}.roll-mark,.boot-mark{width:38px;height:38px;color:var(--ink);background:var(--amber);font:800 19px/1 var(--mono);flex:none;place-items:center;display:grid;position:relative;transform:rotate(-2deg)}.roll-mark:after,.boot-mark:after{content:"";border:1px solid #1c201e8c;position:absolute;inset:4px}.roll-mark span,.boot-mark span{z-index:1;position:relative}.brand-block>div:last-child{flex-direction:column;gap:2px;min-width:0;display:flex}.brand-block strong{font:800 19px/1 var(--mono);letter-spacing:.16em}.brand-block>div:last-child>span{color:#aeb4af;font:9px/1.3 var(--mono);letter-spacing:.09em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.document-identity{align-items:center;gap:10px;min-width:0;padding:0 22px;display:flex}.document-identity>div{flex-direction:column;gap:4px;min-width:0;display:flex}.document-dot{background:var(--green);border:1px solid #8bb394;flex:none;width:7px;height:7px;box-shadow:0 0 0 3px #4e7d5b2e}.document-identity small{color:#8e958f;font:8px/1 var(--mono);letter-spacing:.13em}.document-identity code{color:#e3ded2;text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.top-actions{border-left:1px solid var(--line-dark);align-items:center;gap:8px;padding:0 14px;display:flex}.mode-switch,.tri-toggle{border:1px solid var(--line-dark);background:#0000002e;padding:2px;display:inline-flex}.mode-switch button,.tri-toggle button{color:#aeb4af;min-width:48px;min-height:44px;font:700 9px/1 var(--mono);letter-spacing:.08em;background:0 0;border:0;padding:7px 10px}.mode-switch button.active{color:var(--ink);background:var(--paper)}.primary-button,.secondary-button{min-height:44px;font:700 11px/1.1 var(--mono);letter-spacing:.035em;border:1px solid #0000;padding:9px 14px;transition:background .12s,border-color .12s,transform .12s}.primary-button{color:#171a18;background:var(--amber);border-color:var(--amber-bright)}.primary-button:hover:not(:disabled){background:var(--amber-bright);transform:translateY(-1px)}.secondary-button{color:var(--ink);background:0 0;border-color:#9f988b}.secondary-button:hover:not(:disabled){border-color:var(--ink-3);background:#ffffff6b}.save-button{white-space:nowrap}.side-navigation{color:#d9d5ca;background:var(--ink-2);border-right:1px solid #4d534f;flex-direction:column;grid-area:nav;min-height:0;display:flex}.search-box{color:#8f9690;background:#202522;border:1px solid #474d49;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;min-height:44px;margin:16px 14px 10px;padding:10px;display:grid}.search-box>span{color:var(--amber);font:18px/1 var(--serif)}.search-box input{color:#ece7dc;background:0 0;border:0;outline:0;min-width:0;padding:0;font-size:12px}.search-box input::-webkit-search-cancel-button{filter:invert()}.search-box kbd{color:#8a918b;background:#343a36;border:1px solid #505752;padding:3px 5px;font-size:8px}.nav-scroll-region{scrollbar-color:#555c57 transparent;flex:1;min-height:0;overflow-y:auto}.nav-section-label{color:#aeb4af;font:700 9px/1 var(--mono);letter-spacing:.11em;justify-content:space-between;padding:14px 16px 7px;display:flex}.nav-list{flex-direction:column;display:flex}.nav-list button{color:#b8beb9;text-align:left;background:0 0;border:0;border-left:3px solid #0000;grid-template-columns:30px minmax(0,1fr) auto;align-items:center;gap:9px;width:100%;padding:10px 15px;display:grid}.nav-list button.active{color:#fcf7ec;border-left-color:var(--amber);background:linear-gradient(90deg,#d890222e,#0000 78%)}.nav-index{color:#9ba39d;font:9px/1 var(--mono)}.nav-list button.active .nav-index{color:var(--amber-bright)}.nav-list button>span:nth-child(2){flex-direction:column;gap:3px;min-width:0;display:flex}.nav-list strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:650;overflow:hidden}.nav-list small{color:#a5ada7;font:8px/1 var(--mono);letter-spacing:.05em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap;overflow:hidden}.nav-arrow{color:#6d746f;opacity:0;font-size:12px;transition:opacity .12s,transform .12s}.nav-list button:hover .nav-arrow,.nav-list button.active .nav-arrow{opacity:1;transform:translate(2px)}.nav-empty{color:#b1b7b2;border:1px dashed #555c57;margin:12px 16px;padding:14px;font-size:11px;line-height:1.6}.nav-footnote{color:#aeb4af;font:8px/1 var(--mono);letter-spacing:.1em;border-top:1px solid #454b47;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;padding:13px 16px;display:grid}.nav-footnote small{color:#a5ada7}.status-light{background:#6fa27a;width:6px;height:6px;box-shadow:0 0 8px #6fa27a99}.editor-main{background:linear-gradient(#23282508 1px,transparent 1px) 0 0 / 100% 24px,var(--paper);grid-area:main;grid-template-rows:minmax(0,1fr) 30px;min-width:0;min-height:0;display:grid}.editor-scroll-region{scrollbar-color:#aaa292 transparent;min-height:0;padding:34px clamp(24px,4vw,58px) 70px;overflow-y:auto}.repair-banner{color:#6f341f;background:var(--red-wash);border:1px solid #a84a366b;border-left:4px solid var(--red);gap:12px;width:min(840px,100%);margin:0 auto 24px;padding:12px 14px;font-size:12px;line-height:1.45;display:flex}.repair-banner strong{font:700 10px/1.7 var(--mono);letter-spacing:.08em;flex:none}.editor-footer{color:#777b76;background:var(--paper-2);border-top:1px solid var(--line);font:8px/1 var(--mono);letter-spacing:.08em;align-items:center;gap:18px;padding:0 18px;display:flex}.editor-footer span+span{border-left:1px solid var(--line);padding-left:18px}.catalog-object{width:min(840px,100%);margin:0 auto}.section-heading{border-bottom:3px solid var(--ink);justify-content:space-between;align-items:end;gap:24px;padding-bottom:14px;display:flex}.section-heading h2,.panel-heading-row h2,.apply-dialog h2{color:var(--ink);font:700 clamp(24px,3vw,34px) / 1.05 var(--serif);letter-spacing:-.025em;margin:3px 0 0}.eyebrow{color:#867d6e;letter-spacing:.13em;text-transform:uppercase;margin:0;font-size:8px;font-weight:700}.section-count{color:#656a65;background:var(--paper-2);border:1px solid var(--line);text-transform:uppercase;flex:none;padding:6px 8px;font-size:8px}.section-description{color:#62665f;max-width:680px;margin:15px 0 28px;font-size:13px;line-height:1.7}.section-description code{color:#704d14;background:var(--amber-wash);padding:1px 4px;font-size:11px}.field-stack{flex-direction:column;gap:12px;display:flex}.primitive-field,.compound-field{border:1px solid var(--line);background:#fffdf7b8;position:relative;box-shadow:2px 2px #322d250d}.primitive-field{grid-template-columns:minmax(190px,.9fr) minmax(220px,1.1fr);gap:28px;padding:18px 20px;display:grid}.primitive-field:before{content:"";background:0 0;width:3px;position:absolute;inset:-1px auto -1px -1px}.primitive-field.is-persisted:before{background:var(--amber)}.primitive-copy{min-width:0}.field-title{color:var(--ink);align-items:center;gap:8px;font-size:13px;font-weight:700;display:flex}.required-mark{color:#7a4d08;background:var(--amber-wash);font:7px/1 var(--mono);letter-spacing:.06em;text-transform:uppercase;padding:3px 5px}.field-path,.compound-heading>div:first-child>code{color:#6f675c;word-break:break-all;margin-top:6px;font-size:9px;display:block}.primitive-copy p,.compound-heading p{color:#686b66;margin:10px 0 0;font-size:11px;line-height:1.6}.field-control{flex-direction:column;justify-content:center;gap:8px;min-width:0;display:flex}.field-control input,.field-control select,.field-control textarea,.record-key input,.record-add-row input{width:100%;color:var(--ink);font:12px/1.4 var(--mono);background:#faf7ef;border:1px solid #aaa294;border-radius:0;outline:none}.field-control input,.field-control select,.record-add-row input{min-height:44px;padding:8px 10px}.field-control textarea{resize:vertical;min-height:94px;padding:10px}.input-with-unit{grid-template-columns:minmax(0,1fr) auto;display:grid}.input-with-unit>span{color:#6f746f;background:var(--paper-2);min-width:42px;font:9px/1 var(--mono);border:1px solid #aaa294;border-left:0;place-items:center;display:grid}.tri-toggle{background:var(--paper-2);border-color:#aaa294;width:max-content}.tri-toggle button.active{color:#fffaf0;background:var(--ink-3)}.field-meta-row{justify-content:space-between;align-items:center;gap:10px;min-height:20px;display:flex}.source-chip{color:#626761;letter-spacing:.06em;text-transform:uppercase;font-size:7px}.text-button{color:#6c5f50;background:0 0;border:0;border-bottom:1px solid #b8ad9e;min-height:44px;padding:8px 0;font-size:9px}.input-error{color:var(--red);font:9px/1.4 var(--mono)}.config-value-control{grid-template-columns:minmax(0,1fr) auto;align-items:stretch;gap:8px;display:grid}.json-env-control{align-items:start}.raw-value-control,.number-control,.boolean-control,.agent-number-control,.json-control{flex-direction:column;gap:7px;min-width:0;display:flex}.env-reference-button{color:#5f4a27;background:var(--amber-wash);min-width:44px;min-height:44px;font:700 9px/1 var(--mono);letter-spacing:.05em;border:1px solid #b99351;padding:7px 8px}.field-input-note{color:#686158;font:9px/1.45 var(--mono)}.field-input-note code{color:#554b3e}.compound-heading{border-bottom:1px solid var(--line);grid-template-columns:minmax(180px,.8fr) minmax(220px,1.2fr);gap:28px;padding-bottom:16px;display:grid}.compound-heading h3{font:700 15px/1.2 var(--serif);margin:0}.compound-heading p{margin-top:0}.record-list,.array-list{flex-direction:column;gap:9px;margin:14px 0;display:flex}.record-entry{background:#f8f4eb;border:1px solid #bdb5a7}.record-entry-header{background:var(--paper-2);border-bottom:1px solid #c7bfae;align-items:center;gap:10px;padding:8px 10px;display:flex}.record-key{flex:1;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:9px;min-width:0;display:grid}.record-key-mark{color:#8d7753;font:7px/1 var(--mono);letter-spacing:.08em}.record-key input{background:0 0;border-color:#0000;min-height:28px;padding:4px 7px;font-size:11px;font-weight:700}.record-key input[aria-invalid=true]{border-color:var(--red)}.record-entry-body{padding:12px}.record-entry-body .catalog-object{width:100%}.record-entry-body .section-heading,.record-entry-body .section-description{display:none}.record-add-row{border-top:1px dashed #bdb4a5;grid-template-columns:minmax(140px,1fr) auto;gap:9px;padding-top:14px;display:grid}.icon-button{color:#676c67;width:44px;height:44px;font:18px/1 var(--mono);background:0 0;border:1px solid #aaa294;flex:none;place-items:center;display:grid}.icon-button:hover:not(:disabled){color:var(--ink);background:#fffaf0}.danger-action:hover:not(:disabled){color:var(--red);background:var(--red-wash);border-color:#c78b7d}.array-item{background:#f8f4eb;border:1px solid #bdb5a7;grid-template-columns:28px minmax(0,1fr) auto;align-items:start;gap:9px;padding:10px;display:grid}.array-index{color:#8d7753;font:8px/1 var(--mono);padding-top:8px}.array-item-content .primitive-field{padding:0 0 0 var(--space-lg);box-shadow:none;background:0 0;border:0;grid-template-columns:1fr;gap:10px}.array-item-content .primitive-copy p,.array-item-content .field-path,.array-item-content .field-meta-row{display:none}.empty-inline,.empty-state{color:#7e817c;background:#ebe5d88c;border:1px dashed #bcb3a4;font-size:11px;line-height:1.6}.empty-inline{flex-direction:column;gap:2px;padding:12px;display:flex}.empty-state{text-align:center;margin:30px auto;padding:30px}.agent-env-notice{color:#6b604e;background:var(--amber-wash);border-left:3px solid var(--amber);grid-template-columns:auto 1fr;gap:12px;margin:0 0 18px;padding:10px 12px;font-size:10px;display:grid}.agent-env-notice span{line-height:1.5}.agent-env-notice code{font-size:9px}.ownership-badge{color:#5e635e;background:var(--paper-2);border:1px solid var(--line);font:8px/1 var(--mono);letter-spacing:.06em;padding:5px 8px}.derived-field{color:#617083;background:#e2e8ec;border:1px solid #aeb9c1;justify-content:space-between;align-items:center;gap:12px;min-height:38px;padding:8px 10px;font-size:10px;display:flex}.derived-field code{font-size:9px}.yaml-workspace{width:min(920px,100%);height:100%;min-height:560px;margin:0 auto}.yaml-editor-shell{color:#dcd8ce;background:#242925;border:1px solid #4e554f;grid-template-columns:48px minmax(0,1fr);height:calc(100% - 124px);min-height:460px;display:grid;overflow:hidden;box-shadow:5px 5px #1e221f17}.yaml-line-rail,.yaml-editor-shell textarea{height:100%;font:12px/1.65 var(--mono);tab-size:2;white-space:pre;border:0;outline:0;margin:0;padding:16px 0;overflow:auto}.yaml-line-rail{color:#626a64;text-align:right;-webkit-user-select:none;user-select:none;background:#1f2421;border-right:1px solid #424943;padding-right:12px;overflow:hidden}.yaml-editor-shell textarea{color:#e2ded4;resize:none;width:100%;caret-color:var(--amber-bright);background:0 0;padding-left:18px;padding-right:18px}.review-panel{min-height:0;color:var(--ink);background:var(--paper-2);border-left:1px solid var(--line);scrollbar-color:#aaa292 transparent;grid-area:review;overflow-y:auto}.agent-status-section{border-top:1px solid var(--line)}.panel-heading-row{justify-content:space-between;align-items:center;gap:12px;display:flex}.change-counter{font:8px/1 var(--mono);letter-spacing:.08em;padding:5px 7px}.change-counter.clean{color:#3e704b;background:var(--green-wash);border:1px solid #a8c1ab}.change-counter.dirty{color:#80500c;background:var(--amber-wash);border:1px solid #d3ae69}.preview-placeholder{text-align:center;border:1px dashed #b2aa9b;flex-direction:column;align-items:center;margin-top:20px;padding:22px 16px;display:flex}.preview-glyph{color:#8a5b12;background:var(--amber-wash);width:34px;height:34px;font:700 18px/1 var(--serif);place-items:center;margin-bottom:10px;display:grid}.preview-placeholder strong{font-size:12px}.preview-placeholder p{color:#73766f;margin:7px 0 15px;font-size:10px;line-height:1.55}.full-width{width:100%}.validation-block{color:#773928;background:var(--red-wash);border-left:3px solid var(--red);margin-top:16px;padding:11px 12px}.validation-block strong{font-size:11px}.validation-block ul{flex-direction:column;gap:6px;margin:8px 0 0;padding:0;list-style:none;display:flex}.validation-block li{flex-direction:column;gap:2px;font-size:10px;line-height:1.45;display:flex}.validation-issue-button{width:100%;min-height:44px;color:inherit;text-align:left;background:#ffffff47;border:1px solid #a84a3640;flex-direction:column;justify-content:center;gap:3px;padding:7px 8px;display:flex}.validation-issue-button:hover{background:#ffffff85;border-color:#a84a368c}.validation-block code{font-size:8px;font-weight:700}.preview-summary{border:1px solid var(--line);grid-template-columns:repeat(3,1fr);margin-top:18px;display:grid}.preview-summary>div{background:#fffdf780;flex-direction:column;gap:5px;min-width:0;padding:9px;display:flex}.preview-summary>div+div{border-left:1px solid var(--line)}.preview-summary span{color:#85877f;font:6px/1 var(--mono);letter-spacing:.05em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.preview-summary strong{font:700 16px/1 var(--mono)}.diff-block{background:var(--ink-2);border:1px solid #4b514d;margin-top:12px}.diff-block>summary{color:#c8ccc8;font:8px/1 var(--mono);letter-spacing:.08em;justify-content:space-between;align-items:center;padding:9px 10px;list-style:none;display:flex}.diff-block>summary::-webkit-details-marker{display:none}.diff-block>summary span{color:#737b75;letter-spacing:0}.diff-code{background:#202522;border-top:1px solid #414742;max-height:220px;padding:5px 0;overflow:auto}.diff-line{color:#9ca29d;grid-template-columns:20px minmax(0,1fr);min-width:max-content;padding:1px 9px;font-size:9px;line-height:1.45;display:grid}.diff-line>span{font-family:var(--mono);-webkit-user-select:none;user-select:none}.effect-list{flex-direction:column;gap:8px;margin-top:16px;display:flex}.activation-result{background:var(--green-wash);border:1px solid #4e7d5b59;margin-top:18px;padding:14px}.activation-result.failed{background:var(--red-wash);border-color:#a84a366b}.activation-result>strong{margin-top:8px;font-size:12px;display:block}.activation-result ul{gap:8px;margin:12px 0 0;padding:0;list-style:none;display:grid}.activation-result li{grid-template-columns:auto 1fr;align-items:start;gap:8px;display:grid}.activation-result li span{color:var(--paper);background:var(--ink-3);font:8px/1 var(--mono);text-transform:uppercase;padding:3px 5px}.activation-result li p{color:var(--ink-3);margin:0;font-size:10px;line-height:1.45}.mini-heading{color:#85877f;font:7px/1 var(--mono);letter-spacing:.11em;margin:0 0 2px}.effect-card{border:1px solid var(--line);background:#fffdf77a;border-left:3px solid #858c86;padding:10px 11px}.effect-card.restart-agent{border-left-color:var(--amber)}.effect-card.manual{border-left-color:var(--red)}.effect-card-title{grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:6px;font-size:10px;display:grid}.effect-card-title>span{color:#91601a;font:700 14px/1 var(--mono)}.effect-card-title em{color:#7d3e2c;background:var(--red-wash);font:normal 6px/1 var(--mono);letter-spacing:.07em;padding:3px 4px}.effect-card>p{color:#70736d;margin:6px 0;font-size:9px;line-height:1.5}.effect-card details summary{color:#8a8c86;font:8px/1.4 var(--mono);cursor:pointer}.effect-card details ul{margin:6px 0 0;padding-left:16px}.effect-card details code{color:#6c706a;word-break:break-all;font-size:8px}.checked-time{color:#666159;font:7px/1 var(--mono);letter-spacing:.07em;margin:8px 0 0}.refresh-button{width:44px;height:44px;font-size:15px}.agent-status-error{color:#703524;background:var(--red-wash);border:1px solid #a84a3659;border-left:3px solid var(--red);flex-direction:column;gap:4px;margin-top:12px;padding:10px 11px;font-size:10px;line-height:1.45;display:flex}.agent-status-error small{color:#6b5148}.agent-card-list{flex-direction:column;gap:8px;margin-top:14px;display:flex}.agent-card{border:1px solid var(--line);background:#fffdf785;padding:10px 11px}.agent-card-topline{grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:7px;display:grid}.status-dot{background:#92978f;width:7px;height:7px}.status-dot.off{background:#93978f}.agent-card-topline strong{text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.agent-state{color:#73776f;font:7px/1 var(--mono);text-transform:uppercase;background:#ddd8cc;padding:3px 5px}.agent-state.ok{color:#3f6e49;background:var(--green-wash)}.agent-state.warn{color:#80500c;background:var(--amber-wash)}.agent-card-grid{border-top:1px solid #d1cabb;grid-template-columns:auto minmax(0,1fr);gap:4px 8px;margin-top:9px;padding-top:8px;display:grid}.agent-card-grid span{color:#92948e;font:6px/1.4 var(--mono)}.agent-card-grid code{color:#646862;text-align:right;text-overflow:ellipsis;white-space:nowrap;font-size:8px;overflow:hidden}.agent-card>p{color:#747770;margin:8px 0 0;font-size:9px;line-height:1.45}.status-loading{flex-direction:column;gap:6px;padding:8px 0;display:flex}.loading-bar{background:linear-gradient(90deg,#d5cfc2,#ebe6dc,#d5cfc2) 0 0/200% 100%;height:8px;animation:1.2s linear infinite shimmer;display:block}.loading-bar:nth-child(2){width:78%}.loading-bar:nth-child(3){width:58%}.apply-dialog{width:min(560px,100vw - 32px);color:var(--ink);background:var(--paper);border:1px solid #5e625e;border-radius:0;margin:auto;padding:0 28px 26px;position:fixed;inset:0;box-shadow:14px 14px #0000003d}.dialog-stripe{background:repeating-linear-gradient(-45deg,var(--amber) 0 8px,var(--ink) 8px 16px);height:7px;margin:0 -28px 23px}.apply-dialog h2{font-size:28px}.apply-dialog>p:not(.eyebrow){color:#666a63;font-size:12px;line-height:1.65}.dialog-effect-list{flex-direction:column;gap:7px;margin:17px 0;display:flex}.dialog-effect-list>div{background:var(--paper-2);border:1px solid var(--line);grid-template-columns:auto minmax(0,1fr);align-items:start;gap:10px;padding:10px 11px;display:grid}.dialog-effect-list>div>span:last-child{flex-direction:column;gap:3px;display:flex}.dialog-effect-list strong{font-size:11px}.dialog-effect-list small{color:#777a74;font-size:9px;line-height:1.5}.dialog-effect-list .manual>span:first-child{color:#fff;background:var(--red);width:16px;height:16px;font:700 10px/1 var(--mono);place-items:center;display:grid}.manual-warning{color:#753d2d;background:var(--red-wash);border-left:3px solid var(--red);padding:9px 10px;font-size:10px;line-height:1.5}.dialog-actions{justify-content:flex-end;gap:8px;margin-top:22px;display:flex}.toast{z-index:30;color:#f3eee4;background:var(--ink-2);border:1px solid #59605b;border-left:4px solid var(--green);grid-template-columns:24px minmax(0,1fr) auto;align-items:start;gap:9px;width:min(410px,100vw - 36px);padding:12px 13px;animation:.18s ease-out toast-in;display:grid;position:fixed;bottom:18px;right:18px;box-shadow:7px 7px #0000002e}.toast>span{width:20px;height:20px;color:var(--ink);background:var(--green);font:700 11px/1 var(--mono);place-items:center;display:grid}.toast p{margin:2px 0 0;font-size:11px;line-height:1.5}.toast button{color:#aab0ab;width:44px;height:44px;font:17px/1 var(--mono);background:0 0;border:0;padding:0}.boot-screen{color:#ebe6da;text-align:center;background:linear-gradient(#ffffff08 1px,transparent 1px) 0 0 / 28px 28px,linear-gradient(90deg,#ffffff08 1px,transparent 1px) 0 0 / 28px 28px,var(--ink);flex-direction:column;justify-content:center;align-items:center;gap:12px;min-height:100dvh;padding:30px;display:flex}.boot-mark{width:58px;height:58px;margin-bottom:8px;font-size:26px}.boot-screen .eyebrow{color:#969d97}.boot-screen h1{font:700 clamp(26px,4vw,42px) / 1.1 var(--serif);margin:0}.boot-screen>p:not(.eyebrow){color:#b3b8b3;max-width:580px;margin:0;font-size:13px;line-height:1.7}.boot-screen>code,.boot-screen>small{color:#777f79;font:9px/1.5 var(--mono)}.boot-progress{background:#3e4540;width:220px;height:3px;margin:7px 0;overflow:hidden}.boot-progress span{background:var(--amber);width:45%;height:100%;animation:1.2s ease-in-out infinite boot-progress;display:block}.error-screen .primary-button{margin:8px 0}.app-shell{color:var(--fg);background:var(--bg);grid-template-rows:64px minmax(0,1fr);grid-template-columns:250px minmax(480px,1fr) 340px}.top-bar{color:var(--fg);border-bottom-color:var(--border);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#09090bd9;grid-template-columns:250px minmax(260px,1fr) auto}.brand-block{gap:var(--space-md);padding:0 var(--space-lg);border-right-color:var(--border)}.roll-mark,.boot-mark{color:#000;background:var(--orange);border-radius:var(--radius-sm);width:28px;height:28px;font:var(--weight-black) 15px/1 var(--font-mono);transform:none}.roll-mark:after,.boot-mark:after{display:none}.brand-block strong{color:var(--fg);font:var(--weight-bold) var(--font-lg) / 1 var(--font-mono);letter-spacing:1px}.brand-block>div:last-child>span,.document-identity small,.nav-list small,.nav-footnote,.nav-footnote small{color:var(--fg-muted)}.brand-block>div:last-child>span{font-size:var(--font-xs);line-height:1.3}.document-identity{gap:var(--space-md);padding:0 var(--space-xl)}.document-dot{background:var(--green);box-shadow:0 0 18px var(--green-glow);border-color:#00ff6659}.document-identity small{font-size:var(--font-xs)}.document-identity code{color:var(--fg);font-size:var(--font-sm)}.top-actions{gap:var(--space-sm);padding:0 var(--space-lg);border-left-color:var(--border)}.mode-switch,.tri-toggle{background:var(--bg-darker);border-color:var(--border-glow);border-radius:var(--radius-md);padding:2px;overflow:hidden}.mode-switch button,.tri-toggle button{color:var(--fg-muted);font-size:var(--font-xs);transition:var(--transition-fast)}.mode-switch button:hover:not(.active),.tri-toggle button:hover:not(.active){color:var(--fg);background:#ffffff08}.mode-switch button.active,.tri-toggle button.active{color:var(--orange);background:var(--panel-bg);box-shadow:inset 0 -2px 0 var(--orange)}.primary-button,.secondary-button{border-radius:var(--radius-sm);min-height:44px;font-size:var(--font-sm);font-weight:var(--weight-bold);text-transform:uppercase;transition:var(--transition-fast)}.primary-button{color:#000;background:var(--orange);border-color:var(--orange);box-shadow:0 4px 20px #ff5e0033}.primary-button:hover:not(:disabled){background:var(--orange-hover);border-color:var(--orange-hover)}.secondary-button{color:var(--fg);border-color:var(--border-glow);background:0 0}.secondary-button:hover:not(:disabled){color:var(--orange);border-color:var(--orange);background:#ff5e0014}.top-actions .secondary-button{color:var(--fg);border-color:var(--border-glow)}.top-actions .secondary-button:hover:not(:disabled){color:var(--orange);background:#ff5e0014}.side-navigation{color:var(--fg);border-right-color:var(--border);background:#111113d1}.search-box{gap:var(--space-sm);min-height:44px;margin:var(--space-lg) var(--space-md) var(--space-sm);padding:0 var(--space-md);color:var(--fg-muted);border-color:var(--border-glow);border-radius:var(--radius-md);transition:var(--transition-fast);background:#09090bc7}.search-box:focus-within{border-color:var(--orange);box-shadow:var(--focus)}.search-box>span{color:var(--orange);font-family:var(--font-mono)}.search-box input{color:var(--fg);font-size:var(--font-sm)}.search-box input::placeholder{color:var(--fg-muted)}.search-box kbd{color:var(--fg-muted);background:var(--panel-raised);border-color:var(--border-glow);border-radius:var(--radius-xs);font-size:var(--font-xs)}.nav-scroll-region{scrollbar-color:#ff5e005c transparent}.nav-section-label{padding:var(--space-lg) var(--space-lg) var(--space-sm);color:var(--fg-dim);font-size:var(--font-xs)}.nav-list{gap:2px}.nav-list button{width:calc(100% - 16px);min-height:44px;margin:0 var(--space-sm);padding:0 var(--space-md);color:var(--fg-muted);border-radius:var(--radius-md);transition:var(--transition-fast);border-left:0}.nav-list button:hover{color:var(--orange);background:#ff5e0014}.nav-list button.active{color:var(--fg);box-shadow:inset 3px 0 0 var(--orange),0 0 24px #ff5e0014;background:linear-gradient(90deg,#ff5e002e,#ff5e000a),#ff5e000a;border-left-color:#0000}.nav-index,.nav-list button.active .nav-index,.nav-arrow{color:var(--orange)}.nav-list strong{color:inherit;font-size:var(--font-sm);font-weight:var(--weight-bold)}.nav-list small{font-size:9px}.nav-empty{margin:var(--space-md) var(--space-lg);padding:var(--space-md);color:var(--fg-muted);border-color:var(--border-glow);border-radius:var(--radius-md);font-size:var(--font-sm);background:#ffffff05}.nav-footnote{padding:var(--space-md) var(--space-lg);border-top-color:var(--border);font-size:var(--font-xs)}.status-light{background:var(--green);box-shadow:0 0 12px var(--green-glow);border-radius:999px}.editor-main{background:linear-gradient(#ffffff05 1px,transparent 1px) 0 0 / 100% 28px,var(--bg)}.editor-scroll-region{padding:var(--space-xxl) clamp(24px,4vw,48px) 72px;scrollbar-color:#ff5e005c transparent}.repair-banner,.validation-block,.agent-status-error,.manual-warning{color:var(--error-fg);border-color:#ff5e0059;border-left-color:var(--orange);border-radius:var(--radius-md);background:#ff5e0014}.editor-footer{color:var(--fg-dim);background:var(--panel-bg);border-top-color:var(--border);font-size:var(--font-xs)}.editor-footer span+span{border-left-color:var(--border)}.catalog-object{width:min(920px,100%)}.section-heading{gap:var(--space-xl);padding-bottom:var(--space-md);border-bottom:1px solid var(--border)}.section-heading h2,.panel-heading-row h2,.apply-dialog h2{margin-top:var(--space-xs);color:var(--fg);font-family:var(--font-mono);font-size:clamp(24px,2.6vw,36px);font-weight:var(--weight-bold);letter-spacing:0;line-height:1.08}.eyebrow{color:var(--orange);font-size:var(--font-xs);font-weight:var(--weight-bold);letter-spacing:1.2px}.section-count,.change-counter,.agent-state,.ownership-badge,.required-mark{font-size:var(--font-xs);font-weight:var(--weight-bold);border-radius:999px}.section-count{padding:4px var(--space-sm);color:var(--orange);background:#ff5e0014;border-color:#ff5e003d}.section-description{margin:var(--space-lg) 0 var(--space-xl);color:var(--fg-muted);font-size:var(--font-sm);line-height:1.65}.section-description code,.field-input-note code{color:var(--orange);border-radius:var(--radius-xs);background:#ff5e0014}.field-stack{gap:var(--space-lg)}.primitive-field,.compound-field{border-color:var(--border);border-radius:var(--radius-lg);background:linear-gradient(135deg,#ff5e0008,#0000 38%),#111113d1;box-shadow:0 14px 42px #0000001f}.primitive-field{gap:var(--space-xl);padding:20px var(--space-xl)}.primitive-field:before{border-radius:0 2px 2px 0;inset:8px auto 8px -1px}.primitive-field.is-persisted:before{background:var(--orange);box-shadow:0 0 18px var(--orange-glow)}.primitive-field.is-derived:before{background:var(--blue)}.field-title,.compound-heading h3{color:var(--fg);font-family:var(--font-mono);font-size:var(--font-md);font-weight:var(--weight-bold)}.required-mark{color:var(--orange);background:#ff5e0014;border:1px solid #ff5e0038;padding:3px 7px}.field-path,.compound-heading>div:first-child>code{color:var(--fg-dim);font-size:var(--font-xs)}.primitive-copy p,.compound-heading p{color:var(--fg-muted);font-size:var(--font-sm);line-height:1.65}.field-control{gap:var(--space-sm)}.field-control input,.field-control select,.field-control textarea,.record-key input,.record-add-row input{color:var(--fg);border-color:var(--border-glow);border-radius:var(--radius-md);font-family:var(--font-mono);font-size:var(--font-sm);transition:var(--transition-fast);background:#09090bc7}.field-control input:hover,.field-control select:hover,.field-control textarea:hover,.record-add-row input:hover{border-color:var(--fg-muted)}.field-control input:focus,.field-control select:focus,.field-control textarea:focus,.record-key input:focus,.record-add-row input:focus{border-color:var(--orange);box-shadow:var(--focus)}.field-control input::placeholder,.field-control textarea::placeholder,.record-add-row input::placeholder{color:var(--fg-dim)}.field-control input:disabled,.field-control textarea:disabled,.field-control select:disabled{color:var(--fg-muted);background:#ffffff08}.input-with-unit>span{color:var(--fg-muted);background:var(--panel-raised);border-color:var(--border-glow);border-radius:0 var(--radius-md) var(--radius-md) 0;font-size:var(--font-xs)}.input-with-unit input{border-radius:var(--radius-md) 0 0 var(--radius-md)}.tri-toggle{border-color:var(--border-glow)}.tri-toggle button{color:var(--fg-muted)}.source-chip{color:var(--fg-dim);font-size:var(--font-xs)}.source-chip.persisted{color:var(--orange)}.source-chip.derived{color:var(--blue)}.text-button{color:var(--fg-muted);border-bottom-color:var(--border-glow);font-size:var(--font-xs)}.text-button:hover{color:var(--orange);border-bottom-color:var(--orange)}.input-error{color:var(--error-fg);font-size:var(--font-xs)}.env-reference-button{color:var(--orange);border-radius:var(--radius-sm);font-size:var(--font-xs);background:#ff5e0014;border-color:#ff5e0061}.env-reference-button:hover:not(:disabled){color:#000;background:var(--orange);border-color:var(--orange)}.field-input-note{color:var(--fg-muted);font-size:var(--font-xs)}.compound-field{padding:var(--space-xl)}.compound-heading{gap:var(--space-xl);padding-bottom:var(--space-lg);border-bottom-color:var(--border)}.record-list,.array-list{gap:var(--space-md);margin:var(--space-lg) 0}.record-entry,.array-item{border-color:var(--border);border-radius:var(--radius-md);background:#ffffff05}.record-entry{overflow:hidden}.record-entry-header{padding:var(--space-sm) var(--space-md);background:var(--panel-raised);border-bottom-color:var(--border)}.record-key-mark,.array-index{color:var(--orange);font-size:var(--font-xs)}.record-key input{color:var(--fg)}.record-key input:hover,.record-key input:focus{background:var(--bg-darker);border-color:var(--orange)}.record-entry-body .primitive-field{background:#09090b94}.record-add-row{border-top-color:var(--border-glow)}.icon-button{color:var(--fg-muted);border-color:var(--border-glow);border-radius:var(--radius-sm);transition:var(--transition-fast);background:0 0}.icon-button:hover:not(:disabled){color:var(--orange);border-color:var(--orange);background:#ff5e0014}.danger-action:hover:not(:disabled){color:var(--error-fg);border-color:var(--orange);background:#ff5e0014}.empty-inline,.empty-state,.preview-placeholder{color:var(--fg-muted);border-color:var(--border-glow);border-radius:var(--radius-md);font-size:var(--font-sm);background:#ffffff05}.empty-inline small{color:var(--fg-dim)}.agent-env-notice{color:var(--fg-muted);border-left-color:var(--orange);border-radius:var(--radius-md);font-size:var(--font-xs);background:#ff5e0014}.agent-env-notice code{color:var(--orange)}.ownership-badge{color:var(--fg-muted);border-color:var(--border);background:#ffffff0d}.ownership-badge.core-managed{color:var(--orange);background:#ff5e0014;border-color:#ff5e003d}.derived-field{color:var(--blue);border-radius:var(--radius-md);font-size:var(--font-xs);background:#00d2ff14;border-color:#00d2ff38}.yaml-editor-shell{color:var(--fg);background:var(--bg-darker);border-color:var(--border);border-radius:var(--radius-lg);box-shadow:0 14px 42px #0000002e}.yaml-line-rail{color:var(--fg-dim);background:var(--panel-bg);border-right-color:var(--border)}.yaml-editor-shell textarea{color:var(--fg);caret-color:var(--orange)}.review-panel{color:var(--fg);border-left-color:var(--border);scrollbar-color:#ff5e005c transparent;background:#111113d1}.review-section,.agent-status-section{padding:var(--space-xl)}.agent-status-section{border-top-color:var(--border)}.panel-heading-row h2{font-size:var(--font-xl)}.change-counter.clean{color:var(--green);background:#00ff6614;border-color:#00ff6638}.change-counter.dirty{color:var(--orange);background:#ff5e0014;border-color:#ff5e0038}.preview-placeholder{margin-top:var(--space-xl);padding:var(--space-xl) var(--space-lg)}.preview-glyph{color:#000;background:var(--orange);border-radius:var(--radius-sm);font-family:var(--font-mono)}.preview-placeholder strong{color:var(--fg);font-size:var(--font-sm)}.preview-placeholder p,.effect-card>p,.agent-card>p,.activation-result li p{color:var(--fg-muted)}.validation-block code{color:var(--error-fg)}.validation-issue-button{color:var(--error-fg);border-radius:var(--radius-sm);background:#ff5e000a;border-color:#ff5e0038}.validation-issue-button:hover{border-color:var(--orange);background:#ff5e001a}.preview-summary{border-color:var(--border);border-radius:var(--radius-md);overflow:hidden}.preview-summary>div{background:#ffffff05}.preview-summary>div+div{border-left-color:var(--border)}.preview-summary span,.mini-heading,.checked-time,.agent-card-grid span{color:var(--fg-dim);font-size:var(--font-xs)}.preview-summary strong{color:var(--fg)}.preview-summary .add-count strong{color:var(--green)}.preview-summary .remove-count strong{color:var(--orange)}.diff-block{background:var(--bg-darker);border-color:var(--border);border-radius:var(--radius-md);overflow:hidden}.diff-block>summary{color:var(--fg-muted)}.diff-block>summary span{color:var(--fg-dim)}.diff-code{background:var(--bg);border-top-color:var(--border)}.diff-line{color:var(--fg-muted)}.diff-line.add{color:var(--green);background:#00ff6614}.diff-line.remove{color:var(--error-fg);background:#ff5e0014}.activation-result{color:var(--green);border-radius:var(--radius-md);background:#00ff6614;border-color:#00ff663d}.activation-result.failed{color:var(--error-fg);background:#ff5e0014;border-color:#ff5e0059}.activation-result li span{color:#000;background:var(--green);border-radius:var(--radius-xs)}.activation-result.failed li span{background:var(--orange)}.effect-card,.agent-card{border-color:var(--border);border-radius:var(--radius-md);background:#ffffff05}.effect-card{border-left-color:var(--fg-dim)}.effect-card.restart-agent,.effect-card.manual{border-left-color:var(--orange)}.effect-card.next-chat{border-left-color:var(--blue)}.effect-card-title>span{color:var(--orange)}.effect-card-title em{color:var(--error-fg);background:#ff5e0014;border-radius:999px}.effect-card details summary,.effect-card details code,.agent-status-error small{color:var(--fg-muted)}.agent-card-topline strong{color:var(--fg);font-size:var(--font-sm)}.status-dot,.status-dot.off{background:var(--fg-dim);border-radius:999px}.status-dot.ok{background:var(--green);box-shadow:0 0 12px var(--green-glow)}.status-dot.warn{background:var(--orange);box-shadow:0 0 12px var(--orange-glow)}.agent-state{color:var(--fg-muted);border:1px solid var(--border);background:#ffffff0d}.agent-state.ok{color:var(--green);background:#00ff6614;border-color:#00ff6638}.agent-state.warn{color:var(--orange);background:#ff5e0014;border-color:#ff5e0038}.agent-card-grid{border-top-color:var(--border)}.agent-card-grid code{color:var(--fg-muted)}.agent-card>p.agent-error{color:var(--error-fg)}.loading-bar{background:linear-gradient(90deg,var(--panel-bg),var(--border-glow),var(--panel-bg)) 0 0 / 200% 100%;border-radius:999px}.apply-dialog{overscroll-behavior:contain;max-height:calc(100dvh - 32px);color:var(--fg);background:linear-gradient(135deg,#ff5e0017,transparent 34%),var(--panel-bg);border-radius:var(--radius-lg);border-color:#ff5e0047;overflow-y:auto;box-shadow:0 28px 90px #00000085,0 0 34px #ff5e0014}.apply-dialog::backdrop{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#000000a3}.dialog-stripe{background:linear-gradient(90deg,var(--orange),#ff5e001a,transparent);height:2px}.apply-dialog>p:not(.eyebrow),.dialog-effect-list small{color:var(--fg-muted)}.dialog-effect-list>div{border-color:var(--border);border-radius:var(--radius-md);background:#ffffff05}.dialog-effect-list .manual>span:first-child{color:#000;background:var(--orange);border-radius:999px}.toast{right:max(18px,env(safe-area-inset-right));bottom:max(18px,env(safe-area-inset-bottom));color:var(--fg);background:var(--panel-bg);border-color:var(--border-glow);border-left-color:var(--green);border-radius:var(--radius-md);box-shadow:0 18px 54px #0000006b}.toast.warning{border-left-color:var(--orange)}.toast>span{color:#000;background:var(--green);border-radius:var(--radius-sm)}.toast.warning>span{background:var(--orange)}.toast button{color:var(--fg-muted)}.boot-screen{color:var(--fg);background:linear-gradient(#ffffff08 1px,transparent 1px) 0 0 / 28px 28px,linear-gradient(90deg,#ffffff08 1px,transparent 1px) 0 0 / 28px 28px,var(--bg)}.boot-mark{width:58px;height:58px;font-size:26px}.boot-mark.error{color:#000;background:var(--orange)}.boot-screen .eyebrow,.boot-screen>code,.boot-screen>small{color:var(--fg-dim)}.boot-screen h1{color:var(--fg);font-family:var(--font-mono);font-weight:var(--weight-bold)}.boot-screen>p:not(.eyebrow){color:var(--fg-muted)}.boot-progress{background:var(--border-glow);border-radius:999px}.boot-progress span{background:var(--orange)}@keyframes shimmer{to{background-position:-200% 0}}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}}@keyframes boot-progress{0%{transform:translate(-110%)}to{transform:translate(245%)}}@media(max-width:1260px){.app-shell{grid-template-columns:232px minmax(430px,1fr) 320px}.top-bar{grid-template-columns:232px minmax(200px,1fr) auto}.brand-block>div:last-child span{display:none}.top-actions{padding-inline:9px}.save-button{padding-inline:10px}.primitive-field,.compound-heading{gap:18px}}@media(max-width:1120px){.app-shell{grid-template:"top top""nav main"minmax(660px,calc(100dvh - 64px))"review review"/232px minmax(0,1fr);height:auto;min-height:100dvh;overflow:visible}.top-bar{grid-template-columns:232px minmax(160px,1fr) auto;min-height:64px;position:sticky;top:0}.document-identity{padding-inline:14px}.side-navigation{min-height:660px}.review-panel{border-top:1px solid var(--border);border-left:0;grid-template-columns:1fr 1fr;display:grid;overflow:visible}.agent-status-section{border-top:0;border-left:1px solid var(--border)}}@media(max-width:720px){.app-shell{min-width:0;display:block}.top-bar{grid-template-columns:1fr auto;min-height:64px;display:grid;position:sticky;top:0}.brand-block{border-right:0;padding:8px}.brand-block>div:last-child{display:none}.roll-mark{width:34px;height:34px}.document-identity{display:none}.top-actions{gap:5px;padding:8px 5px}.top-actions .mode-switch button{min-width:44px;min-height:44px;padding:7px 4px;font-size:8px}.save-button{min-height:44px;padding:8px 7px;font-size:9px}.top-actions>.primary-button.save-button{display:inline-flex}.top-actions>.secondary-button.save-button{display:none}.side-navigation{border-right:0;border-bottom:1px solid var(--border);min-height:0;max-height:none}.search-box{margin:10px}.nav-scroll-region{max-height:238px}.nav-list{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.nav-list button{border-left-width:2px}.nav-footnote{display:none}.editor-main{min-height:700px}.editor-scroll-region{padding:24px 14px 52px}.editor-footer{gap:9px;overflow-x:auto}.editor-footer span{white-space:nowrap}.editor-footer span+span{padding-left:9px}.primitive-field,.compound-heading{grid-template-columns:1fr}.primitive-field{gap:13px;padding:16px}.compound-field{padding:16px}.record-add-row{grid-template-columns:1fr}.review-panel{display:block}.agent-status-section{border-top:1px solid var(--line);border-left:0}.yaml-workspace{min-height:620px}.yaml-editor-shell{grid-template-columns:38px minmax(0,1fr)}.yaml-line-rail,.yaml-editor-shell textarea{font-size:10px}.dialog-actions{flex-direction:column-reverse}.dialog-actions button{width:100%}}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
|