* {
box-sizing: border-box;
}
html,
body,
#root {
height: 100%;
margin: 0;
}
body {
font-family: var(--pl-font);
color: var(--pl-text);
background: #eef0f3;
font-size: 13px;
}
.app {
display: grid;
grid-template-rows: auto 1fr;
height: 100%;
}
.app-header {
display: flex;
align-items: center;
gap: 14px;
padding: 8px 14px;
background: #fff;
border-bottom: 1px solid var(--pl-border);
flex-wrap: wrap;
}
.app-header h1 {
font-size: 16px;
margin: 0;
font-weight: 650;
}
.app-header .sub {
color: var(--pl-muted);
font-size: 12px;
}
.method-picker {
display: flex;
align-items: center;
gap: 8px;
margin-left: auto;
}
.method-picker .picker-label {
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--pl-muted);
}
.mode-tabs {
display: flex;
gap: 2px;
background: var(--pl-panel);
border: 1px solid var(--pl-border);
border-radius: 6px;
padding: 2px;
}
.mode-tabs button {
font: inherit;
padding: 4px 12px;
border: 0;
background: transparent;
border-radius: 4px;
cursor: pointer;
color: var(--pl-muted);
}
.mode-tabs button.active {
background: #fff;
color: var(--pl-text);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
}
.app-body {
display: grid;
grid-template-columns: 320px minmax(420px, 1fr) minmax(460px, 560px);
gap: 10px;
padding: 10px;
min-height: 0;
}
.col {
min-height: 0;
overflow: auto;
display: flex;
flex-direction: column;
gap: 10px;
}
.action-bar {
position: sticky;
top: 0;
z-index: 2;
background: #eef0f3;
padding-bottom: 6px;
display: flex;
flex-direction: column;
gap: 6px;
}
.run-btn {
width: 100%;
padding: 9px 12px;
font-size: 14px;
font-weight: 600;
}
.action-meta {
display: flex;
gap: 8px;
align-items: center;
font-size: 12px;
flex-wrap: wrap;
}
.col-right {
display: grid;
grid-template-rows: auto 1fr;
gap: 6px;
min-height: 0;
}
.col-right .pl-code {
min-height: 320px;
}
.tabs {
display: flex;
gap: 2px;
border-bottom: 1px solid var(--pl-border);
}
.tabs button {
font: inherit;
font-size: 12px;
padding: 5px 10px;
border: 1px solid transparent;
border-bottom: 0;
background: transparent;
cursor: pointer;
color: var(--pl-muted);
border-radius: 5px 5px 0 0;
}
.tabs button.active {
background: #fff;
border-color: var(--pl-border);
color: var(--pl-text);
}
.tab-body {
background: #fff;
border: 1px solid var(--pl-border);
border-top: 0;
border-radius: 0 0 6px 6px;
padding: 10px;
overflow: auto;
min-height: 0;
}
.results {
display: flex;
flex-direction: column;
gap: 12px;
}
.results-toolbar {
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
font-size: 12px;
}
.two-up {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
}
.modes-table {
font-size: 11px;
border-collapse: collapse;
}
.modes-table td,
.modes-table th {
padding: 1px 8px;
text-align: right;
border-bottom: 1px solid var(--pl-border);
}
.modes-table th:first-child,
.modes-table td:first-child {
text-align: left;
}
.banner {
padding: 8px 10px;
border-radius: 6px;
background: var(--pl-warn-bg);
border: 1px solid #f1d7a8;
font-size: 12px;
display: flex;
gap: 8px;
align-items: center;
}
.empty {
color: var(--pl-muted);
padding: 24px 26px;
background: #fff;
border: 1px dashed var(--pl-border);
border-radius: 6px;
max-width: 560px;
}
.empty h2 {
font-size: 15px;
margin: 0 0 8px;
color: var(--pl-text);
font-weight: 650;
}
.empty ol {
margin: 0 0 10px;
padding-left: 20px;
line-height: 1.7;
}
.empty p {
margin: 0;
font-size: 12px;
}
/* Left column structure: the problem, then the numerics, then everything else */
.panel-head {
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--pl-muted);
font-weight: 650;
margin: 12px 0 6px;
}
.panel-head:first-child {
margin-top: 0;
}
.method-note {
font-size: 12px;
line-height: 1.45;
padding: 8px 10px;
background: #fff;
border: 1px solid var(--pl-border);
border-left: 3px solid var(--pl-accent);
border-radius: 5px;
}
.plan-line {
margin-top: 6px;
}
.pl-params + .pl-params,
.plan-line + .pl-params {
margin-top: 10px;
}
details.advanced {
margin-top: 12px;
border-top: 1px solid var(--pl-border);
padding-top: 8px;
}
details.advanced > summary {
font-size: 12px;
color: var(--pl-muted);
cursor: pointer;
margin-bottom: 8px;
}
details.advanced > summary:hover {
color: var(--pl-accent);
}
/* The result on screen is from other settings: the button says so without moving. */
.run-btn-stale {
box-shadow: 0 0 0 3px rgba(31, 95, 168, 0.25);
}
kbd {
font-family: var(--pl-mono);
font-size: 11px;
border: 1px solid var(--pl-border);
border-bottom-width: 2px;
border-radius: 3px;
padding: 0 4px;
background: #fff;
}
@media (max-width: 1250px) {
.app-body {
grid-template-columns: 300px 1fr;
}
.col-right {
grid-column: 1 / -1;
}
}
@media (max-width: 800px) {
.app-body {
grid-template-columns: 1fr;
}
.col-right {
grid-column: auto;
}
}
.sound-bar {
padding: 6px 8px;
background: #fff;
border: 1px solid var(--pl-border);
border-radius: 6px;
}
.pair-picker .pl-select {
width: auto;
flex: 1;
}
.tab-intro {
margin-bottom: 10px;
padding-bottom: 8px;
border-bottom: 1px solid var(--pl-border);
}
/* Equation groups */
.eq-group {
margin-bottom: 14px;
}
.eq-group h3 {
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--pl-muted);
margin: 10px 0 6px;
}