* { 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; }