/* Tokens from 시안 (RAG/Pierzainer UI 시안 (1).html): background, primary action, dimension colour. */ :root { --bg: #faf9f5; --panel: #ffffff; --text: #1d2733; --muted: #5b6878; --line: #d9d6cc; --primary: #1f5fa8; --dim: #4a5868; --warn: #8a5300; --error: #9b2c2c; --focus: 2px solid #1f5fa8; color-scheme: light; } * { box-sizing: border-box; } body { margin: 0; background: var(--bg); color: var(--text); font: 14px/1.5 system-ui, 'Noto Sans KR', sans-serif; } h2 { font-size: 16px; margin: 0 0 10px; } h3 { font-size: 14px; margin: 0 0 6px; } h4 { font-size: 13px; margin: 12px 0 6px; color: var(--muted); } .muted { color: var(--muted); } .small { font-size: 12px; } button, select, input { font: inherit; min-height: 44px; } button:focus-visible, select:focus-visible, input:focus-visible, summary:focus-visible { outline: var(--focus); outline-offset: 2px; } .btn { border: 1px solid var(--line); border-radius: 6px; background: var(--panel); color: var(--text); padding: 0 14px; cursor: pointer; } .btn.small { min-height: 44px; padding: 0 10px; } .btn.primary { background: var(--primary); border-color: var(--primary); color: #fff; } .btn:disabled { opacity: 0.45; cursor: not-allowed; } .btn[aria-pressed='true'] { border-color: var(--primary); color: var(--primary); font-weight: 600; } /* --- header ------------------------------------------------------------- */ .app { min-height: 100vh; display: flex; flex-direction: column; } .top { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; justify-content: space-between; padding: 10px 16px; background: var(--panel); border-bottom: 1px solid var(--line); } .brand { display: flex; gap: 10px; align-items: baseline; } .brand strong { font-size: 16px; } .steps { display: flex; gap: 8px; flex-wrap: wrap; } .step { padding: 8px 12px; border: 1px solid var(--line); border-radius: 6px; color: var(--muted); } .step.current { border-color: var(--primary); color: var(--text); font-weight: 600; } .step em { font-style: normal; font-weight: 400; color: var(--muted); margin-left: 4px; } .actions { display: flex; gap: 8px; flex-wrap: wrap; } .status-line { margin: 0; padding: 8px 16px; color: var(--muted); font-size: 13px; } /* --- layout ------------------------------------------------------------- */ .grid { display: grid; grid-template-columns: 260px minmax(0, 1fr) 320px; gap: 12px; padding: 0 16px 12px; flex: 1; } .panel { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; padding: 12px; min-width: 0; } .inputs { margin: 0 16px 16px; } /* --- pier list ---------------------------------------------------------- */ .pier-tools { display: flex; gap: 8px; align-items: center; margin-bottom: 8px; flex-wrap: wrap; } .pier-tools label { display: flex; gap: 6px; align-items: center; } select { padding: 4px 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel); color: var(--text); } .pier-items { list-style: none; padding: 0; margin: 0; max-height: 70vh; overflow: auto; } .pier-items li { display: grid; grid-template-columns: 28px 1fr auto; align-items: center; gap: 6px; border-bottom: 1px solid var(--line); padding: 2px 0; } .pier-items input[type='checkbox'] { width: 28px; height: 28px; margin: 8px; } .pier-name { border: 0; background: none; text-align: left; color: var(--text); cursor: pointer; padding: 0 4px; } .pier-name[aria-pressed='true'] { color: var(--primary); font-weight: 700; } .badge { font-size: 12px; color: var(--muted); } .badge.error { color: var(--error); font-weight: 600; } /* --- viewer ------------------------------------------------------------- */ .viewer-head { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-bottom: 8px; } .viewer-head h2 { margin: 0; } .views { display: flex; gap: 6px; flex-wrap: wrap; } .views .btn { min-width: 64px; } #origin { margin-left: auto; font-size: 12px; } .canvas { width: 100%; height: 62vh; min-height: 420px; border-radius: 6px; overflow: hidden; background: #e9eef4; } .parts { border: 1px solid var(--line); border-radius: 6px; margin: 10px 0 0; padding: 6px 10px; } .parts legend { color: var(--muted); font-size: 12px; padding: 0 4px; } .parts-row { display: flex; gap: 4px; flex-wrap: wrap; } .parts-row label { display: flex; align-items: center; gap: 6px; min-height: 44px; padding: 0 8px; } .parts-row input { width: 22px; height: 22px; } /* --- results ------------------------------------------------------------ */ .results section { border-bottom: 1px solid var(--line); padding-bottom: 8px; margin-bottom: 8px; } .kv { display: grid; grid-template-columns: 1fr; gap: 2px 8px; margin: 0; } .kv.wide { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); } .kv div { display: flex; justify-content: space-between; gap: 8px; border-bottom: 1px dotted var(--line); padding: 2px 0; } .kv dt { color: var(--muted); } .kv dd { margin: 0; text-align: right; } .issues { padding-left: 18px; margin: 0; } .issues li { margin-bottom: 6px; } .issues .code { font-weight: 700; color: var(--warn); } .issues .code.E { color: var(--error); } details { margin-top: 8px; } summary { cursor: pointer; min-height: 44px; display: flex; align-items: center; } /* --- import dialog (④) --------------------------------------------------- */ #import-dialog { width: min(1140px, 96vw); max-height: 92vh; padding: 0; border: 1px solid var(--line); border-radius: 10px; background: var(--panel); color: var(--text); } #import-dialog::backdrop { background: rgba(20, 28, 38, 0.35); } .dlg-head { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; padding: 12px 16px; border-bottom: 1px solid var(--line); } .dlg-head h2 { margin: 0; } .dlg-steps { display: flex; gap: 8px; list-style: none; padding: 0; margin: 0; flex: 1; color: var(--muted); font-size: 13px; } .dlg-steps li { padding: 4px 10px; border-radius: 999px; background: #f0eee6; } .dlg-body { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 16px; padding: 16px; overflow: auto; max-height: 70vh; } .dlg-col section { margin-bottom: 16px; } .field { display: grid; gap: 4px; margin-bottom: 8px; font-size: 13px; } .field input { border: 1px solid var(--line); border-radius: 6px; padding: 4px 8px; background: var(--panel); color: var(--text); } .drop { border: 2px dashed var(--line); border-radius: 8px; padding: 16px; text-align: center; } .drop.over { border-color: var(--primary); } .drop p { margin: 0 0 8px; } .drop-actions { display: flex; gap: 8px; justify-content: center; flex-wrap: wrap; } .sheet-list { list-style: none; padding: 0; margin: 0; } .sheet-list > li { border: 1px solid var(--line); border-radius: 6px; padding: 8px; margin-bottom: 8px; } .sheet-list .ok { color: var(--primary); font-weight: 600; } .sheet-list .bad { color: var(--error); font-weight: 600; } .sheet-pier { display: flex; align-items: center; gap: 8px; min-height: 44px; } .sheet-pier input { width: 24px; height: 24px; } .rules { margin: 0; padding-left: 18px; font-size: 13px; } table { border-collapse: collapse; width: 100%; font-size: 13px; } .terms th { text-align: left; width: 40%; color: var(--muted); font-weight: 400; padding: 4px 6px; border-bottom: 1px solid var(--line); } .terms td { padding: 4px 6px; border-bottom: 1px solid var(--line); } .grid-table th, .grid-table td { border-bottom: 1px solid var(--line); padding: 4px 6px; text-align: right; white-space: nowrap; } .grid-table th { color: var(--muted); font-weight: 400; } .dlg-foot { display: flex; gap: 8px; align-items: center; justify-content: flex-end; padding: 12px 16px; border-top: 1px solid var(--line); flex-wrap: wrap; } #dlg-selected { margin-right: auto; } @media (max-width: 1100px) { .grid { grid-template-columns: 1fr; } .dlg-body { grid-template-columns: 1fr; } .canvas { height: 60vh; } }