mirror of
https://github.com/headporter81/specialsource-homepage-frontend.git
synced 2026-08-08 15:21:11 +09:00
This commit is contained in:
+44
-20
@@ -6,10 +6,10 @@
|
||||
<span class="brand">SPECIALSOURCE.SYSTEM</span>
|
||||
|
||||
<select v-model="activeTheme" class="theme-selector">
|
||||
<option value="green">Green (기본)</option>
|
||||
<option value="amber">Amber (호박)</option>
|
||||
<option value="vga">Paper White (회색)</option>
|
||||
<option value="ega">EGA (청록)</option>
|
||||
<option value="green">P3_GREEN (기본)</option>
|
||||
<option value="amber">HERCULES (호박)</option>
|
||||
<option value="vga">VGA_GRAY (회색)</option>
|
||||
<option value="ega">EGA_CYAN (청록)</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@@ -157,8 +157,6 @@ const loginPw = ref('');
|
||||
|
||||
const activeMenu = ref('main');
|
||||
const authToken = ref(localStorage.getItem('token'));
|
||||
|
||||
// 🟢 [NEW] 활성화된 테마 상태 제어 변수 (green, amber, vga, ega)
|
||||
const activeTheme = ref('green');
|
||||
|
||||
const isProcessing = ref(false);
|
||||
@@ -182,7 +180,7 @@ const rawAscii = `
|
||||
╚════██║██╔═══╝ ██╔══╝ ██║ ██║██╔══██║██║
|
||||
███████║██║ ███████╗╚██████╗██║██║ ██║███████╗
|
||||
╚══════╝╚═╝ ╚══════╝ ╚═════╝╚═╝╚═╝ ╚═╝╚══════╝
|
||||
███████╗██████╗ ██╗ ██╗██████╗ ██████╗███████╗
|
||||
███████╗ ██████╗ ██╗ ██╗██████╗ ██████╗███████╗
|
||||
██╔════╝██╔═══██╗██║ ██║██╔══██╗██╔════╝██╔════╝
|
||||
███████╗██║ ██║██║ ██║██████╔╝██║ █████╗
|
||||
╚════██║██║ ██║██║ ██║██╔══██╗██║ ██╔══╝
|
||||
@@ -258,6 +256,7 @@ const triggerOverlayProcess = (durationMs, initialMsg) => {
|
||||
}, stepTime);
|
||||
};
|
||||
|
||||
// 🟢 [보안 & 할당량 디버그 강화] 유튜브 로드 모듈
|
||||
const apiKey = 'AIzaSyD51LHwqoY8spjq6rsY_RlhBXzb96j7D6o';
|
||||
const channelId = 'UC8L92ju0V88s6TcmLPb8Bkg';
|
||||
const maxResults = 8;
|
||||
@@ -266,8 +265,42 @@ const apiUrl = `https://www.googleapis.com/youtube/v3/search?part=snippet&channe
|
||||
const fetchVideos = async () => {
|
||||
try {
|
||||
const res = await axios.get(apiUrl);
|
||||
videos.value = res.data.items || [];
|
||||
} catch (err) { console.error("유튜브 로드 실패:", err); }
|
||||
if (res.data && res.data.items && res.data.items.length > 0) {
|
||||
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}`);
|
||||
@@ -343,7 +376,7 @@ const handleLoginSubmit = async () => {
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
fetchVideos();
|
||||
fetchVideos(); // 초기에 무조건 작동
|
||||
|
||||
const globaljQuery = window.$;
|
||||
if (globaljQuery && terminalRef.value) {
|
||||
@@ -380,29 +413,24 @@ onMounted(() => {
|
||||
font-family: 'JetBrains Mono', monospace !important;
|
||||
}
|
||||
|
||||
/* 🌟 [테마 마스터 서버 변수 선언] */
|
||||
/* 🟢 테마 1: 오리지널 P3 녹색 인광 시스템 */
|
||||
.theme-green {
|
||||
--tui-color: #00ff00;
|
||||
--tui-dim: #008800;
|
||||
--tui-glow: rgba(0, 255, 0, 0.6);
|
||||
--tui-border: rgba(0, 255, 0, 0.2);
|
||||
}
|
||||
/* 🟠 테마 2: 추억의 허큘리스 플라즈마 호박색(Amber) 단색 시스템 */
|
||||
.theme-amber {
|
||||
--tui-color: #ffb000;
|
||||
--tui-dim: #aa6600;
|
||||
--tui-glow: rgba(255, 176, 0, 0.6);
|
||||
--tui-border: rgba(255, 176, 0, 0.2);
|
||||
}
|
||||
/* ⚪ 테마 3: IBM 오리지널 VGA 단색 회색/흰색 시스템 */
|
||||
.theme-vga {
|
||||
--tui-color: #e2e8f0;
|
||||
--tui-dim: #718096;
|
||||
--tui-glow: rgba(226, 232, 240, 0.4);
|
||||
--tui-border: rgba(226, 232, 240, 0.2);
|
||||
}
|
||||
/* 🔵 테마 4: 화려한 레트로 사이버 청록색(CGA/EGA Cyan) 시스템 */
|
||||
.theme-ega {
|
||||
--tui-color: #00ffff;
|
||||
--tui-dim: #008b8b;
|
||||
@@ -412,7 +440,6 @@ onMounted(() => {
|
||||
</style>
|
||||
|
||||
<style scoped>
|
||||
/* 하단 임베디드 터미널 내부 컬러까지 실시간 매핑 연동 */
|
||||
:deep(.terminal), :deep(.terminal span) {
|
||||
--color: var(--tui-color) !important;
|
||||
text-shadow: 0 0 5px var(--tui-glow) !important;
|
||||
@@ -420,13 +447,12 @@ onMounted(() => {
|
||||
|
||||
.homepage-wrapper {
|
||||
background-color: #050505;
|
||||
color: var(--tui-color); /* 덮어쓰기 */
|
||||
color: var(--tui-color);
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/* 🟢 [NEW] GNB 테마 셀렉터 스타일 */
|
||||
.theme-selector {
|
||||
background: #111;
|
||||
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;}
|
||||
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; }
|
||||
|
||||
/* 🌟 [복구 시점 고정] 부활 연출 이후 최종 색상도 선택한 테마 변수(--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; }
|
||||
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;}
|
||||
|
||||
Reference in New Issue
Block a user