/* Harness Builder app layout. Reuses tokens from site.css. */

.page-hero-compact { padding: 32px 0 24px; }
.page-hero-compact p { font-size: 1rem; }

.builder-section { padding-top: 0; padding-bottom: 36px; }
.builder-section .wrap { max-width: 1440px; }

.builder-app {
  position: relative;
  background: var(--panel);
  border: 1px solid var(--line);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--chamfer)), calc(100% - var(--chamfer)) 100%, 0 100%);
  overflow: hidden;
}

.builder-loading {
  position: absolute; inset: 0; z-index: 20;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 16px; background: var(--panel); color: var(--muted); text-align: center; padding: 20px;
  transition: opacity .2s;
}
.builder-loading.hidden { opacity: 0; pointer-events: none; }
.spinner {
  width: 34px; height: 34px; border-radius: 50%;
  border: 3px solid var(--line); border-top-color: var(--accent);
  animation: spin 0.8s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .spinner { animation-duration: 2.4s; } }

.builder-toolbar {
  display: flex; align-items: flex-end; justify-content: space-between; gap: 16px;
  flex-wrap: wrap; padding: 16px 18px; border-bottom: 1px solid var(--line); background: var(--bg-2);
}
.tool-group { display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap; }
.tool-group-right { align-items: center; }
.tool-group label { display: grid; gap: 4px; font-size: .78rem; color: var(--muted); }
.tool-group input[type="number"] { width: 70px; }
.tool-group input[type="text"] { width: 160px; }
.tool-group input, .tool-group select {
  background: var(--bg); color: var(--text); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 7px 9px; font: inherit; font-size: .9rem;
}
.tool-hint { color: var(--muted); font-size: .78rem; align-self: center; }
.btn.ghost { font-size: .85rem; padding: 8px 14px; }
.btn.ghost.danger { border-color: #ff6b6b; color: #ff6b6b; margin-top: 8px; }
.btn.ghost.danger:hover { background: rgba(255,107,107,.1); }

.export-dropdown .dd-toggle {
  font: 600 .85rem Inter, sans-serif; padding: 8px 14px; border: 1px solid var(--line); color: var(--text);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--chamfer-xs)), calc(100% - var(--chamfer-xs)) 100%, 0 100%);
}
.export-dropdown { --dd-gap: 8px; }

.builder-body { display: grid; grid-template-columns: 1fr 340px; height: min(68vh, 460px); }
@media (max-width: 860px) { .builder-body { grid-template-columns: 1fr; height: min(70vh, 640px); } }

.canvas-wrap { position: relative; background: var(--bg); }
#harness-canvas { display: block; width: 100%; height: 100%; touch-action: none; cursor: default; }
.canvas-controls {
  position: absolute; bottom: 14px; left: 14px; display: flex; gap: 2px;
  background: var(--panel); border: 1px solid var(--line); overflow: hidden;
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--chamfer-sm)), calc(100% - var(--chamfer-sm)) 100%, 0 100%);
}
.canvas-controls button {
  background: none; border: 0; color: var(--text); width: 34px; height: 32px; cursor: pointer; font-size: 1rem;
}
.canvas-controls button:hover { background: var(--bg-2); color: var(--accent); }
.canvas-controls button#zoom-fit { width: auto; padding: 0 10px; font-size: .75rem; }

.builder-side { border-left: 1px solid var(--line); display: flex; flex-direction: column; background: var(--bg-2); min-height: 0; }
@media (max-width: 860px) { .builder-side { border-left: 0; border-top: 1px solid var(--line); } }

.side-tabs { display: flex; border-bottom: 1px solid var(--line); }
.side-tab {
  flex: 1; background: none; border: 0; color: var(--muted); padding: 12px 10px; cursor: pointer;
  font: 600 .85rem Inter, sans-serif; border-bottom: 2px solid transparent; display: flex; align-items: center; justify-content: center; gap: 6px;
}
.side-tab[aria-selected="true"] { color: var(--text); border-bottom-color: var(--accent); }
.badge {
  background: var(--accent); color: #111; font-size: .68rem; font-weight: 700;
  padding: 1px 7px 1px 5px; font-family: "JetBrains Mono", monospace;
  clip-path: polygon(4px 0, 100% 0, 100% 100%, 0 100%, 0 4px);
}

.side-panel { padding: 16px; overflow-y: auto; flex: 1; min-height: 0; }
.side-empty { color: var(--muted); font-size: .88rem; }

.prop-form[hidden] { display: none; }
.prop-form { display: grid; gap: 12px; }
.prop-form h4 { margin: 0 0 2px; font-family: "JetBrains Mono", monospace; font-size: .8rem; color: var(--accent); text-transform: uppercase; letter-spacing: .08em; }
.prop-form label { display: grid; gap: 5px; font-size: .78rem; color: var(--muted); }
.prop-form input, .prop-form select {
  background: var(--bg); color: var(--text); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 8px 10px; font: inherit; font-size: .9rem; width: 100%;
}
.prop-form .row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.prop-form .row-check { display: flex; flex-direction: row; align-items: center; gap: 8px; font-size: .85rem; color: var(--text); }
.prop-form .row-check input { width: auto; }

.checks-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.checks-list li {
  font-size: .85rem; padding: 10px 12px; border: 1px solid var(--line);
  background: var(--panel); display: flex; gap: 8px;
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--chamfer-xs)), calc(100% - var(--chamfer-xs)) 100%, 0 100%);
}
.checks-list li.error { border-color: #ff6b6b; }
.checks-list li.warning { border-color: #f5c518; }
.checks-list .level-dot { width: 8px; height: 8px; transform: rotate(45deg); margin-top: 6px; flex: none; }
.checks-list li.error .level-dot { background: #ff6b6b; }
.checks-list li.warning .level-dot { background: #f5c518; }

.quote-wrap { max-width: 640px; margin: 0 auto; text-align: center; }
.quote-form { text-align: left; margin-top: 28px; }
.quote-form textarea { min-height: 90px; }
