243 lines
5.3 KiB
CSS
243 lines
5.3 KiB
CSS
/* ═══ WING Design System ═══ */
|
|
/* 프로젝트 전체에서 공유하는 공통 컴포넌트 클래스 */
|
|
|
|
@layer components {
|
|
/* ── Layout ── */
|
|
.wing-panel {
|
|
@apply flex flex-col h-full overflow-hidden;
|
|
}
|
|
|
|
.wing-panel-scroll {
|
|
@apply flex-1 overflow-y-auto;
|
|
scrollbar-width: thin;
|
|
scrollbar-color: var(--stroke-light) transparent;
|
|
}
|
|
|
|
.wing-header-bar {
|
|
@apply flex items-center justify-between shrink-0 px-5 border-b border-stroke;
|
|
padding-top: 14px;
|
|
padding-bottom: 14px;
|
|
}
|
|
|
|
.wing-sidebar {
|
|
@apply flex flex-col border-r border-stroke;
|
|
background: var(--bg-surface);
|
|
}
|
|
|
|
/* ── Card / Section ── */
|
|
.wing-card {
|
|
@apply rounded-md p-4 border border-stroke;
|
|
background: var(--bg-card);
|
|
}
|
|
|
|
.wing-card-sm {
|
|
@apply rounded-sm p-3 border border-stroke;
|
|
background: var(--bg-card);
|
|
}
|
|
|
|
.wing-section {
|
|
@apply rounded-md p-4 mb-3 border border-stroke;
|
|
background: var(--bg-card);
|
|
}
|
|
|
|
.wing-section-header {
|
|
@apply text-title-4 font-bold font-korean mb-2;
|
|
}
|
|
|
|
.wing-section-desc {
|
|
@apply text-caption font-korean leading-relaxed;
|
|
color: var(--fg-disabled);
|
|
}
|
|
|
|
/* ── Typography ── */
|
|
.wing-title {
|
|
@apply text-subtitle font-bold font-korean;
|
|
}
|
|
|
|
.wing-subtitle {
|
|
@apply text-caption font-korean mt-0.5;
|
|
color: var(--fg-disabled);
|
|
}
|
|
|
|
.wing-label {
|
|
@apply text-label-2 font-semibold font-korean;
|
|
}
|
|
|
|
.wing-value {
|
|
@apply text-label-2 font-mono font-semibold;
|
|
}
|
|
|
|
.wing-meta {
|
|
@apply text-caption font-korean;
|
|
color: var(--fg-disabled);
|
|
}
|
|
|
|
/* ── Icon Badge ── */
|
|
.wing-icon-badge {
|
|
@apply w-10 h-10 rounded-md flex items-center justify-center text-lg;
|
|
}
|
|
|
|
.wing-icon-badge-sm {
|
|
@apply w-[38px] h-[38px] rounded-[9px] flex items-center justify-center;
|
|
}
|
|
|
|
/* ── Badge ── */
|
|
.wing-badge {
|
|
@apply inline-flex items-center px-2 py-0.5 rounded text-caption font-bold font-korean;
|
|
}
|
|
|
|
/* ── Button ── */
|
|
.wing-btn {
|
|
@apply px-3 py-1.5 rounded-sm text-label-2 font-semibold cursor-pointer font-korean border-none;
|
|
transition: all 0.15s;
|
|
}
|
|
|
|
.wing-btn-primary {
|
|
background: linear-gradient(135deg, var(--color-accent), var(--color-info));
|
|
color: #fff;
|
|
}
|
|
|
|
.wing-btn-primary:hover {
|
|
box-shadow: 0 0 16px rgba(6, 182, 212, 0.3);
|
|
}
|
|
|
|
.wing-btn-secondary {
|
|
@apply border border-stroke;
|
|
background: var(--bg-card);
|
|
color: var(--fg-sub);
|
|
}
|
|
|
|
.wing-btn-secondary:hover {
|
|
background: var(--bg-surface-hover);
|
|
}
|
|
|
|
.wing-btn-outline {
|
|
@apply bg-transparent border border-stroke;
|
|
color: var(--fg-sub);
|
|
}
|
|
|
|
.wing-btn-outline:hover {
|
|
background: var(--bg-surface-hover);
|
|
}
|
|
|
|
.wing-btn-pdf {
|
|
border: 1px solid rgba(59, 130, 246, 0.3);
|
|
background: rgba(59, 130, 246, 0.08);
|
|
color: var(--color-info);
|
|
}
|
|
|
|
.wing-btn-danger {
|
|
border: 1px solid rgba(239, 68, 68, 0.3);
|
|
background: rgba(239, 68, 68, 0.1);
|
|
color: var(--color-danger);
|
|
}
|
|
|
|
/* ── Input ── */
|
|
.wing-input {
|
|
@apply w-full rounded-sm text-label-2 font-korean outline-none;
|
|
padding: 6px 10px;
|
|
background: var(--bg-base);
|
|
border: 1px solid var(--stroke-default);
|
|
color: var(--fg-default);
|
|
}
|
|
|
|
.wing-input:focus {
|
|
border-color: var(--color-accent);
|
|
}
|
|
|
|
.wing-input::placeholder {
|
|
color: var(--fg-disabled);
|
|
}
|
|
|
|
/* ── Table ── */
|
|
.wing-table {
|
|
@apply w-full text-caption font-korean;
|
|
border-collapse: collapse;
|
|
}
|
|
|
|
.wing-th {
|
|
@apply text-left font-semibold;
|
|
padding: 8px 10px;
|
|
color: var(--fg-disabled);
|
|
background: var(--bg-elevated);
|
|
border-bottom: 1px solid var(--stroke-default);
|
|
}
|
|
|
|
.wing-td {
|
|
padding: 8px 10px;
|
|
color: var(--fg-sub);
|
|
border-bottom: 1px solid var(--stroke-default);
|
|
}
|
|
|
|
.wing-tr-hover:hover {
|
|
background: var(--bg-surface-hover);
|
|
cursor: pointer;
|
|
}
|
|
|
|
/* ── Tab Bar ── */
|
|
.wing-tab-bar {
|
|
@apply flex gap-0.5 rounded-lg p-1 border border-stroke;
|
|
background: var(--bg-card);
|
|
}
|
|
|
|
.wing-tab {
|
|
@apply flex-1 py-2 px-1 text-xs font-semibold rounded-md text-center cursor-pointer font-korean;
|
|
transition: all 0.15s;
|
|
color: var(--fg-disabled);
|
|
background: transparent;
|
|
border: 1px solid transparent;
|
|
}
|
|
|
|
.wing-tab:hover {
|
|
color: var(--fg-sub);
|
|
}
|
|
|
|
.wing-tab.active {
|
|
border-color: rgba(6, 182, 212, 0.3);
|
|
background: rgba(6, 182, 212, 0.08);
|
|
color: var(--color-accent);
|
|
}
|
|
|
|
/* ── Modal ── */
|
|
.wing-overlay {
|
|
@apply fixed inset-0 flex items-center justify-center;
|
|
z-index: 10000;
|
|
background: rgba(0, 0, 0, 0.7);
|
|
backdrop-filter: blur(4px);
|
|
}
|
|
|
|
.wing-modal {
|
|
@apply rounded-xl overflow-hidden;
|
|
background: var(--bg-surface);
|
|
border: 1px solid var(--stroke-default);
|
|
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
|
|
}
|
|
|
|
.wing-modal-header {
|
|
@apply flex items-center justify-between px-5 border-b border-stroke;
|
|
padding-top: 14px;
|
|
padding-bottom: 14px;
|
|
}
|
|
|
|
/* ── Utility ── */
|
|
.wing-divider {
|
|
@apply w-full;
|
|
height: 1px;
|
|
background: var(--stroke-default);
|
|
}
|
|
|
|
.wing-kv-row {
|
|
@apply flex items-center justify-between;
|
|
padding: 6px 0;
|
|
}
|
|
|
|
.wing-kv-label {
|
|
@apply text-caption font-korean;
|
|
color: var(--fg-disabled);
|
|
}
|
|
|
|
.wing-kv-value {
|
|
@apply text-label-2 font-semibold font-mono;
|
|
}
|
|
}
|