:root {
--hara-abyss: #03050a;
--hara-bg: #05070d;
--hara-panel: #0a0f18;
--hara-raised: #0e1522;
--hara-overlay: #121b2c;
--hara-cyan: #41f5e4;
--hara-cyan-bright: #8ffff2;
--hara-magenta: #ff2e88;
--hara-green: #3dff9e;
--hara-violet: #9c7bff;
--hara-amber: #ffbd68;
--hara-text: #d7e6ef;
--hara-muted: #8b9bad;
--hara-faint: #5b6b7c;
--hara-line: rgba(65, 245, 228, .14);
--hara-line-strong: rgba(65, 245, 228, .38);
--hara-glow-cyan: 0 0 12px rgba(65, 245, 228, .22);
--hara-glow-magenta: 0 0 12px rgba(255, 46, 136, .22);
--hara-mono: ui-monospace, "SF Mono", "Cascadia Mono", Menlo, Consolas, monospace;
}
.hara-kicker {
font-family: var(--hara-mono);
font-size: .62rem;
letter-spacing: .22em;
text-transform: uppercase;
color: var(--hara-cyan);
text-shadow: 0 0 12px rgba(65, 245, 228, .35);
}
.hara-kicker::before { content: '[ '; color: var(--hara-faint); }
.hara-kicker::after { content: ' ]'; color: var(--hara-faint); }
.hara-index {
font-family: var(--hara-mono);
font-size: .6rem;
letter-spacing: .18em;
color: var(--hara-faint);
}
.hara-frame {
position: relative;
border: 1px solid var(--hara-line);
background: linear-gradient(160deg, rgba(14, 21, 34, .85), rgba(5, 7, 13, .9));
}
.hara-frame::before,
.hara-frame::after {
content: '';
position: absolute;
width: 9px;
height: 9px;
border: 1px solid var(--hara-cyan);
transition: box-shadow .2s;
}
.hara-frame::before { top: -1px; left: -1px; border-width: 1px 0 0 1px; }
.hara-frame::after { bottom: -1px; right: -1px; border-width: 0 1px 1px 0; }
.hara-frame:hover::before,
.hara-frame:hover::after {
box-shadow: var(--hara-glow-cyan);
}
.hara-strip {
display: flex;
flex-wrap: wrap;
gap: 0;
border-top: 1px solid var(--hara-line);
border-bottom: 1px solid var(--hara-line);
}
.hara-strip > span {
font-family: var(--hara-mono);
font-size: .6rem;
letter-spacing: .18em;
color: var(--hara-faint);
padding: .55em 1.2em;
border-right: 1px solid var(--hara-line);
}
.hara-strip > span:last-child { border-right: 0; }
.hara-strip > span b { color: var(--hara-cyan); font-weight: 400; }
.hara-tty-p {
color: var(--hara-cyan);
text-shadow: 0 0 10px rgba(65, 245, 228, .55);
}
.hara-tty-v {
color: var(--hara-green);
}
.hara-tty-o {
color: var(--hara-faint);
font-style: italic;
}
.hara-tty-e {
color: var(--hara-magenta);
}
@import url("../ui/studio.css");
.hara-studio-chooser {
padding: clamp(24px, 5vw, 64px);
min-height: 560px;
background: #03070d;
border-block: 1px solid rgba(65, 245, 228, .28);
}
.hara-studio-chooser[hidden],
.hara-studio-dialog[hidden] {
display: none;
}
.hara-studio-chooser > h1 {
margin: .25rem 0 .5rem;
color: #eaf8ff;
font-size: clamp(2rem, 4vw, 4.5rem);
}
.hara-studio-projects {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 16px;
margin-top: 32px;
}
.hara-studio-project {
min-height: 230px;
padding: 22px;
border: 1px solid rgba(65, 245, 228, .3);
background: linear-gradient(145deg, rgba(65, 245, 228, .07), rgba(132, 86, 255, .06));
}
.hara-studio-project h2 {
color: #41f5e4;
}
.hara-studio-project .hara-studio-action {
display: inline-block;
margin: 20px 14px 0 0;
}
.is-choosing-project .hara-studio-steps,
.is-choosing-project .hara-studio-main {
display: none;
}
.hara-studio-dialog {
position: fixed;
z-index: 1000;
inset: 50% auto auto 50%;
width: min(520px, calc(100vw - 32px));
padding: 24px;
transform: translate(-50%, -50%);
border: 1px solid #41f5e4;
background: #050912;
box-shadow: 0 0 0 100vmax rgba(0, 3, 8, .8), 0 0 48px rgba(65, 245, 228, .15);
}
.hara-studio-dialog label,
.hara-studio-dialog-input {
display: block;
width: 100%;
}
.hara-studio-dialog-input {
margin-top: 10px;
padding: 12px;
color: #eaf8ff;
border: 1px solid rgba(65, 245, 228, .45);
background: #02050b;
}
.hara-studio-dialog-actions {
display: flex;
gap: 20px;
justify-content: flex-end;
margin-top: 22px;
}
@media (max-width: 760px) {
.hara-studio-projects { grid-template-columns: 1fr; }
}
.hara-studio-steps {
display: flex;
flex-wrap: wrap;
border-top: 1px solid var(--hara-line);
border-bottom: 1px solid var(--hara-line);
margin-bottom: 14px;
}
.hara-studio-step {
font-family: var(--hara-mono);
font-size: .62rem;
letter-spacing: .18em;
color: var(--hara-faint);
padding: .6em 1.4em;
border-right: 1px solid var(--hara-line);
cursor: pointer;
transition: color .15s, text-shadow .15s, background .15s;
}
.hara-studio-step:last-child { border-right: 0; }
.hara-studio-step:hover {
color: var(--hara-text);
background: rgba(65, 245, 228, .05);
}
.hara-studio-step.is-active {
color: var(--hara-cyan);
text-shadow: 0 0 10px rgba(65, 245, 228, .45);
background: rgba(65, 245, 228, .07);
}
.hara-studio-pane-head {
display: flex;
justify-content: space-between;
align-items: center;
padding: .55rem .9rem;
border-bottom: 1px solid var(--hara-line);
font-family: var(--hara-mono);
font-size: .62rem;
letter-spacing: .18em;
color: var(--hara-muted);
background: rgba(3, 5, 10, .6);
flex: none;
}
.hara-studio-pane-head .hara-index {
color: var(--hara-cyan);
}
.hara-studio-tree-group {
font-family: var(--hara-mono);
font-size: .56rem;
letter-spacing: .22em;
color: var(--hara-faint);
padding: .8rem .9rem .3rem;
}
.hara-studio-file {
font-family: var(--hara-mono);
font-size: .68rem;
color: var(--hara-muted);
padding: .4rem .9rem;
border-left: 1px solid transparent;
cursor: pointer;
display: flex;
gap: .7em;
transition: color .15s, border-color .15s, background .15s;
}
.hara-studio-file:hover {
color: var(--hara-text);
background: rgba(65, 245, 228, .04);
}
.hara-studio-file.is-active {
color: var(--hara-cyan);
border-left-color: var(--hara-cyan);
background: rgba(65, 245, 228, .06);
}
.hara-studio-editor {
flex: 1;
margin: 0;
padding: 1rem 1.1rem;
font-family: var(--hara-mono);
font-size: .74rem;
line-height: 1.75;
color: var(--hara-text);
background: transparent;
border: 0;
box-shadow: none;
overflow: auto;
white-space: pre;
}
.hara-studio-repl-log {
flex: 1;
overflow-y: auto;
padding: .8rem 1.1rem;
font-family: var(--hara-mono);
font-size: .72rem;
line-height: 1.8;
color: var(--hara-text);
}
.hara-studio-repl-entry {
display: flex;
align-items: baseline;
gap: .6em;
padding: .55rem 1.1rem;
border-top: 1px solid var(--hara-line);
background: rgba(3, 5, 10, .6);
font-family: var(--hara-mono);
font-size: .72rem;
flex: none;
}
.hara-studio-repl-input {
flex: 1;
background: transparent;
border: 0;
outline: none;
color: var(--hara-cyan-bright);
font-family: var(--hara-mono);
font-size: .72rem;
caret-color: var(--hara-cyan);
}
.hara-studio-repl-input::placeholder {
color: var(--hara-faint);
}
.hara-studio-status {
margin-top: 14px;
border-bottom: 1px solid var(--hara-line);
}
.hara-studio-steps {
align-items: center;
}
.hara-studio-step.hara-studio-label,
.hara-studio-step.hara-studio-label:hover {
cursor: default;
color: var(--hara-faint);
background: transparent;
text-shadow: none;
}
.hara-studio-select {
align-self: center;
background: var(--hara-abyss);
color: var(--hara-cyan);
border: 1px solid var(--hara-line);
font-family: var(--hara-mono);
font-size: .62rem;
letter-spacing: .14em;
padding: .25em .5em;
margin: 0 .6em;
max-width: 180px;
}
.hara-studio-select option {
background: var(--hara-panel);
color: var(--hara-text);
}
.hara-studio-action {
padding: 0;
color: inherit;
font: inherit;
letter-spacing: inherit;
border: 0;
background: transparent;
cursor: pointer;
transition: color .15s, text-shadow .15s;
}
.hara-studio-action:hover {
color: var(--hara-cyan);
text-shadow: 0 0 10px rgba(65, 245, 228, .45);
}
.hara-studio-tree-body {
overflow-y: auto;
}
textarea.hara-studio-editor {
resize: none;
outline: none;
width: 100%;
height: 100%;
box-sizing: border-box;
caret-color: var(--hara-cyan);
}
.hara-studio-editor-stage {
min-height: 0;
flex: 1;
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(150px, 28%);
}
.hara-studio-insta-gutter {
position: relative;
min-width: 0;
overflow: hidden;
border-left: 1px solid rgba(132, 86, 255, .32);
background: rgba(132, 86, 255, .035);
font: .62rem/1.45 var(--hara-mono);
}
.hara-studio-insta-result {
position: absolute;
left: .55rem;
right: .4rem;
min-height: 1.45em;
padding: 0 .35rem;
overflow: hidden;
color: var(--hara-green);
text-align: left;
text-overflow: ellipsis;
white-space: nowrap;
border-left: 2px solid rgba(73, 255, 171, .55);
background: rgba(73, 255, 171, .045);
}
.hara-studio-insta-result.is-error {
color: var(--hara-magenta);
border-color: var(--hara-magenta);
background: rgba(255, 46, 136, .07);
}
.hara-studio-insta-result.is-skipped,
.hara-studio-insta-result.is-pending { color: var(--hara-faint); border-color: var(--hara-faint); }
.hara-studio-insta-result.is-stale { opacity: .38; }
.hara-studio-insta-message { padding: .7rem; color: var(--hara-muted); }
.hara-studio-insta-toggle.is-active { color: var(--hara-violet, #9b7cff); text-shadow: 0 0 9px rgba(132, 86, 255, .65); }
.hara-studio-trace {
flex: none;
max-height: 21rem;
overflow: auto;
border-top: 1px solid var(--hara-line);
background: rgba(3, 5, 10, .72);
font-family: var(--hara-mono);
font-size: .64rem;
}
.hara-studio-trace-head {
padding: .45rem .9rem;
color: var(--hara-cyan);
letter-spacing: .16em;
border-bottom: 1px solid var(--hara-line);
}
.hara-studio-trace-note {
padding: .7rem .9rem;
color: var(--hara-muted);
}
.hara-studio-trace-summary,
.hara-studio-trace-filters {
display: flex;
align-items: center;
gap: .8rem;
padding: .45rem .9rem;
border-bottom: 1px solid var(--hara-line);
}
.hara-studio-trace-summary strong { color: var(--hara-green); }
.hara-studio-trace-summary.is-error strong { color: var(--hara-magenta); }
.hara-studio-trace-result { margin-left: auto; color: var(--hara-text); }
.hara-studio-trace-filter { padding: .2rem .4rem; color: var(--hara-faint); border: 1px solid var(--hara-line); }
.hara-studio-trace-filter.is-active { color: var(--hara-violet, #9b7cff); border-color: rgba(132, 86, 255, .7); }
.hara-studio-trace-raw { margin-left: auto; color: var(--hara-cyan); }
.hara-studio-trace-layout {
display: grid;
grid-template-columns: minmax(210px, 1fr) minmax(220px, .85fr);
min-height: 8rem;
}
.hara-studio-trace-tree,
.hara-studio-trace-details { min-width: 0; margin: 0; padding: .5rem; overflow: auto; }
.hara-studio-trace-details { color: var(--hara-muted); border-left: 1px solid var(--hara-line); white-space: pre-wrap; }
.hara-studio-trace-node {
display: block;
width: calc(100% - var(--trace-depth) * .75rem);
margin-left: calc(var(--trace-depth) * .75rem);
padding: .28rem .4rem;
overflow: hidden;
color: var(--hara-text);
text-align: left;
text-overflow: ellipsis;
white-space: nowrap;
border-left: 1px solid rgba(132, 86, 255, .6);
}
.hara-studio-trace-node.is-macro { color: var(--hara-violet, #9b7cff); }
.hara-studio-trace-node.is-error { color: var(--hara-magenta); }
@media (max-width: 760px) {
.hara-studio-editor-stage { grid-template-columns: minmax(0, 1fr) 130px; }
.hara-studio-trace-layout { grid-template-columns: 1fr; }
.hara-studio-trace-details { border-left: 0; border-top: 1px solid var(--hara-line); }
}
.hara-studio-trace-table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
.hara-studio-trace-table th,
.hara-studio-trace-table td {
padding: .38rem .55rem;
text-align: left;
border-bottom: 1px solid rgba(65, 245, 228, .08);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.hara-studio-trace-table th {
color: var(--hara-faint);
font-weight: 400;
letter-spacing: .12em;
}
.hara-studio-trace-table th:nth-child(1),
.hara-studio-trace-table td:nth-child(1),
.hara-studio-trace-table th:nth-child(4),
.hara-studio-trace-table td:nth-child(4) { width: 2.5rem; }
.hara-studio-trace-table tr.is-error { background: rgba(255, 46, 136, .07); }
.hara-studio-trace-table tbody tr { cursor: pointer; }
.hara-studio-trace-table tbody tr:hover { background: rgba(65, 245, 228, .06); }
.hara-studio-trace-source { color: var(--hara-text); }
.hara-studio-dirty {
color: var(--hara-amber);
margin-right: .6em;
}
.hara-studio-pane-head .hara-studio-action {
margin-left: .9em;
}