kintex/stitch_kintex_ai_system_architect/scr_a6/code.html
zio c3a695d70c feat(stitch): harvest all 39 pending screens (64/64 secured)
- Web core SCR-22/23/25-27/29/30/32-50 (26), admin A5/A6/A8/A9, public P1-P7, mobile M15
- +5 supplementary variants (P4 3-step, P7 manage, M15 ticket-select), 43 files, 0 failures
- All delayed generations recovered server-side (project 27 -> 155 screens), no regeneration needed
- WORK_STATUS: stitch 64/64 + real-data/2FA track close-out recorded

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 03:27:05 +09:00

443 lines
24 KiB
HTML

<!DOCTYPE html>
<html class="light" lang="ko"><head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>KINTEX AI 전시관리 - 시스템 설정</title>
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&amp;family=Geist:wght@400;500;600&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<script id="tailwind-config">
tailwind.config = {
darkMode: "class",
theme: {
extend: {
"colors": {
"tertiary-fixed": "#8ef7c4",
"on-tertiary-container": "#8ef7c3",
"surface-container-lowest": "#ffffff",
"secondary-fixed": "#e5deff",
"secondary-container": "#6d4aff",
"surface-variant": "#dbe2f9",
"on-surface-variant": "#414751",
"error-container": "#ffdad6",
"on-secondary-fixed": "#1b0063",
"on-secondary-container": "#f3edff",
"inverse-primary": "#a2c9ff",
"inverse-on-surface": "#edf0ff",
"surface": "#f9f9ff",
"surface-dim": "#d2daf0",
"surface-bright": "#f9f9ff",
"on-secondary-fixed-variant": "#4500d8",
"tertiary-container": "#00734e",
"secondary": "#5427e6",
"outline-variant": "#c1c7d3",
"tertiary-fixed-dim": "#72daa9",
"error": "#ba1a1a",
"surface-tint": "#0060a9",
"on-tertiary": "#ffffff",
"on-error-container": "#93000a",
"surface-container-highest": "#dbe2f9",
"on-primary": "#ffffff",
"on-error": "#ffffff",
"inverse-surface": "#293041",
"primary-container": "#0066b3",
"on-primary-container": "#d2e3ff",
"secondary-fixed-dim": "#c9bfff",
"on-tertiary-fixed-variant": "#005236",
"on-primary-fixed": "#001c38",
"on-surface": "#141b2c",
"surface-container-low": "#f1f3ff",
"surface-container-high": "#e0e8ff",
"on-tertiary-fixed": "#002113",
"primary": "#004e8b",
"background": "#f9f9ff",
"on-secondary": "#ffffff",
"on-primary-fixed-variant": "#004881",
"primary-fixed": "#d3e4ff",
"tertiary": "#00583b",
"surface-container": "#e9edff",
"primary-fixed-dim": "#a2c9ff",
"outline": "#717782",
"on-background": "#141b2c"
},
"borderRadius": {
"DEFAULT": "0.125rem",
"lg": "0.25rem",
"xl": "0.5rem",
"full": "0.75rem"
},
"spacing": {
"gutter": "16px",
"base": "4px",
"container-padding": "24px",
"stack-md": "16px",
"stack-lg": "24px",
"stack-sm": "8px"
},
"fontFamily": {
"display-lg": ["Inter"],
"title-sm": ["Inter"],
"body-base": ["Inter"],
"label-md": ["Geist"],
"body-sm": ["Inter"],
"label-xs": ["Geist"],
"headline-md": ["Inter"]
},
"fontSize": {
"display-lg": ["36px", {"lineHeight": "44px", "letterSpacing": "-0.02em", "fontWeight": "700"}],
"title-sm": ["18px", {"lineHeight": "28px", "fontWeight": "600"}],
"body-base": ["14px", {"lineHeight": "20px", "fontWeight": "400"}],
"label-md": ["12px", {"lineHeight": "16px", "letterSpacing": "0.02em", "fontWeight": "600"}],
"body-sm": ["13px", {"lineHeight": "18px", "fontWeight": "400"}],
"label-xs": ["11px", {"lineHeight": "14px", "fontWeight": "500"}],
"headline-md": ["24px", {"lineHeight": "32px", "fontWeight": "600"}]
}
},
},
}
</script>
<style>
.material-symbols-outlined {
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
}
.form-input-focus:focus {
outline: none;
border-color: #0066b3;
box-shadow: 0 0 0 2px rgba(0, 102, 179, 0.1);
}
.switch-input:checked + .switch-slider {
background-color: #0066b3;
}
.switch-input:checked + .switch-slider:before {
transform: translateX(1.25rem);
}
.glass-panel {
background: rgba(255, 255, 255, 0.8);
backdrop-filter: blur(8px);
}
</style>
</head>
<body class="bg-background text-on-surface font-body-base overflow-hidden">
<!-- Sidebar Navigation -->
<aside class="fixed left-0 top-0 h-full w-64 bg-surface border-r border-outline-variant flex flex-col py-stack-lg z-50">
<div class="px-6 mb-10">
<img alt="KINTEX AI System Logo" class="h-8 w-auto object-contain" src="https://lh3.googleusercontent.com/aida-public/AB6AXuDD5aGyo0LgtHc0bBQT2HV96NhrJKignZ66GoODx90BlGkjgcgzPNEAxwMcJmp9Jg4906Tmu3XDPWG7GJyRL7jAHzSGdSEs9sUsmb_P2ELY-MNEjaFXDCC0CGNoiL6Uk2lwU8rk2P2pbritLEa0CjF6QFsLNFcsQ6DN8VZSCVU5ePGHdnKuQMI8N2UZkCAgQYOkKLbzgWMD_OB5tPopOfKnYmhwMrVboYG8_EGRQCvMe1YcXoTResTl3AJQrDxY6V8m-ye0Cby_KR4"/>
<div class="mt-4">
<h1 class="font-headline-md text-headline-md font-bold text-primary">KINTEX AI</h1>
<p class="font-label-md text-label-md text-on-surface-variant uppercase tracking-wider">전시관리</p>
</div>
</div>
<nav class="flex-1 px-3 space-y-1">
<a class="flex items-center px-4 py-3 text-on-surface-variant hover:bg-surface-container-high transition-colors rounded-lg group" href="#">
<span class="material-symbols-outlined mr-3">dashboard</span>
<span class="font-body-base">Dashboard</span>
</a>
<a class="flex items-center px-4 py-3 text-on-surface-variant hover:bg-surface-container-high transition-colors rounded-lg group" href="#">
<span class="material-symbols-outlined mr-3">calendar_today</span>
<span class="font-body-base">Exhibition Schedule</span>
</a>
<a class="flex items-center px-4 py-3 text-on-surface-variant hover:bg-surface-container-high transition-colors rounded-lg group" href="#">
<span class="material-symbols-outlined mr-3">domain</span>
<span class="font-body-base">Hall Operations</span>
</a>
<a class="flex items-center px-4 py-3 text-primary font-bold border-r-4 border-primary bg-surface-container-high transition-colors group" href="#">
<span class="material-symbols-outlined mr-3">settings</span>
<span class="font-body-base">System Settings</span>
</a>
</nav>
<div class="px-6 mt-auto">
<div class="p-4 bg-surface-container-low rounded-xl border border-outline-variant">
<div class="flex items-center mb-2">
<span class="material-symbols-outlined text-secondary mr-2" style="font-variation-settings: 'FILL' 1;">auto_awesome</span>
<span class="font-label-md text-secondary">AI Status</span>
</div>
<div class="text-xs text-on-surface-variant">System Optimal</div>
<div class="w-full bg-outline-variant h-1 mt-2 rounded-full overflow-hidden">
<div class="bg-secondary h-full w-[88%]"></div>
</div>
</div>
</div>
</aside>
<!-- Top Navigation Bar -->
<header class="fixed top-0 left-64 right-0 h-16 bg-surface border-b border-outline-variant flex justify-between items-center px-container-padding z-40">
<div class="flex items-center space-x-6">
<h2 class="font-title-sm text-title-sm text-on-surface font-extrabold">KINTEX AI 전시관리</h2>
<div class="relative">
<span class="material-symbols-outlined absolute left-3 top-1/2 -translate-y-1/2 text-outline">search</span>
<input class="pl-10 pr-4 py-1.5 bg-surface-container-low border border-outline-variant rounded-full text-body-sm w-64 focus:ring-2 focus:ring-primary-container outline-none transition-all" placeholder="설정 검색..." type="text"/>
</div>
</div>
<div class="flex items-center space-x-4">
<button class="p-2 text-on-surface-variant hover:bg-surface-container-high rounded-full transition-colors relative">
<span class="material-symbols-outlined">notifications</span>
<span class="absolute top-2 right-2 w-2 h-2 bg-error rounded-full border-2 border-surface"></span>
</button>
<button class="p-2 text-on-surface-variant hover:bg-surface-container-high rounded-full transition-colors">
<span class="material-symbols-outlined">help_outline</span>
</button>
<div class="h-8 w-[1px] bg-outline-variant mx-2"></div>
<div class="flex items-center space-x-3 pl-2">
<div class="text-right">
<p class="font-label-md text-on-surface leading-tight">Admin User</p>
<p class="font-label-xs text-on-surface-variant">System Manager</p>
</div>
<div class="w-10 h-10 rounded-full bg-primary-fixed flex items-center justify-center border border-primary-container">
<span class="material-symbols-outlined text-primary">person</span>
</div>
</div>
</div>
</header>
<!-- Main Content Canvas -->
<main class="ml-64 mt-16 p-container-padding h-[calc(100vh-4rem)] overflow-y-auto">
<div class="max-w-6xl mx-auto">
<div class="mb-stack-lg">
<h3 class="font-display-lg text-display-lg text-on-surface">System Settings</h3>
<p class="text-on-surface-variant font-body-base">전시 지원 시스템의 글로벌 정책 및 AI 엔진 파라미터를 관리합니다.</p>
</div>
<!-- Bento Grid Settings Layout -->
<div class="grid grid-cols-12 gap-gutter">
<!-- Deadline Policy Card -->
<div class="col-span-12 lg:col-span-7 bg-white rounded-xl border border-outline-variant overflow-hidden flex flex-col group">
<div class="h-1 bg-primary w-full"></div>
<div class="p-stack-lg flex-1">
<div class="flex justify-between items-start mb-6">
<div>
<h4 class="font-title-sm text-title-sm text-on-surface">마감 정책 (Deadline Policy)</h4>
<p class="text-label-md text-on-surface-variant">전시회 주요 마일스톤 자동 설정</p>
</div>
<span class="material-symbols-outlined text-outline">event_available</span>
</div>
<div class="grid grid-cols-2 gap-4">
<div class="space-y-2">
<label class="font-label-md text-on-surface-variant">Utility 신청 마감 (Days)</label>
<div class="relative">
<input class="w-full px-4 py-2 border border-outline-variant rounded-lg font-body-base form-input-focus transition-all pr-12" type="number" value="25"/>
<span class="absolute right-4 top-1/2 -translate-y-1/2 text-label-md text-outline font-bold">D-</span>
</div>
</div>
<div class="space-y-2">
<label class="font-label-md text-on-surface-variant">제출 서류 마감 (Days)</label>
<div class="relative">
<input class="w-full px-4 py-2 border border-outline-variant rounded-lg font-body-base form-input-focus transition-all pr-12" type="number" value="7"/>
<span class="absolute right-4 top-1/2 -translate-y-1/2 text-label-md text-outline font-bold">D-</span>
</div>
</div>
<div class="space-y-2">
<label class="font-label-md text-on-surface-variant">부스 배치 확정 (Days)</label>
<div class="relative">
<input class="w-full px-4 py-2 border border-outline-variant rounded-lg font-body-base form-input-focus transition-all pr-12" type="number" value="45"/>
<span class="absolute right-4 top-1/2 -translate-y-1/2 text-label-md text-outline font-bold">D-</span>
</div>
</div>
<div class="space-y-2">
<label class="font-label-md text-on-surface-variant">추가 전력 승인 (Days)</label>
<div class="relative">
<input class="w-full px-4 py-2 border border-outline-variant rounded-lg font-body-base form-input-focus transition-all pr-12" type="number" value="14"/>
<span class="absolute right-4 top-1/2 -translate-y-1/2 text-label-md text-outline font-bold">D-</span>
</div>
</div>
</div>
</div>
<div class="bg-surface-container-low px-stack-lg py-4 flex justify-end">
<button class="px-6 py-2 bg-primary text-white font-label-md rounded-lg hover:opacity-90 transition-all flex items-center">
<span class="material-symbols-outlined text-sm mr-2">save</span>
저장
</button>
</div>
</div>
<!-- AI Platform Gate Card -->
<div class="col-span-12 lg:col-span-5 bg-white rounded-xl border border-secondary-container border-opacity-30 overflow-hidden flex flex-col relative">
<div class="h-1 bg-secondary w-full"></div>
<div class="p-stack-lg flex-1">
<div class="flex justify-between items-start mb-6">
<div>
<div class="flex items-center gap-2">
<h4 class="font-title-sm text-title-sm text-on-surface">AI 플랫폼 게이트</h4>
<span class="material-symbols-outlined text-secondary text-sm" style="font-variation-settings: 'FILL' 1;">auto_awesome</span>
</div>
<p class="text-label-md text-on-surface-variant">모델 라우팅 및 처리 엔진 제어</p>
</div>
</div>
<div class="space-y-4">
<div class="flex items-center justify-between p-3 border border-outline-variant rounded-lg bg-surface-container-lowest">
<div>
<p class="font-label-md text-on-surface">Model Router Status</p>
<p class="text-xs text-on-surface-variant">Active Load Balancing</p>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input checked="" class="sr-only peer switch-input" type="checkbox"/>
<div class="w-11 h-6 bg-outline-variant peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-secondary"></div>
</label>
</div>
<div class="flex items-center justify-between p-3 border border-outline-variant rounded-lg bg-surface-container-lowest">
<div>
<p class="font-label-md text-on-surface">Spatial Layout Engine</p>
<p class="text-xs text-on-surface-variant">Auto Booth Placement</p>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input checked="" class="sr-only peer switch-input" type="checkbox"/>
<div class="w-11 h-6 bg-outline-variant peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-secondary"></div>
</label>
</div>
<div class="flex items-center justify-between p-3 border border-outline-variant rounded-lg bg-surface-container-lowest">
<div>
<p class="font-label-md text-on-surface">Risk Analysis Engine</p>
<p class="text-xs text-on-surface-variant">Safety Regulation Check</p>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input class="sr-only peer switch-input" type="checkbox"/>
<div class="w-11 h-6 bg-outline-variant peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-secondary"></div>
</label>
</div>
</div>
</div>
<div class="bg-surface-container-low px-stack-lg py-4 flex justify-end">
<button class="px-6 py-2 bg-secondary text-white font-label-md rounded-lg hover:opacity-90 transition-all flex items-center">
<span class="material-symbols-outlined text-sm mr-2">refresh</span>
갱신
</button>
</div>
</div>
<!-- Notification Settings Card -->
<div class="col-span-12 lg:col-span-4 bg-white rounded-xl border border-outline-variant overflow-hidden flex flex-col">
<div class="h-1 bg-tertiary-container w-full"></div>
<div class="p-stack-lg flex-1">
<div class="flex justify-between items-start mb-6">
<div>
<h4 class="font-title-sm text-title-sm text-on-surface">알림 설정</h4>
<p class="text-label-md text-on-surface-variant">전시 관리자 채널별 알림 제어</p>
</div>
<span class="material-symbols-outlined text-tertiary">notifications_active</span>
</div>
<ul class="space-y-4">
<li class="flex items-center justify-between group">
<div class="flex items-center gap-3">
<span class="material-symbols-outlined text-on-surface-variant group-hover:text-tertiary transition-colors">mail</span>
<span class="font-body-base">이메일 (Email)</span>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input checked="" class="sr-only peer" type="checkbox"/>
<div class="w-10 h-5 bg-outline-variant rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all peer-checked:bg-tertiary-container"></div>
</label>
</li>
<li class="flex items-center justify-between group">
<div class="flex items-center gap-3">
<span class="material-symbols-outlined text-on-surface-variant group-hover:text-tertiary transition-colors">sync_alt</span>
<span class="font-body-base">웹소켓 (WebSocket)</span>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input checked="" class="sr-only peer" type="checkbox"/>
<div class="w-10 h-5 bg-outline-variant rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all peer-checked:bg-tertiary-container"></div>
</label>
</li>
<li class="flex items-center justify-between group">
<div class="flex items-center gap-3">
<span class="material-symbols-outlined text-on-surface-variant group-hover:text-tertiary transition-colors">send_to_mobile</span>
<span class="font-body-base">푸시 알림 (Push)</span>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input class="sr-only peer" type="checkbox"/>
<div class="w-10 h-5 bg-outline-variant rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all peer-checked:bg-tertiary-container"></div>
</label>
</li>
</ul>
</div>
<div class="bg-surface-container-low px-stack-lg py-4 flex justify-end">
<button class="px-6 py-2 bg-tertiary-container text-white font-label-md rounded-lg hover:opacity-90 transition-all">저장</button>
</div>
</div>
<!-- Security & Account Card -->
<div class="col-span-12 lg:col-span-8 bg-white rounded-xl border border-outline-variant overflow-hidden flex flex-col">
<div class="h-1 bg-error w-full"></div>
<div class="p-stack-lg flex-1">
<div class="flex justify-between items-start mb-6">
<div>
<h4 class="font-title-sm text-title-sm text-on-surface">보안 및 계정 (Security &amp; Account)</h4>
<p class="text-label-md text-on-surface-variant">시스템 접근 권한 및 보안 임계값 설정</p>
</div>
<span class="material-symbols-outlined text-error">lock_reset</span>
</div>
<div class="grid grid-cols-2 gap-8">
<div class="space-y-4">
<div class="space-y-2">
<label class="font-label-md text-on-surface-variant">로그인 실패 잠금 임계치</label>
<div class="flex items-center gap-3">
<input class="flex-1 accent-error" max="10" min="3" type="range" value="5"/>
<span class="w-8 text-center font-bold text-on-surface">5</span>
</div>
<p class="text-[10px] text-on-surface-variant">회 연속 실패 시 계정이 30분간 잠금 처리됩니다.</p>
</div>
<div class="space-y-2">
<label class="font-label-md text-on-surface-variant">세션 타임아웃 (Minutes)</label>
<input class="w-full px-4 py-2 border border-outline-variant rounded-lg font-body-base form-input-focus transition-all" type="number" value="120"/>
</div>
</div>
<div class="space-y-4 border-l border-outline-variant pl-8">
<div class="p-3 bg-error-container bg-opacity-30 rounded-lg border border-error border-opacity-10">
<p class="font-label-md text-error flex items-center">
<span class="material-symbols-outlined text-sm mr-1">warning</span>
중요 보안 경고
</p>
<p class="text-[11px] text-on-surface-variant mt-1 leading-relaxed">
비활성 세션의 자동 종료 시간이 4시간을 초과하면 보안 취약성이 증가할 수 있습니다. 120분 이내를 권장합니다.
</p>
</div>
<div class="flex items-center gap-3">
<input class="rounded border-outline-variant text-error focus:ring-error" id="mfa" type="checkbox"/>
<label class="font-body-base text-on-surface" for="mfa">관리자 2단계 인증(MFA) 강제</label>
</div>
</div>
</div>
</div>
<div class="bg-surface-container-low px-stack-lg py-4 flex justify-end">
<button class="px-6 py-2 border border-error text-error hover:bg-error hover:text-white font-label-md rounded-lg transition-all">보안 정책 업데이트</button>
</div>
</div>
</div>
<!-- Bottom Floating Action State (Optional Contextual Info) -->
<div class="mt-stack-lg p-stack-lg border border-outline-variant rounded-xl glass-panel flex items-center justify-between">
<div class="flex items-center gap-4">
<div class="w-12 h-12 bg-surface-container-high rounded-full flex items-center justify-center">
<span class="material-symbols-outlined text-primary">history</span>
</div>
<div>
<p class="font-label-md text-on-surface">마지막 변경 사항</p>
<p class="text-xs text-on-surface-variant">2023-11-20 14:32:01 (Admin: 김관리)</p>
</div>
</div>
<div class="flex gap-3">
<button class="px-4 py-2 text-primary font-label-md hover:bg-primary-fixed rounded-lg transition-colors">설정 로그 보기</button>
<button class="px-4 py-2 bg-primary text-white font-label-md rounded-lg shadow-sm">전체 초기화</button>
</div>
</div>
</div>
</main>
<!-- Simple Feedback Toast (Hidden by default) -->
<div class="fixed bottom-8 right-8 bg-inverse-surface text-inverse-on-surface px-6 py-3 rounded-lg shadow-xl translate-y-20 opacity-0 transition-all flex items-center gap-3" id="toast">
<span class="material-symbols-outlined text-tertiary-fixed">check_circle</span>
<span class="font-label-md">설정이 성공적으로 저장되었습니다.</span>
</div>
<script>
// Micro-interactions for buttons
document.querySelectorAll('button').forEach(btn => {
btn.addEventListener('click', function() {
const toast = document.getElementById('toast');
if (this.textContent.includes('저장') || this.textContent.includes('업데이트')) {
toast.classList.remove('translate-y-20', 'opacity-0');
setTimeout(() => {
toast.classList.add('translate-y-20', 'opacity-0');
}, 3000);
}
});
});
// Range input dynamic value display
const range = document.querySelector('input[type="range"]');
const rangeVal = range.nextElementSibling;
range.addEventListener('input', (e) => {
rangeVal.textContent = e.target.value;
});
</script>
</body></html>