Files
ahp-decision-analysis/public/css/main.css
T
2026-08-13 21:35:38 +09:00

980 lines
18 KiB
CSS

*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-size: 16px;
scroll-behavior: smooth;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans KR", sans-serif;
background: #FFFFFF;
color: #111111;
line-height: 1.6;
min-height: 100vh;
-webkit-font-smoothing: antialiased;
}
:focus,
:focus-visible {
outline: none;
}
#app {
display: flex;
flex-direction: column;
min-height: 100vh;
}
#app-header {
background: #FFFFFF;
border-bottom: 1px solid #111111;
padding: 0 1.5rem;
position: sticky;
top: 0;
z-index: 100;
}
.header-inner {
max-width: 760px;
margin: 0 auto;
display: flex;
align-items: center;
gap: 1rem;
height: 56px;
}
.header-title {
font-size: 0.85rem;
font-weight: 700;
color: #111111;
flex: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
letter-spacing: -0.01em;
}
.header-name {
direction: rtl;
font-size: 0.85rem;
font-weight: 700;
color: #111111;
flex: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
letter-spacing: -0.01em;
}
#app-main {
flex: 1;
padding: 2rem 1rem 4rem;
display: flex;
justify-content: center;
align-items: center;
}
.step-wrap {
width: 100%;
max-width: 720px;
margin: 0 auto;
}
.step-progress {
display: flex;
align-items: center;
gap: 0;
margin-bottom: 2rem;
}
.step-progress .step-dot {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.25rem;
flex: 1;
position: relative;
}
.step-progress .step-dot:not(:last-child)::after {
content: "";
position: absolute;
top: 14px;
left: calc(50% + 14px);
right: calc(-50% + 14px);
height: 1px;
background: #CCCCCC;
}
.step-progress .step-dot.done::after {
background: #111111;
}
.step-progress .step-dot .dot-circle {
width: 28px;
height: 28px;
border-radius: 50%;
border: 1px solid #CCCCCC;
background: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.72rem;
font-weight: 700;
color: #6E6E6E;
position: relative;
z-index: 1;
}
.step-progress .step-dot .dot-label {
font-size: 0.68rem;
color: #6E6E6E;
text-align: center;
line-height: 1.2;
}
.step-progress .step-dot.done .dot-circle {
background: #111111;
border-color: #111111;
color: #FFFFFF;
}
.step-progress .step-dot.active .dot-circle {
background: #111111;
border-color: #111111;
color: #FFFFFF;
}
.step-progress .step-dot.active .dot-label {
color: #111111;
font-weight: 700;
}
.card {
background: #FFFFFF;
border: 1px solid #111111;
border-radius: 0;
padding: 2rem;
margin-bottom: 1.5rem;
}
.card.card-sm {
padding: 1.5rem;
}
.section-title {
font-size: 1.3rem;
font-weight: 800;
color: #111111;
letter-spacing: -0.02em;
margin-bottom: 0.4rem;
}
.section-subtitle {
color: #6E6E6E;
font-size: 0.9rem;
margin-bottom: 1.5rem;
line-height: 1.5;
}
.form-group {
margin-bottom: 1.2rem;
}
.form-group label {
display: block;
font-size: 0.875rem;
font-weight: 700;
margin-bottom: 0.5rem;
color: #111111;
}
.form-group input[type=text] {
width: 100%;
padding: 0.6rem 0.9rem;
border: 1px solid #CCCCCC;
border-radius: 0;
font-size: 0.9rem;
color: #111111;
background: #FFFFFF;
}
.form-group input[type=text]::placeholder {
color: #A3A3A3;
}
.radio-group {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.radio-group label {
display: flex;
align-items: center;
gap: 0.4rem;
padding: 0.5rem 1rem;
border: 1px solid #CCCCCC;
border-radius: 0;
cursor: pointer;
font-size: 0.875rem;
font-weight: 400;
color: #6E6E6E;
margin: 0;
white-space: nowrap;
}
.radio-group label input[type=radio] {
display: none;
}
.radio-group label:hover {
border-color: #111111;
color: #111111;
}
.radio-group label.selected {
border-color: #111111;
background: #111111;
color: #FFFFFF;
font-weight: 700;
}
.step-instruction {
font-size: 1.05rem;
line-height: 1.65;
font-weight: 500;
color: #111111;
margin-bottom: 1.5rem;
}
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.4rem;
padding: 0.65rem 1.6rem;
border-radius: 0;
border: 1px solid transparent;
font-size: 0.9rem;
font-weight: 700;
cursor: pointer;
text-decoration: none;
background: #FFFFFF;
color: #111111;
}
.btn:disabled {
opacity: 0.35;
cursor: not-allowed;
}
.btn.btn-primary {
background: #111111;
color: #FFFFFF;
border-color: #111111;
}
.btn.btn-primary:not(:disabled):hover {
background: #FFFFFF;
color: #111111;
}
.btn.btn-outline {
background: #FFFFFF;
color: #111111;
border-color: #111111;
}
.btn.btn-outline:not(:disabled):hover {
background: #111111;
color: #FFFFFF;
}
.btn.btn-gray {
background: #FFFFFF;
color: #6E6E6E;
border-color: #CCCCCC;
}
.btn.btn-gray:not(:disabled):hover {
border-color: #111111;
color: #111111;
}
.btn.btn-lg {
padding: 0.85rem 2.2rem;
font-size: 1rem;
}
.btn.btn-full {
width: 100%;
}
.btn.btn-select, .btn.btn-reject {
flex: 1;
font-size: 1rem;
padding: 0.9rem 1rem;
background: #FFFFFF;
color: #111111;
border-color: #CCCCCC;
}
.btn.btn-select:not(:disabled):hover, .btn.btn-reject:not(:disabled):hover {
border-color: #111111;
}
.btn.btn-selected-select, .btn.btn-selected-reject {
flex: 1;
padding: 0.9rem 1rem;
font-size: 1rem;
background: #111111;
color: #FFFFFF;
border-color: #111111;
}
.btn-row {
display: flex;
gap: 0.75rem;
margin-top: 1.2rem;
}
.btn-row.center {
justify-content: center;
}
.btn-row.end {
justify-content: flex-end;
}
.progress-bar-wrap {
margin-bottom: 1.5rem;
}
.progress-bar-wrap .progress-label {
display: flex;
justify-content: space-between;
font-size: 0.82rem;
color: #6E6E6E;
margin-bottom: 0.4rem;
font-weight: 700;
}
.progress-bar-wrap .progress-track {
height: 4px;
background: #E5E5E5;
border-radius: 0;
overflow: hidden;
}
.progress-bar-wrap .progress-track .progress-fill {
height: 100%;
background: #111111;
transition: width 0.3s ease;
}
.case-card .case-header {
display: flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 1.4rem;
padding-bottom: 1rem;
border-bottom: 1px solid #CCCCCC;
}
.case-card .case-header .team-badge {
font-size: 1.4rem;
font-weight: 800;
color: #111111;
background: #FFFFFF;
border: 1px solid #111111;
border-radius: 0;
padding: 0.2rem 0.7rem;
line-height: 1.4;
}
.case-card .case-header .industry-tag {
font-size: 0.82rem;
background: #FFFFFF;
border: 1px solid #CCCCCC;
border-radius: 0;
padding: 0.25rem 0.7rem;
color: #6E6E6E;
font-weight: 400;
}
.var-row {
display: flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 0.85rem;
}
.var-row .var-name {
font-size: 0.82rem;
font-weight: 400;
color: #333333;
min-width: 110px;
flex-shrink: 0;
}
.var-row .var-bar-track {
flex: 1;
height: 8px;
background: #E5E5E5;
border-radius: 0;
overflow: hidden;
}
.var-row .var-bar-track .var-bar-fill {
height: 100%;
transition: width 0.4s ease;
}
.var-row .var-score {
font-size: 0.85rem;
font-weight: 700;
min-width: 32px;
text-align: right;
color: #111111;
font-variant-numeric: tabular-nums;
}
.var-bar-fill[data-level=low] {
background: #C7C7C7;
}
.var-bar-fill[data-level=mid] {
background: #8A8A8A;
}
.var-bar-fill[data-level=high] {
background: #111111;
}
.judgment-section {
margin-top: 1.5rem;
padding-top: 1.2rem;
border-top: 1px solid #CCCCCC;
}
.judgment-section .judgment-label {
font-size: 0.875rem;
font-weight: 700;
margin-bottom: 0.75rem;
color: #111111;
}
.confidence-section {
margin-top: 1.2rem;
padding: 1rem 1.2rem;
background: #FFFFFF;
border: 1px solid #CCCCCC;
border-radius: 0;
}
.confidence-section .confidence-label {
font-size: 0.82rem;
font-weight: 700;
color: #111111;
margin-bottom: 0.6rem;
display: flex;
justify-content: space-between;
}
.confidence-section .confidence-slider {
width: 100%;
appearance: none;
height: 4px;
border-radius: 0;
background: #E5E5E5;
cursor: pointer;
}
.confidence-section .confidence-slider::-webkit-slider-thumb {
appearance: none;
width: 18px;
height: 18px;
border-radius: 50%;
background: #111111;
cursor: pointer;
border: none;
}
.confidence-section .confidence-slider::-moz-range-thumb {
width: 18px;
height: 18px;
border-radius: 50%;
background: #111111;
border: none;
cursor: pointer;
}
.confidence-section .confidence-labels {
display: flex;
justify-content: space-between;
margin-top: 0.4rem;
}
.confidence-section .confidence-labels .cl {
font-size: 0.7rem;
color: #6E6E6E;
}
.judgment-likert-row {
display: flex;
margin-top: 0.5rem;
}
.judgment-likert-btn {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 0.3rem;
padding: 0.7rem 0.3rem;
border: 1px solid #CCCCCC;
border-radius: 0;
background: #FFFFFF;
cursor: pointer;
}
.judgment-likert-btn + .judgment-likert-btn {
margin-left: -1px;
}
.judgment-likert-btn .jl-num {
font-size: 1.1rem;
font-weight: 800;
color: #6E6E6E;
}
.judgment-likert-btn .jl-label {
font-size: 0.65rem;
color: #6E6E6E;
text-align: center;
line-height: 1.3;
}
.judgment-likert-btn:hover {
border-color: #111111;
position: relative;
z-index: 1;
}
.judgment-likert-btn.active, .judgment-likert-btn[data-val].active {
border-color: #111111;
background: #111111;
position: relative;
z-index: 2;
}
.judgment-likert-btn.active .jl-num, .judgment-likert-btn.active .jl-label, .judgment-likert-btn[data-val].active .jl-num, .judgment-likert-btn[data-val].active .jl-label {
color: #FFFFFF;
}
.ahp-pair-card .pair-title {
font-size: 0.85rem;
color: #6E6E6E;
margin-bottom: 1.2rem;
font-weight: 400;
}
.ahp-pair-card .pair-criteria {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
margin-bottom: 1.2rem;
}
.ahp-pair-card .pair-criteria .crit {
flex: 1;
text-align: center;
font-size: 1rem;
font-weight: 400;
color: #6E6E6E;
padding: 0.6rem;
border-radius: 0;
}
.ahp-pair-card .pair-criteria .crit.crit-left {
text-align: right;
}
.ahp-pair-card .pair-criteria .crit.crit-right {
text-align: left;
}
.ahp-pair-card .pair-criteria .crit.crit-active-left, .ahp-pair-card .pair-criteria .crit.crit-active-right {
color: #111111;
font-weight: 800;
}
.ahp-pair-card .pair-criteria .vs-badge {
font-size: 0.75rem;
font-weight: 700;
color: #6E6E6E;
background: #FFFFFF;
border: 1px solid #CCCCCC;
border-radius: 0;
padding: 0.2rem 0.5rem;
flex-shrink: 0;
}
.ahp-slider-wrap {
padding: 0.5rem 0;
}
.ahp-scale-labels {
display: flex;
justify-content: space-between;
margin-bottom: 0.5rem;
padding: 0 11px;
}
.ahp-scale-labels span {
font-size: 0.7rem;
color: #6E6E6E;
font-weight: 400;
text-align: center;
min-width: 0;
}
.ahp-scale-labels .sc-mid {
font-weight: 800;
color: #111111;
font-size: 0.72rem;
}
.ahp-slider {
width: 100%;
appearance: none;
height: 4px;
border-radius: 0;
background: #E5E5E5;
cursor: pointer;
}
.ahp-slider::-webkit-slider-thumb {
appearance: none;
width: 22px;
height: 22px;
border-radius: 50%;
background: #111111;
border: none;
cursor: pointer;
}
.ahp-slider::-moz-range-thumb {
width: 22px;
height: 22px;
border-radius: 50%;
background: #111111;
border: none;
cursor: pointer;
}
.ahp-description {
text-align: center;
margin-top: 1rem;
padding: 0.7rem 1rem;
background: #FFFFFF;
border: 1px solid #CCCCCC;
border-radius: 0;
font-size: 0.875rem;
font-weight: 700;
color: #111111;
min-height: 42px;
}
.weight-chart {
margin-top: 0.5rem;
}
.weight-chart .wc-row {
display: flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 0.7rem;
}
.weight-chart .wc-row .wc-label {
font-size: 0.82rem;
font-weight: 400;
color: #333333;
min-width: 110px;
flex-shrink: 0;
}
.weight-chart .wc-row .wc-track {
flex: 1;
height: 14px;
background: #E5E5E5;
border-radius: 0;
overflow: hidden;
}
.weight-chart .wc-row .wc-track .wc-fill {
height: 100%;
background: #111111;
transition: width 0.5s ease;
}
.weight-chart .wc-row .wc-pct {
font-size: 0.82rem;
font-weight: 700;
color: #111111;
min-width: 38px;
text-align: right;
font-variant-numeric: tabular-nums;
}
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
gap: 0.75rem;
margin-top: 1rem;
}
.stats-grid .stat-box {
background: #FFFFFF;
border: 1px solid #CCCCCC;
border-radius: 0;
padding: 1rem;
text-align: center;
}
.stats-grid .stat-box .stat-val {
font-size: 1.6rem;
font-weight: 800;
color: #111111;
font-variant-numeric: tabular-nums;
}
.stats-grid .stat-box .stat-label {
font-size: 0.75rem;
color: #6E6E6E;
margin-top: 0.25rem;
line-height: 1.3;
}
.stats-grid .stat-box.stat-warn {
border-color: #111111;
}
.stats-grid .stat-box.stat-ok {
border-color: #CCCCCC;
}
.comparison-table-wrap {
overflow-x: auto;
margin-top: 1rem;
border: 1px solid #111111;
border-radius: 0;
}
.comparison-table-wrap table {
width: 100%;
border-collapse: collapse;
font-size: 0.82rem;
}
.comparison-table-wrap table th {
background: #FFFFFF;
padding: 0.6rem 0.8rem;
text-align: center;
font-weight: 700;
border-bottom: 1px solid #111111;
white-space: nowrap;
color: #111111;
}
.comparison-table-wrap table td {
padding: 0.55rem 0.8rem;
text-align: center;
border-bottom: 1px solid #CCCCCC;
color: #333333;
}
.comparison-table-wrap table td:first-child {
font-weight: 700;
color: #111111;
}
.comparison-table-wrap table tr:last-child td {
border-bottom: none;
}
.comparison-table-wrap table tr.mismatch td {
background: #F5F5F5;
color: #111111;
}
.comparison-table-wrap table tr.mismatch td:first-child {
color: #111111;
}
.badge {
display: inline-block;
padding: 0.2rem 0.55rem;
border-radius: 0;
font-size: 0.72rem;
font-weight: 700;
line-height: 1.4;
border: 1px solid transparent;
}
.badge.badge-select {
background: #111111;
color: #FFFFFF;
border-color: #111111;
}
.badge.badge-reject {
background: #FFFFFF;
color: #6E6E6E;
border-color: #CCCCCC;
}
.badge.badge-match {
background: #FFFFFF;
color: #111111;
border-color: #111111;
}
.badge.badge-mismatch {
background: #111111;
color: #FFFFFF;
border-color: #111111;
}
.badge.badge-neutral {
background: #FFFFFF;
color: #6E6E6E;
border-color: #CCCCCC;
}
.neutral-row td {
background: #F5F5F5;
color: #333333;
}
.likert-group {
margin-bottom: 1.5rem;
}
.likert-group .likert-q {
font-size: 0.9rem;
font-weight: 700;
color: #111111;
margin-bottom: 0.75rem;
line-height: 1.5;
}
.likert-group .likert-options {
display: flex;
}
.likert-group .likert-options label {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 0.3rem;
cursor: pointer;
}
.likert-group .likert-options label + label .likert-btn {
margin-left: -1px;
}
.likert-group .likert-options label input[type=radio] {
display: none;
}
.likert-group .likert-options label .likert-btn {
width: 100%;
padding: 0.55rem 0.2rem;
border: 1px solid #CCCCCC;
border-radius: 0;
text-align: center;
font-size: 0.9rem;
font-weight: 700;
color: #6E6E6E;
background: #FFFFFF;
}
.likert-group .likert-options label .likert-desc {
font-size: 0.65rem;
color: #6E6E6E;
text-align: center;
line-height: 1.2;
}
.likert-group .likert-options label input:checked + .likert-btn {
border-color: #111111;
background: #111111;
color: #FFFFFF;
position: relative;
z-index: 1;
}
.likert-group .likert-options label:hover .likert-btn {
border-color: #111111;
}
.open-textarea {
width: 100%;
padding: 0.8rem 1rem;
border: 1px solid #CCCCCC;
border-radius: 0;
font-size: 0.875rem;
font-family: inherit;
color: #111111;
background: #FFFFFF;
resize: vertical;
min-height: 100px;
}
.complete-screen {
text-align: center;
padding: 2rem 1rem;
}
.complete-screen .complete-icon {
font-size: 2.5rem;
margin-bottom: 1rem;
filter: grayscale(1);
}
.complete-screen .complete-title {
font-size: 1.5rem;
font-weight: 800;
letter-spacing: -0.02em;
margin-bottom: 0.5rem;
}
.complete-screen .complete-desc {
color: #6E6E6E;
font-size: 0.9rem;
margin-bottom: 2rem;
line-height: 1.7;
}
.json-output {
background: #FFFFFF;
color: #333333;
border: 1px solid #CCCCCC;
border-radius: 0;
padding: 1.2rem;
font-family: "Menlo", "Monaco", "Consolas", monospace;
font-size: 0.75rem;
line-height: 1.6;
text-align: left;
overflow-x: auto;
max-height: 400px;
overflow-y: auto;
white-space: pre;
margin-top: 1rem;
}
.divider {
height: 1px;
background: #CCCCCC;
margin: 1.5rem 0;
}
.text-muted {
color: #6E6E6E;
font-size: 0.85rem;
}
.text-center {
text-align: center;
}
.mt-1 {
margin-top: 0.5rem;
}
.mt-2 {
margin-top: 1rem;
}
.mt-3 {
margin-top: 1.5rem;
}
.mb-1 {
margin-bottom: 0.5rem;
}
.highlight-text {
color: #111111;
font-weight: 800;
}
@media (max-width: 600px) {
#app-header {
padding: 0 1rem;
}
.header-title {
font-size: 0.78rem;
}
.card {
padding: 1.2rem;
}
.step-instruction {
font-size: 0.95rem;
margin-bottom: 1.2rem;
}
.step-progress .step-dot .dot-label {
display: none;
}
.var-row .var-name {
min-width: 80px;
font-size: 0.76rem;
}
.ahp-pair-card .pair-criteria {
flex-direction: column;
text-align: center;
gap: 0.5rem;
}
.ahp-pair-card .pair-criteria .crit {
text-align: center !important;
}
.stats-grid {
grid-template-columns: repeat(2, 1fr);
}
.comparison-table-wrap table {
font-size: 0.75rem;
}
.comparison-table-wrap table td,
.comparison-table-wrap table th {
padding: 0.4rem 0.5rem;
}
.likert-group .likert-options label .likert-desc {
display: none;
}
.btn.btn-lg {
padding: 0.75rem 1.5rem;
font-size: 0.9rem;
}
}
@media (max-width: 380px) {
.step-progress .step-dot .dot-circle {
width: 22px;
height: 22px;
font-size: 0.65rem;
}
}