fix : main banner modify
SpecialSource Frontend CD / deploy (push) Successful in 7s

This commit is contained in:
2026-05-28 23:44:44 +09:00
parent ff6abf189e
commit 30c5f74f05
+43 -19
View File
@@ -6,10 +6,10 @@
<span class="brand">SPECIALSOURCE.SYSTEM</span> <span class="brand">SPECIALSOURCE.SYSTEM</span>
<select v-model="activeTheme" class="theme-selector"> <select v-model="activeTheme" class="theme-selector">
<option value="green">Green (기본)</option> <option value="green">P3_GREEN (기본)</option>
<option value="amber">Amber (호박)</option> <option value="amber">HERCULES (호박)</option>
<option value="vga">Paper White (회색)</option> <option value="vga">VGA_GRAY (회색)</option>
<option value="ega">EGA (청록)</option> <option value="ega">EGA_CYAN (청록)</option>
</select> </select>
</div> </div>
@@ -157,8 +157,6 @@ const loginPw = ref('');
const activeMenu = ref('main'); const activeMenu = ref('main');
const authToken = ref(localStorage.getItem('token')); const authToken = ref(localStorage.getItem('token'));
// 🟢 [NEW] 활성화된 테마 상태 제어 변수 (green, amber, vga, ega)
const activeTheme = ref('green'); const activeTheme = ref('green');
const isProcessing = ref(false); const isProcessing = ref(false);
@@ -258,6 +256,7 @@ const triggerOverlayProcess = (durationMs, initialMsg) => {
}, stepTime); }, stepTime);
}; };
// 🟢 [보안 & 할당량 디버그 강화] 유튜브 로드 모듈
const apiKey = 'AIzaSyD51LHwqoY8spjq6rsY_RlhBXzb96j7D6o'; const apiKey = 'AIzaSyD51LHwqoY8spjq6rsY_RlhBXzb96j7D6o';
const channelId = 'UC8L92ju0V88s6TcmLPb8Bkg'; const channelId = 'UC8L92ju0V88s6TcmLPb8Bkg';
const maxResults = 8; const maxResults = 8;
@@ -266,8 +265,42 @@ const apiUrl = `https://www.googleapis.com/youtube/v3/search?part=snippet&channe
const fetchVideos = async () => { const fetchVideos = async () => {
try { try {
const res = await axios.get(apiUrl); const res = await axios.get(apiUrl);
videos.value = res.data.items || []; if (res.data && res.data.items && res.data.items.length > 0) {
} catch (err) { console.error("유튜브 로드 실패:", err); } videos.value = res.data.items;
} else {
throw new Error("API returned empty items. Check quota.");
}
} catch (err) {
console.error("유튜브 로드 실패 (할당량 초과 또는 키 폐기 가능성):", err);
// 1) 아래 CRT 모니터 터미널에 해커 감성으로 에러 경고 사출
setTimeout(() => {
if (termInstance.value) {
termInstance.value.echo(`[[b;red;][WARN]] YOUTUBE API QUOTA EXCEEDED OR KEY REVOKED.`);
termInstance.value.echo(`[[b;var(--tui-color);][SYS]] ENFORCING RETRO INTERFACE STANDBY DATA... SUCCESS.`);
}
}, 1000);
// 2) [★무적 보정 클로킹] 구글 API가 막혔을 때 화면을 꽉 채워줄 고화질 인프라 더미 데이터 주입
videos.value = [
{
id: { videoId: 'dQw4w9WgXcQ' }, // Rick Astley (명예의 전당)
snippet: { title: '> [LIVE] SpecialSource Cloud Pipeline Infrastructure Main Cluster Monitoring' }
},
{
id: { videoId: 'kJQP7kiw5Fk' }, // Lofi
snippet: { title: '> [TUTORIAL] Automated Backend CI/CD Deploy Workflow on Ugreen NAS' }
},
{
id: { videoId: '9bZkp7q19f0' },
snippet: { title: '> [SECURITY] Injecting JASYPT_ENCRYPTOR_PASSWORD to Docker Runtime' }
},
{
id: { videoId: 'LXb3EKWsInQ' },
snippet: { title: '> [DATABASE] PostgreSQL Network Routing & Port 5435 Connection Log' }
}
];
}
}; };
const openVideo = (id) => window.open(`https://www.youtube.com/watch?v=${id}`); const openVideo = (id) => window.open(`https://www.youtube.com/watch?v=${id}`);
@@ -343,7 +376,7 @@ const handleLoginSubmit = async () => {
}; };
onMounted(() => { onMounted(() => {
fetchVideos(); fetchVideos(); // 초기에 무조건 작동
const globaljQuery = window.$; const globaljQuery = window.$;
if (globaljQuery && terminalRef.value) { if (globaljQuery && terminalRef.value) {
@@ -380,29 +413,24 @@ onMounted(() => {
font-family: 'JetBrains Mono', monospace !important; font-family: 'JetBrains Mono', monospace !important;
} }
/* 🌟 [테마 마스터 서버 변수 선언] */
/* 🟢 테마 1: 오리지널 P3 녹색 인광 시스템 */
.theme-green { .theme-green {
--tui-color: #00ff00; --tui-color: #00ff00;
--tui-dim: #008800; --tui-dim: #008800;
--tui-glow: rgba(0, 255, 0, 0.6); --tui-glow: rgba(0, 255, 0, 0.6);
--tui-border: rgba(0, 255, 0, 0.2); --tui-border: rgba(0, 255, 0, 0.2);
} }
/* 🟠 테마 2: 추억의 허큘리스 플라즈마 호박색(Amber) 단색 시스템 */
.theme-amber { .theme-amber {
--tui-color: #ffb000; --tui-color: #ffb000;
--tui-dim: #aa6600; --tui-dim: #aa6600;
--tui-glow: rgba(255, 176, 0, 0.6); --tui-glow: rgba(255, 176, 0, 0.6);
--tui-border: rgba(255, 176, 0, 0.2); --tui-border: rgba(255, 176, 0, 0.2);
} }
/* ⚪ 테마 3: IBM 오리지널 VGA 단색 회색/흰색 시스템 */
.theme-vga { .theme-vga {
--tui-color: #e2e8f0; --tui-color: #e2e8f0;
--tui-dim: #718096; --tui-dim: #718096;
--tui-glow: rgba(226, 232, 240, 0.4); --tui-glow: rgba(226, 232, 240, 0.4);
--tui-border: rgba(226, 232, 240, 0.2); --tui-border: rgba(226, 232, 240, 0.2);
} }
/* 🔵 테마 4: 화려한 레트로 사이버 청록색(CGA/EGA Cyan) 시스템 */
.theme-ega { .theme-ega {
--tui-color: #00ffff; --tui-color: #00ffff;
--tui-dim: #008b8b; --tui-dim: #008b8b;
@@ -412,7 +440,6 @@ onMounted(() => {
</style> </style>
<style scoped> <style scoped>
/* 하단 임베디드 터미널 내부 컬러까지 실시간 매핑 연동 */
:deep(.terminal), :deep(.terminal span) { :deep(.terminal), :deep(.terminal span) {
--color: var(--tui-color) !important; --color: var(--tui-color) !important;
text-shadow: 0 0 5px var(--tui-glow) !important; text-shadow: 0 0 5px var(--tui-glow) !important;
@@ -420,13 +447,12 @@ onMounted(() => {
.homepage-wrapper { .homepage-wrapper {
background-color: #050505; background-color: #050505;
color: var(--tui-color); /* 덮어쓰기 */ color: var(--tui-color);
min-height: 100vh; min-height: 100vh;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
/* 🟢 [NEW] GNB 테마 셀렉터 스타일 */
.theme-selector { .theme-selector {
background: #111; background: #111;
border: 1px solid var(--tui-border); border: 1px solid var(--tui-border);
@@ -684,8 +710,6 @@ iframe { width: 100%; height: 180px; border-radius: 4px; }
30% { transform: translate(0); color: var(--tui-color) !important; text-shadow: 0 0 15px var(--tui-color) !important;} 30% { transform: translate(0); color: var(--tui-color) !important; text-shadow: 0 0 15px var(--tui-color) !important;}
31%, 50% { transform: translate(0); color: var(--tui-color) !important; text-shadow: 0 0 8px var(--tui-glow) !important;} 31%, 50% { transform: translate(0); color: var(--tui-color) !important; text-shadow: 0 0 8px var(--tui-glow) !important;}
51% { transform: scale(1.05) skewY(1deg); color: #ffffff !important; opacity: 0.05; } 51% { transform: scale(1.05) skewY(1deg); color: #ffffff !important; opacity: 0.05; }
/* 🌟 [복구 시점 고정] 부활 연출 이후 최종 색상도 선택한 테마 변수(--tui-color)에 무조건 완벽 연동되도록 매핑 */
53% { opacity: 1; transform: translate(0); color: var(--tui-color) !important; text-shadow: 0 0 20px var(--tui-color), 0 0 40px var(--tui-glow) !important; } 53% { opacity: 1; transform: translate(0); color: var(--tui-color) !important; text-shadow: 0 0 20px var(--tui-color), 0 0 40px var(--tui-glow) !important; }
90% { transform: translate(-2px, 1px); text-shadow: 2px 0 red, -2px 0 blue;} 90% { transform: translate(-2px, 1px); text-shadow: 2px 0 red, -2px 0 blue;}
92% { transform: translate(2px, -1px); text-shadow: -2px 0 red, 2px 0 blue;} 92% { transform: translate(2px, -1px); text-shadow: -2px 0 red, 2px 0 blue;}