From 7b0d900bdb4bf88739d7c70549d6d55e0b2e7d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=9D=98=EC=97=B0?= Date: Wed, 25 Mar 2026 17:26:16 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B4=88=EA=B8=B0=20=EC=BB=A4=EB=B0=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 63 + .gitignore | 363 +++ SYSTEM_SPEC.md | 228 ++ Tornado3_2026Election.slnx | 13 + Tornado3_2026Election/App.xaml | 86 + Tornado3_2026Election/App.xaml.cs | 52 + Tornado3_2026Election/Assets/AppIcon.ico | Bin 0 -> 5661 bytes Tornado3_2026Election/Assets/AppIcon.png | Bin 0 -> 12378 bytes .../Assets/ElectionSealIcon.svg | 7 + .../Assets/LockScreenLogo.png | Bin 0 -> 576 bytes .../Assets/LockScreenLogo.scale-200.png | Bin 0 -> 1049 bytes Tornado3_2026Election/Assets/SplashScreen.png | Bin 0 -> 6827 bytes .../Assets/SplashScreen.scale-200.png | Bin 0 -> 14880 bytes .../Assets/Square150x150Logo.png | Bin 0 -> 3057 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 0 -> 6454 bytes .../Assets/Square44x44Logo.png | Bin 0 -> 966 bytes .../Assets/Square44x44Logo.scale-200.png | Bin 0 -> 1950 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 576 bytes Tornado3_2026Election/Assets/Stations/g1.png | Bin 0 -> 2684 bytes Tornado3_2026Election/Assets/Stations/jtv.png | Bin 0 -> 6639 bytes Tornado3_2026Election/Assets/Stations/kbc.png | Bin 0 -> 15558 bytes Tornado3_2026Election/Assets/Stations/knn.png | Bin 0 -> 879 bytes Tornado3_2026Election/Assets/Stations/tbc.png | Bin 0 -> 3076 bytes Tornado3_2026Election/Assets/Stations/tjb.png | Bin 0 -> 624 bytes Tornado3_2026Election/Assets/StoreLogo.png | Bin 0 -> 1072 bytes .../Assets/Wide310x150Logo.png | Bin 0 -> 3021 bytes .../Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 6827 bytes .../Common/AsyncRelayCommand.cs | 54 + .../Common/ObservableObject.cs | 35 + Tornado3_2026Election/Common/RelayCommand.cs | 24 + .../Common/RelayCommandOfT.cs | 44 + Tornado3_2026Election/Common/UiDispatcher.cs | 56 + .../Controls/ChannelSchedulePanel.xaml | 331 ++ .../Controls/ChannelSchedulePanel.xaml.cs | 26 + .../Data/LocationCatalog.seed.json | 1236 ++++++++ .../Data/ManualCandidateSamples.seed.json | 44 + Tornado3_2026Election/Domain/AppPage.cs | 13 + .../Domain/BroadcastChannel.cs | 9 + .../Domain/BroadcastPhase.cs | 7 + .../Domain/BroadcastStationProfile.cs | 14 + .../Domain/CandidateEntry.cs | 115 + .../Domain/CandidateJudgement.cs | 9 + .../Domain/ChannelOperationMode.cs | 7 + .../Domain/ChannelScheduleItem.cs | 99 + .../Domain/ElectionDataSnapshot.cs | 32 + .../Domain/EmptyScheduleBehavior.cs | 7 + .../Domain/FormatCutDefinition.cs | 8 + .../Domain/FormatTemplateDefinition.cs | 20 + Tornado3_2026Election/Domain/LogEntry.cs | 22 + Tornado3_2026Election/Domain/LogLevel.cs | 8 + Tornado3_2026Election/Domain/LoopMode.cs | 7 + .../Domain/ScheduleQueueItemState.cs | 11 + .../Domain/TornadoConnectionState.cs | 10 + Tornado3_2026Election/MainWindow.xaml | 520 ++++ Tornado3_2026Election/MainWindow.xaml.cs | 444 +++ Tornado3_2026Election/Package.appxmanifest | 53 + Tornado3_2026Election/Persistence/AppState.cs | 50 + .../Persistence/AppStateStore.cs | 42 + .../Persistence/CandidateState.cs | 20 + .../Persistence/ChannelState.cs | 13 + .../Persistence/ScheduleItemState.cs | 25 + .../Properties/launchSettings.json | 10 + .../Services/ChannelScheduleEngine.cs | 321 ++ .../Services/FormatCatalogService.cs | 90 + .../Services/IDataRefreshGate.cs | 16 + .../Services/ITornado3Adapter.cs | 30 + Tornado3_2026Election/Services/LogService.cs | 38 + .../Services/MockTornado3Adapter.cs | 103 + .../Services/StationCatalogService.cs | 19 + .../Tornado3_2026Election.csproj | 104 + .../ViewModels/ChannelScheduleViewModel.cs | 277 ++ .../ViewModels/DataViewModel.cs | 730 +++++ .../ViewModels/MainViewModel.cs | 754 +++++ .../ViewModels/RegionOptionViewModel.cs | 31 + .../ViewModels/RestoreSelectionViewModel.cs | 28 + .../ViewModels/SelectionOption.cs | 14 + .../ViewModels/SettingsViewModel.cs | 69 + .../ViewModels/StationFilterItemViewModel.cs | 162 + Tornado3_2026Election/app.manifest | 19 + g1.html | 1440 +++++++++ jtv.html | 1865 ++++++++++++ kbc.html | 1282 ++++++++ knn.html | 2040 +++++++++++++ tbc.html | 1542 ++++++++++ tjb-layout.css | 2700 +++++++++++++++++ tjb.html | 2176 +++++++++++++ 86 files changed, 20087 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 SYSTEM_SPEC.md create mode 100644 Tornado3_2026Election.slnx create mode 100644 Tornado3_2026Election/App.xaml create mode 100644 Tornado3_2026Election/App.xaml.cs create mode 100644 Tornado3_2026Election/Assets/AppIcon.ico create mode 100644 Tornado3_2026Election/Assets/AppIcon.png create mode 100644 Tornado3_2026Election/Assets/ElectionSealIcon.svg create mode 100644 Tornado3_2026Election/Assets/LockScreenLogo.png create mode 100644 Tornado3_2026Election/Assets/LockScreenLogo.scale-200.png create mode 100644 Tornado3_2026Election/Assets/SplashScreen.png create mode 100644 Tornado3_2026Election/Assets/SplashScreen.scale-200.png create mode 100644 Tornado3_2026Election/Assets/Square150x150Logo.png create mode 100644 Tornado3_2026Election/Assets/Square150x150Logo.scale-200.png create mode 100644 Tornado3_2026Election/Assets/Square44x44Logo.png create mode 100644 Tornado3_2026Election/Assets/Square44x44Logo.scale-200.png create mode 100644 Tornado3_2026Election/Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 Tornado3_2026Election/Assets/Stations/g1.png create mode 100644 Tornado3_2026Election/Assets/Stations/jtv.png create mode 100644 Tornado3_2026Election/Assets/Stations/kbc.png create mode 100644 Tornado3_2026Election/Assets/Stations/knn.png create mode 100644 Tornado3_2026Election/Assets/Stations/tbc.png create mode 100644 Tornado3_2026Election/Assets/Stations/tjb.png create mode 100644 Tornado3_2026Election/Assets/StoreLogo.png create mode 100644 Tornado3_2026Election/Assets/Wide310x150Logo.png create mode 100644 Tornado3_2026Election/Assets/Wide310x150Logo.scale-200.png create mode 100644 Tornado3_2026Election/Common/AsyncRelayCommand.cs create mode 100644 Tornado3_2026Election/Common/ObservableObject.cs create mode 100644 Tornado3_2026Election/Common/RelayCommand.cs create mode 100644 Tornado3_2026Election/Common/RelayCommandOfT.cs create mode 100644 Tornado3_2026Election/Common/UiDispatcher.cs create mode 100644 Tornado3_2026Election/Controls/ChannelSchedulePanel.xaml create mode 100644 Tornado3_2026Election/Controls/ChannelSchedulePanel.xaml.cs create mode 100644 Tornado3_2026Election/Data/LocationCatalog.seed.json create mode 100644 Tornado3_2026Election/Data/ManualCandidateSamples.seed.json create mode 100644 Tornado3_2026Election/Domain/AppPage.cs create mode 100644 Tornado3_2026Election/Domain/BroadcastChannel.cs create mode 100644 Tornado3_2026Election/Domain/BroadcastPhase.cs create mode 100644 Tornado3_2026Election/Domain/BroadcastStationProfile.cs create mode 100644 Tornado3_2026Election/Domain/CandidateEntry.cs create mode 100644 Tornado3_2026Election/Domain/CandidateJudgement.cs create mode 100644 Tornado3_2026Election/Domain/ChannelOperationMode.cs create mode 100644 Tornado3_2026Election/Domain/ChannelScheduleItem.cs create mode 100644 Tornado3_2026Election/Domain/ElectionDataSnapshot.cs create mode 100644 Tornado3_2026Election/Domain/EmptyScheduleBehavior.cs create mode 100644 Tornado3_2026Election/Domain/FormatCutDefinition.cs create mode 100644 Tornado3_2026Election/Domain/FormatTemplateDefinition.cs create mode 100644 Tornado3_2026Election/Domain/LogEntry.cs create mode 100644 Tornado3_2026Election/Domain/LogLevel.cs create mode 100644 Tornado3_2026Election/Domain/LoopMode.cs create mode 100644 Tornado3_2026Election/Domain/ScheduleQueueItemState.cs create mode 100644 Tornado3_2026Election/Domain/TornadoConnectionState.cs create mode 100644 Tornado3_2026Election/MainWindow.xaml create mode 100644 Tornado3_2026Election/MainWindow.xaml.cs create mode 100644 Tornado3_2026Election/Package.appxmanifest create mode 100644 Tornado3_2026Election/Persistence/AppState.cs create mode 100644 Tornado3_2026Election/Persistence/AppStateStore.cs create mode 100644 Tornado3_2026Election/Persistence/CandidateState.cs create mode 100644 Tornado3_2026Election/Persistence/ChannelState.cs create mode 100644 Tornado3_2026Election/Persistence/ScheduleItemState.cs create mode 100644 Tornado3_2026Election/Properties/launchSettings.json create mode 100644 Tornado3_2026Election/Services/ChannelScheduleEngine.cs create mode 100644 Tornado3_2026Election/Services/FormatCatalogService.cs create mode 100644 Tornado3_2026Election/Services/IDataRefreshGate.cs create mode 100644 Tornado3_2026Election/Services/ITornado3Adapter.cs create mode 100644 Tornado3_2026Election/Services/LogService.cs create mode 100644 Tornado3_2026Election/Services/MockTornado3Adapter.cs create mode 100644 Tornado3_2026Election/Services/StationCatalogService.cs create mode 100644 Tornado3_2026Election/Tornado3_2026Election.csproj create mode 100644 Tornado3_2026Election/ViewModels/ChannelScheduleViewModel.cs create mode 100644 Tornado3_2026Election/ViewModels/DataViewModel.cs create mode 100644 Tornado3_2026Election/ViewModels/MainViewModel.cs create mode 100644 Tornado3_2026Election/ViewModels/RegionOptionViewModel.cs create mode 100644 Tornado3_2026Election/ViewModels/RestoreSelectionViewModel.cs create mode 100644 Tornado3_2026Election/ViewModels/SelectionOption.cs create mode 100644 Tornado3_2026Election/ViewModels/SettingsViewModel.cs create mode 100644 Tornado3_2026Election/ViewModels/StationFilterItemViewModel.cs create mode 100644 Tornado3_2026Election/app.manifest create mode 100644 g1.html create mode 100644 jtv.html create mode 100644 kbc.html create mode 100644 knn.html create mode 100644 tbc.html create mode 100644 tjb-layout.css create mode 100644 tjb.html diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9491a2f --- /dev/null +++ b/.gitignore @@ -0,0 +1,363 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd \ No newline at end of file diff --git a/SYSTEM_SPEC.md b/SYSTEM_SPEC.md new file mode 100644 index 0000000..eef127f --- /dev/null +++ b/SYSTEM_SPEC.md @@ -0,0 +1,228 @@ +# 선거방송 송출 프로그램 요구사항 정의 (v0.1) + +--- + +## 1. 시스템 개요 + +### 1.1 목적 +- Tornado3를 통해 선거 방송 자막 송출 +- 포맷(디자인)에 데이터 매핑 후 송출 + +--- + +## 2. 데이터 처리 + +### 2.1 데이터 수신 +- Polling 기반 +- 수동 수신 가능 + +### 2.2 수동 수신 정책 +- 수동 수신 시 polling 주기 초기화 +- 3초 이내 재요청 금지 + +### 2.3 갱신 vs 송출 +- 갱신 중 송출 요청 시 → 갱신 완료 후 송출 + +### 2.4 데이터 기준 +- 득표율: 소수점 1자리 반올림 +- 득표수: 3자리 콤마 + +### 2.5 데이터 유효성 +- 필수 필드 누락 시 송출 금지 +- 사진 필수 포맷에서 이미지 없으면 송출 금지 + +--- + +## 3. 포맷 + +### 3.1 정의 +- 디자인 템플릿 +- 데이터 매핑 구조 + +### 3.2 구조 +- 포맷 → 컷 → (준비 → 송출) + +### 3.3 루프 +- 하위 범주 반복 (예: 시도별 17개) + +### 3.4 데이터 반영 +- 현재 컷 반영 금지 +- 다음 컷부터 반영 + +### 3.5 송출 시간 +- 포맷별 설정 가능 +- 변경 시 다음 컷부터 적용 + +--- + +## 4. 스케줄 + +### 4.1 구조 +- 큐 기반 + +### 4.2 상태 +- 현재 송출: 빨간색 +- 다음 송출: 주황색 + +### 4.3 제어 +- 다음 포맷 변경 가능 +- 현재 포맷 강제 중지 후 전환 가능 +- 순서 변경 가능 + +### 4.4 삭제 정책 +- 대기 포맷 삭제 가능 +- 송출 중 포맷 삭제 불가 + +### 4.5 루프 +- 전체 루프 가능 +- 첫 포맷부터 재시작 + +### 4.6 빈 스케줄 +- 설정에 따라: + - 즉시 Out + - 마지막 화면 유지 + +### 4.7 종료 +- 수동 종료 시: + - 스케줄 종료 + - 해당 Layer Out + +--- + +## 5. 방송 영역 + +- 노멀 +- 좌상단 +- 하단 +- VideoWall + +특징: +- 독립 스케줄 +- 동시 송출 가능 + +--- + +## 6. 방송사 설정 + +### 대상 +- KNN, TBC, KBC, G1, TJB, JTV + +### 특징 +- 동일 구조 +- 지역 필터만 다름 + +### 지역 필터 +- 기본값 제공 +- 사용자 수정 가능 + +--- + +## 7. 유력/확실/당선 + +### 기준 +- 후보 단위 + +### 수동 입력 +- 콤보박스 선택 +- 자동 판정보다 우선 + +### 자동 판정 +- 수동 지정 없는 경우만 적용 +- 당선 조건: + - (1위 - 2위) > 남은 개표수 + +### 초기화 +- 전체 초기화 가능 + +### 저장 +- 방송사 + 선거종류 + 선거구 + 후보 기준 + +--- + +## 8. Tornado3 연동 + +### 방식 +- TCP + DLL + +### 기능 +- 이미지 변경 +- 텍스트 변경 +- 준비 +- 송출 + +### 응답 처리 +- ACK 대기 없음 +- 5초 내 응답 없으면 실패 + +### 상태 +- IDLE +- READY (송출 가능 상태) +- SENDING +- ON_AIR +- ERROR + +### 연결 +- 끊김 시 재연결 +- 재연결 후 사용자 확인 후 재개 + +--- + +## 9. 상태 흐름 + +IDLE → READY → SENDING → ON_AIR → NEXT + ↓ + ERROR + +--- + +## 10. 복원 + +### 대상 +- 스케줄 +- 방송사 +- 상태값 + +### 방식 +- 통합 대화상자 +- 체크박스 선택 + +--- + +## 11. UI 구조 + +### 네비게이션 +- 통합 스케줄 +- 노멀 +- 좌상단 +- 하단 +- VideoWall +- 데이터 +- 설정 +- 로그 + +### 표시 +- 빨강: 현재 송출 +- 주황: 다음 송출 + +--- + +## 12. 이미지 + +경로 규칙: +{선택경로}/{선거종류}/{지역코드}/{후보코드}.png + +--- + +## 13. 예외 처리 + +- API 실패 → 사용자 알림 +- Tornado 실패 → ERROR 상태 + +--- + +## 14. 핵심 개념 + +- 포맷 기반 +- 컷 단위 송출 +- 스케줄 큐 구조 +- 상태 머신 기반 제어 \ No newline at end of file diff --git a/Tornado3_2026Election.slnx b/Tornado3_2026Election.slnx new file mode 100644 index 0000000..6f22afe --- /dev/null +++ b/Tornado3_2026Election.slnx @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/Tornado3_2026Election/App.xaml b/Tornado3_2026Election/App.xaml new file mode 100644 index 0000000..6ab5774 --- /dev/null +++ b/Tornado3_2026Election/App.xaml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tornado3_2026Election/App.xaml.cs b/Tornado3_2026Election/App.xaml.cs new file mode 100644 index 0000000..7386d3c --- /dev/null +++ b/Tornado3_2026Election/App.xaml.cs @@ -0,0 +1,52 @@ +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Controls.Primitives; +using Microsoft.UI.Xaml.Data; +using Microsoft.UI.Xaml.Input; +using Microsoft.UI.Xaml.Media; +using Microsoft.UI.Xaml.Navigation; +using Microsoft.UI.Xaml.Shapes; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Tornado3_2026Election.Common; +using Windows.ApplicationModel; +using Windows.ApplicationModel.Activation; +using Windows.Foundation; +using Windows.Foundation.Collections; + +// To learn more about WinUI, the WinUI project structure, +// and more about our project templates, see: http://aka.ms/winui-project-info. + +namespace Tornado3_2026Election +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + public partial class App : Application + { + private Window? _window; + + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + InitializeComponent(); + } + + /// + /// Invoked when the application is launched. + /// + /// Details about the launch request and process. + protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args) + { + UiDispatcher.Initialize(Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread()); + _window = new MainWindow(); + _window.Activate(); + } + } +} diff --git a/Tornado3_2026Election/Assets/AppIcon.ico b/Tornado3_2026Election/Assets/AppIcon.ico new file mode 100644 index 0000000000000000000000000000000000000000..011d4b9965be88819e733527aa5f58e64806b7aa GIT binary patch literal 5661 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 + + + + + + diff --git a/Tornado3_2026Election/Assets/LockScreenLogo.png b/Tornado3_2026Election/Assets/LockScreenLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ef63eac9d39d2a5cad186779c4ae908a489d5f GIT binary patch literal 576 zcmV-G0>AxPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0o6%FK~zXf-BqDZ z13?h2MB-?AyE$;AxtXg(B9TZW5{X3OkbFWV5{Yb3CmS#oi0vE#5=0H55;A+Y*WKw} zufdS;lFKFYcK6N9&dm0D{~jjI4oSl`X`Iww!T(a>tr_GaxqfSyG~X>1j!ENp^Qr8U zG=2p(jRiX)_iuzzctQ%_ngf#jnC&(K1;(x!R|(_NXuOi=L}3)3wQceR9DHX= z1vfso29pl^b}=6w2|Fgh;B=D08H<<%jwIi}g={olNRH7az~F<~F%~jux+D2&L6!4~ zTLZ999Cuen7DI-Qj1Cq``J_n+WHhd1?1U+n1b!&2N&; z-61g%Qm}}o+ID0|H@Zu<)e;dgDm$%89j?Qjs}h^pE^e8U!7LIYbvL(80gF|$!8F#5 zvP^vuO7OXAGPn$P3Al!fjbSOkct6PYNFkLSQ=kER)w}}=7DmIlwO@nEdW+TVoW zO|XAX1-y{L57Kz=acg6JYuJmk0}Q6Mm)`4!Gy80|UFdJXhqYDMpWz2`3UM^>rv;$^ O0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1FlI#K~!i%?U}D{ z8!;5e3kL_M#Uor_wKk91NL`~3X1-+TUXXJ;o)oEQW>9zWAUy{!uQaVgZ-s!-FaP_wF#^ZNH4 z%5)*$>2dj-zW-?GLcO=0Q`^L6stbAZXkxUOTvtNsNXN{xX!#vHLaue8K41o^jiaE? z%gfp=!p_(ZLDaMo>d*fF@~?HHuJ_amE=cVSit%xwHWA|wb`&SCn!0ryG)c)TLsb$A4W$I070l2;t1i zds;6Gn;P9wR~wG6rU(FfB;Ozo=pfO0Nz{$*M+TiAl~=T0j8p*t@j){iXRunKStF&f z904F4G`ZH}*Dq+jUa0FVh5SV8bdf6ngtil13Bl?4Bhq9?z{WU40Pt3KxNgcU)Y}8c zbtc!eP9KK~unT79Ecm%u&S^P^Lj{1PkYDz*AlI}!3N}~X=oj*a*5NROfO?_Z_l1)I z&7$JIG%hb_9S%bX02ukE9abXor%gT3axOy&NN&g9+sj*8&L!D!3)m#?2UKcW9$-&V z&6FiXJ^=!74zOo|$q!o2#dB$)HncpzUCN=JmUCH*)OTkl|K*;%f?Oth{yn@XG0v}!ozjXD(KKB0K`S8U;eeE+UB^hfli}68^;5V z!Vv&sBK*tX{2j3Y4frEurnz?}xB@^eqVnxDwwRfx4U-L=Ew*{!PCYS^Dq!(a{$3(& z?`)_QXP{V^c!*q$+xyY@bq7a)`Kkjqb&id@&gc4l8+InBJK1#t>xO%^4!Q(Dw7I$= zccJ#-xo9@{&J`MM#7J#s#RPxp-v7_hVY@(vGwF2x_F$jqVD~7I*>D~=lkEJu{h9T} z)KRE!&ssn5b$%PO&op_3JqFDu*4pp=jO9LNlPGVW+^5zy5ZJgbr~jWg@r3vfJwHxW TBSD1#00000NkvXXu0mjfLw4cd literal 0 HcmV?d00001 diff --git a/Tornado3_2026Election/Assets/SplashScreen.png b/Tornado3_2026Election/Assets/SplashScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..ff312a3a9d44ba93861edaf35c5d5818c50c64a3 GIT binary patch literal 6827 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 literal 0 HcmV?d00001 diff --git a/Tornado3_2026Election/Assets/SplashScreen.scale-200.png b/Tornado3_2026Election/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..59e083138911c67c2838305dda7e09b45185bab6 GIT binary patch literal 14880 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 MONJLq{&oocU-R*Nv;Y7A literal 0 HcmV?d00001 diff --git a/Tornado3_2026Election/Assets/Square150x150Logo.png b/Tornado3_2026Election/Assets/Square150x150Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bd12eef38f8885fddb18dc2c8287bd5d5297b9db GIT binary patch literal 3057 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 literal 0 HcmV?d00001 diff --git a/Tornado3_2026Election/Assets/Square150x150Logo.scale-200.png b/Tornado3_2026Election/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..65666da389b7cdd047e6813293a47b753b40793f GIT binary patch literal 6454 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 QH$WgGJyYGc+AdH34?h7)XaE2J literal 0 HcmV?d00001 diff --git a/Tornado3_2026Election/Assets/Square44x44Logo.png b/Tornado3_2026Election/Assets/Square44x44Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8828727f8949fbd4880d2d9ab21e5fa00cfc4dc0 GIT binary patch literal 966 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 literal 0 HcmV?d00001 diff --git a/Tornado3_2026Election/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/Tornado3_2026Election/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ef63eac9d39d2a5cad186779c4ae908a489d5f GIT binary patch literal 576 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 U|NWR93jhEB07*qoM6N<$g3+)6qyPW_ literal 0 HcmV?d00001 diff --git a/Tornado3_2026Election/Assets/Stations/knn.png b/Tornado3_2026Election/Assets/Stations/knn.png new file mode 100644 index 0000000000000000000000000000000000000000..5490089b1c8e007910d6e690da14142fc9bc2147 GIT binary patch literal 879 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 E2ROtuv;Y7A literal 0 HcmV?d00001 diff --git a/Tornado3_2026Election/Assets/Stations/tjb.png b/Tornado3_2026Election/Assets/Stations/tjb.png new file mode 100644 index 0000000000000000000000000000000000000000..4cbcec7bbd826c5923130ba1d221805d865ac9d5 GIT binary patch literal 624 zcmV-$0+0QPP)kne z$d4r6Pa4JROuXyg`lP)maxI*He+GXS9VPKayb-0b%q}RHNAi1ZTS7;QlR!-6xZU6eLXuyTSAxeJ zHx35xQc?1PK^CyHp)MXGA0!jUZ;>2D`4>HFv~b;Y;}}F$y+JUavze%Krav{I67fCO3pfun{`MQ+_8{@#tbD0_JEH- z=-zMI95WL7sip}d&E;wrMiO)t$x!GwtxcG88^ECo;JWxN0LfRTu#{CP-8n`F2qF+{z;mxPYMJbTdvg;z}4)Km)LAbn)dI+o1GgU{J#yfkTE6tuBRYL&l>B2q> z{g;b#Z{0000< KMNUMnLSTX~-2}M+ literal 0 HcmV?d00001 diff --git a/Tornado3_2026Election/Assets/StoreLogo.png b/Tornado3_2026Election/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..94199ccd2482478c4b2e318abf258c70f6e4db46 GIT binary patch literal 1072 zcmV-01kd}4P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1I0;1K~!i%?V2xe z6fqRWE0IWs%gzaDyFiEse*J5QCUzO24>29*}b{s zOZN69yVpV7ZziIbKbtRkdC5zQ7%hv6X&PSLQ5H zzfJmdtLD}&-sr>l9UbKIDIq@StgXy@tQT(64a#)>nClDzAFM0Ah(D$mtIG;n8J zE(`1r)Zl%NS1Az!>~!{=*A3PZmlMN#gv6YDN`(Nc%FU3Law!0W>RDoZkt# zzjMx)GNO=RLYzDH`UGKICL&f}W>#P*y(99$)qf;eC_ zAr;5)ILVfY!T#a5#rYB86lVDB1a+mqghI;2gnOI7w5Y-@=jT9XI!Fw)b;0=&vHL9# zYRGH-86pPO;nnYtPY`beLe%Vt%SiEsT&vlSa4(RHK^ecE=Jv%V9(&3dUOj__Q5$$M&H|F?2k6X?W(p;6sGm`D4`sn%)I@{$0BtkGq z!9g`+po(eFJbt|5CB48#>aU+JA?{s7nPVp)x_xig#8~Fk1v-&>W}pPI=Sx4ZQu=2r zEOZ`G+Wh7+I&R%;d_D^wK*RUMRMMB?!{9c+`e;lf`F!TYbiU{|W_33Df*wlq-oE}P qfvDpvlXLIuv!jyp+m0PO%J>I7%DM_^*|pFB0000iC)f literal 0 HcmV?d00001 diff --git a/Tornado3_2026Election/Assets/Wide310x150Logo.png b/Tornado3_2026Election/Assets/Wide310x150Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a05a9f2c58c5031c26c6f149909800e52c005a62 GIT binary patch literal 3021 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 ghpm=RnN9j7KwU0oU78R4cRvTL% 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 literal 0 HcmV?d00001 diff --git a/Tornado3_2026Election/Common/AsyncRelayCommand.cs b/Tornado3_2026Election/Common/AsyncRelayCommand.cs new file mode 100644 index 0000000..d2a5c92 --- /dev/null +++ b/Tornado3_2026Election/Common/AsyncRelayCommand.cs @@ -0,0 +1,54 @@ +using System; +using System.Threading.Tasks; +using System.Windows.Input; + +namespace Tornado3_2026Election.Common; + +public sealed class AsyncRelayCommand : ObservableObject, ICommand +{ + private readonly Func _execute; + private readonly Func? _canExecute; + private bool _isRunning; + + public AsyncRelayCommand(Func execute, Func? canExecute = null) + { + _execute = execute; + _canExecute = canExecute; + } + + public event EventHandler? CanExecuteChanged; + + public bool IsRunning + { + get => _isRunning; + private set + { + if (SetProperty(ref _isRunning, value)) + { + NotifyCanExecuteChanged(); + } + } + } + + public bool CanExecute(object? parameter) => !IsRunning && (_canExecute?.Invoke() ?? true); + + public async void Execute(object? parameter) + { + if (!CanExecute(parameter)) + { + return; + } + + try + { + IsRunning = true; + await _execute(); + } + finally + { + IsRunning = false; + } + } + + public void NotifyCanExecuteChanged() => UiDispatcher.Enqueue(() => CanExecuteChanged?.Invoke(this, EventArgs.Empty)); +} diff --git a/Tornado3_2026Election/Common/ObservableObject.cs b/Tornado3_2026Election/Common/ObservableObject.cs new file mode 100644 index 0000000..e068308 --- /dev/null +++ b/Tornado3_2026Election/Common/ObservableObject.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; + +namespace Tornado3_2026Election.Common; + +public abstract class ObservableObject : INotifyPropertyChanged +{ + public event PropertyChangedEventHandler? PropertyChanged; + + protected bool SetProperty(ref T field, T value, [CallerMemberName] string? propertyName = null) + { + if (EqualityComparer.Default.Equals(field, value)) + { + return false; + } + + field = value; + OnPropertyChanged(propertyName); + return true; + } + + protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) + { + UiDispatcher.Enqueue(() => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName))); + } + + protected void OnPropertyChanged(params string[] propertyNames) + { + foreach (var propertyName in propertyNames) + { + UiDispatcher.Enqueue(() => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName))); + } + } +} diff --git a/Tornado3_2026Election/Common/RelayCommand.cs b/Tornado3_2026Election/Common/RelayCommand.cs new file mode 100644 index 0000000..4c0a546 --- /dev/null +++ b/Tornado3_2026Election/Common/RelayCommand.cs @@ -0,0 +1,24 @@ +using System; +using System.Windows.Input; + +namespace Tornado3_2026Election.Common; + +public sealed class RelayCommand : ICommand +{ + private readonly Action _execute; + private readonly Func? _canExecute; + + public RelayCommand(Action execute, Func? canExecute = null) + { + _execute = execute; + _canExecute = canExecute; + } + + public event EventHandler? CanExecuteChanged; + + public bool CanExecute(object? parameter) => _canExecute?.Invoke() ?? true; + + public void Execute(object? parameter) => _execute(); + + public void NotifyCanExecuteChanged() => UiDispatcher.Enqueue(() => CanExecuteChanged?.Invoke(this, EventArgs.Empty)); +} diff --git a/Tornado3_2026Election/Common/RelayCommandOfT.cs b/Tornado3_2026Election/Common/RelayCommandOfT.cs new file mode 100644 index 0000000..facde36 --- /dev/null +++ b/Tornado3_2026Election/Common/RelayCommandOfT.cs @@ -0,0 +1,44 @@ +using System; +using System.Windows.Input; + +namespace Tornado3_2026Election.Common; + +public sealed class RelayCommand : ICommand +{ + private readonly Action _execute; + private readonly Func? _canExecute; + + public RelayCommand(Action execute, Func? canExecute = null) + { + _execute = execute; + _canExecute = canExecute; + } + + public event EventHandler? CanExecuteChanged; + + public bool CanExecute(object? parameter) + { + if (parameter is null) + { + return _canExecute?.Invoke(default) ?? true; + } + + return parameter is T typedParameter && (_canExecute?.Invoke(typedParameter) ?? true); + } + + public void Execute(object? parameter) + { + if (parameter is null) + { + _execute(default); + return; + } + + if (parameter is T typedParameter) + { + _execute(typedParameter); + } + } + + public void NotifyCanExecuteChanged() => UiDispatcher.Enqueue(() => CanExecuteChanged?.Invoke(this, EventArgs.Empty)); +} diff --git a/Tornado3_2026Election/Common/UiDispatcher.cs b/Tornado3_2026Election/Common/UiDispatcher.cs new file mode 100644 index 0000000..3fcb6c8 --- /dev/null +++ b/Tornado3_2026Election/Common/UiDispatcher.cs @@ -0,0 +1,56 @@ +using System; +using System.Threading.Tasks; +using Microsoft.UI.Dispatching; + +namespace Tornado3_2026Election.Common; + +public static class UiDispatcher +{ + private static DispatcherQueue? _dispatcherQueue; + + public static void Initialize(DispatcherQueue? dispatcherQueue) + { + _dispatcherQueue ??= dispatcherQueue; + } + + public static void Enqueue(Action action) + { + var dispatcherQueue = _dispatcherQueue; + if (dispatcherQueue is null || dispatcherQueue.HasThreadAccess) + { + action(); + return; + } + + _ = dispatcherQueue.TryEnqueue(() => action()); + } + + public static Task EnqueueAsync(Action action) + { + var dispatcherQueue = _dispatcherQueue; + if (dispatcherQueue is null || dispatcherQueue.HasThreadAccess) + { + action(); + return Task.CompletedTask; + } + + var completionSource = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + if (!dispatcherQueue.TryEnqueue(() => + { + try + { + action(); + completionSource.SetResult(); + } + catch (Exception exception) + { + completionSource.SetException(exception); + } + })) + { + completionSource.SetResult(); + } + + return completionSource.Task; + } +} diff --git a/Tornado3_2026Election/Controls/ChannelSchedulePanel.xaml b/Tornado3_2026Election/Controls/ChannelSchedulePanel.xaml new file mode 100644 index 0000000..c77f1c9 --- /dev/null +++ b/Tornado3_2026Election/Controls/ChannelSchedulePanel.xaml @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

JTV 전주방송 로고

+ + +
시청자 뉴스제보010-5131-2222(jtvnews@jtv.co.kr) + + +
+
+
+
+
전북을 대표하는 전북인의 방송 JTV
+ +
+
+ +
+ + +
+ +
+
+
+
+ +
+
+ + + + +
+ + + +
+
+ + + + + + +
+
+
+ + + +
+ + + +
+
+ +
+
+

JTV NEWS

+
+
+ +
+ + +
+
+
+

JTV ON

+
+ +
+
+
+ + +

와글TV

+
+ + +
+
+
+
+ +
+
+

행사 안내

+
+
+ + + + +
+ + + + + + + + +
+ + + + +
+ +
+
+
+ +
+
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • + +
+
+
+
+ + +
+ +
+
+ + + +
+ +
+ +
+
+
+
+ + + + + + diff --git a/kbc.html b/kbc.html new file mode 100644 index 0000000..e4e2dab --- /dev/null +++ b/kbc.html @@ -0,0 +1,1282 @@ + + + + + + + +KBC광주방송 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + +
+
+
+ +
+
+
+
+
+
+
+
+

랭킹뉴스

+ +
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
  9. + +
  10. +
+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
  9. + +
  10. +
+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
  9. + +
  10. +
+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
  9. + +
  10. +
+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
  9. + +
  10. +
+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
  9. + +
  10. +
+
+
+
+
+
+
+
+
+
+
+
+ +
도시락(樂)
+
+
+ "당신의 일상에 배달되는 따뜻하고 맛있는 정보 한 끼" +광주와 전남, 우리가 살아가는 이 땅의 구석구석에 아직 발견되지 않은 보물 같은 이야기가 있다! +바쁜 도심의 활기와 정겨운 시골의 여유를 한 그릇에 담아, 지역민에게 전달하는 로컬리즘 생활정보 매거진 프로그램 +
+
+ 금요일 오후 6시 55분 +
+ + 프로그램 홈 + + +
+ +
+ 도시락(樂) +
+
+
+
+
+
+
+ +
시사터치 따따부따
+
+
+ PD저널리즘에 입각한 성역 없는 취재로 지역 사회에 존재하는 사회적 부조리를 견제하고, +소외된 사회적 약자의 목소리를 대변하는 심층 보도· 현장 취재 시사 프로그램 + +방송 : 월요일 18:35 +
+
+ 월요일 18:35 +
+ + 프로그램 홈 + + +
+ +
+ 시사터치 따따부따 +
+
+
+
+ + +
+
+
+ +
전국 TOP10 가요쇼
+
+
+ kbc 광주방송 가요방송 전국 TOP10 가요쇼를 보실 수 있습니다. +4,50대 중장년층들에게 음악을 통해 삶의 에너지를 전달하고 +스트레스를 해소 할 수 있는 공간을 마련. +
+
+ 토요일 10시 55분 ~ 12시
+(재방송) 월요일 12시 50분 ~14시 +
+ + 프로그램 홈 + + +
+ +
+ 전국 TOP10 가요쇼 +
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+ + + + + + + + + + +
+ + + +
+ +
+ + + + +
+ + \ No newline at end of file diff --git a/knn.html b/knn.html new file mode 100644 index 0000000..348890b --- /dev/null +++ b/knn.html @@ -0,0 +1,2040 @@ + + + + + + + + + + + + + + + + 부산경남대표방송 KNN 뉴스 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ +
+ + + +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TOP +
+
+
+
+
+ + +
+
+ + + + + + + + + + + +
+
+ + + +
+
+
주요뉴스
+
+
+
+ 차별요소 없애겠다고...결론은 장애인*비장애인 모두 불편 + +
+
+
+
+ +
+ +
+
+ 기자 : + 하영광 +
+
+ 날짜 : + + 2026.03.18 +
+
+
+
+
+
+ + + +
+
+ + +
+ +
+ + +
+
+
+
+
+ + + +
+ +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + +
+
+
+
사이트맵
+ +
+
+ +
+ + + + + +
+ + \ No newline at end of file diff --git a/tbc.html b/tbc.html new file mode 100644 index 0000000..872e633 --- /dev/null +++ b/tbc.html @@ -0,0 +1,1542 @@ + + + + + + + + + + + + + + + + TBC 티비씨 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ +
+ + + + +
+
+ + +
+
+
+
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ + + + + +
+ + +
+ +
+
뉴스 + 더 보기 +
+ +
+ +
+
다시보기
+ +
+ +
+
+
+
+ +
+ +
+
+
주요 프로그램
+
+
    +
  • 전체
  • +
  • TV
  • +
  • 라디오
  • +
+
+
+
+
+
+
+ + +
+ +
+ + + + + + + + + + +
+ + +
+
유튜브 인기클립
+ +
+ +
+
+
유튜브 채널
+ +
+
+ + + + +
+
행사안내
+ +
+
+
+ + 배너이미지 + +
+ + 배너이미지 + +
+ + 배너이미지 + +
+
+
+ + +
+ +
+ + +
+ + +
+
+
+ + + + +
+
+ +
+
+ 본 콘텐츠의 저작권은 제공처 또는 TBC에 있으며 이를 무단 이용하는 경우 저작권법에 따라 법적책임을 질 수 있습니다..
+ Copyright © TBC All Rights Reserved. +
+ + +
+ +
+
본사 : (42175) 대구광역시 수성구 동대구로 23 TEL: 053-760-2222
+
경북지사 : (36759) 경상북도 안동시 풍천면 풍요5길 16-25 신도청프라자 401호 TEL: 054-857-9571
+
동부지사 : (37783) 경상북도 포항시 남구 포스코대로 329 서울빌딩 6층 TEL: 054-277-0800
+
서울지사 : (07801) 서울특별시 강서구 마곡중앙로 86 1층 TEL: 02-2600-9731
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tjb-layout.css b/tjb-layout.css new file mode 100644 index 0000000..dddd4bb --- /dev/null +++ b/tjb-layout.css @@ -0,0 +1,2700 @@ +@charset "UTF-8"; + +#wrap { + position: relative; + overflow: hidden; +} +.layout { + position: relative; + max-width: 1200px; /* contents 영역 width 값 */ + width: 100%; + margin: 0 auto; +} +section > .layout::after { + display: block; + clear: both; + content: ""; +} + +#container .sub.layout { + margin: 50px auto; +} +#content_wrap { + overflow: hidden; + margin-top: 20px; + margin-left: 30rem; + margin-bottom: 120px; + padding-top: 38px; +} +.wide #content_wrap { + overflow: hidden; + margin-top: 46px; + margin-left: 30rem; + margin-bottom: 120px; + padding-top: 0; +} +section.wide #content_wrap { + overflow: inherit; + margin-left: 0; +} +.news-lnb + .wide #content_wrap{ + margin-top: 290px; +} +body { + height: auto; +} +html.on, +body.on { + overflow: hidden; +} + +/* 검정배경 */ +.blind { + display: none; + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: #000; + opacity: 0; + z-index: 2; +} +body.on .blind { + display: block; + opacity: 0.5; +} + +/*헤더*/ +#header { + position: fixed; + width: 100%; + height: 144px; + background: #fff; + z-index: 99; + border-bottom: 1px solid #ddd; + margin: 0 auto; +} +#header > .layout { + width: 100%; + max-width: 100%; + height: 100%; +} +#header #gnb_wrap { + position: relative; + width: 100%; + max-width: 1200px; + height: 100%; + margin: 0 auto; +} +#header .logo_wrap { + position: absolute; + top: 50%; + left: 52px; + transform: translateY(-50%); + z-index: 3; +} +#header .logo_wrap > * { + display: inline-block; + vertical-align: middle; +} +#header .logo_wrap .logo { + margin-right: 16px; +} +#header .logo_wrap .logo a { + display: block; + width: 7rem; + height: 3.2rem; + /* background: url("/html1/images/layout/txt_logo-v1.png") no-repeat center center/100%; */ + background: url("/html1/images/main/txt_logo_white.png") no-repeat center center; + background-size: contain; +} +#header.scrolled .logo_wrap .logo a , #wrap:has(.mobile_wrap.on) #header .logo_wrap .logo a, body.on #header .logo_wrap .logo a, #wrap.sub #header .logo_wrap .logo a{ + /* background: url("/html1/images/layout/txt_logo-v2.png") no-repeat center center/100%; */ + background: url("/html1/images/main/txt_logo.png") no-repeat center center; + background-size: contain; +} +#header #gnb_wrap #gnb { + z-index: 2; +} +#header #gnb_wrap #gnb > ul { + width: 100%; + height: 100%; +} +#header #gnb_wrap #gnb > ul::after { + display: block; + clear: both; + content: ""; +} +#header #gnb_wrap #gnb > ul > li { + float: left; + position: relative; + margin-right: 40px; + height: 100%; +} +#header #gnb_wrap #gnb > ul > li:last-child { + margin-right: 0; +} +#header #gnb_wrap #gnb > ul > li > a { + display: block; + position: relative; + text-align: center; + height: 102px; + line-height: 102px; + font-size: 20px; + font-weight: 500; +} +#header #gnb_wrap #gnb > ul > li > a > span { + text-transform: uppercase; +} +#header #gnb_wrap #gnb > ul > li > a.on:before { + content: ""; + display: block; + width: 10px; + height: 10px; + bottom: 17px !important; + left: 50%; + position: absolute; + background: #e50019; + transform: translateX(-50%); + z-index: 1; +} +#header #gnb_wrap #gnb > ul > li > .sub { + position: absolute; + top: 100%; + width: 100%; +} +#header #gnb_wrap #gnb > ul > li > .sub > ul { + display: none; + text-align: center; + width: 100%; + height: auto; +} +#header #gnb_wrap #gnb > ul > li > .sub > ul > li:first-of-type { + padding-top: 1rem; +} +#header #gnb_wrap #gnb > ul > li > .sub > ul > li:last-of-type { + padding-bottom: 1rem; +} +#header #gnb_wrap #gnb > ul > li > .sub > ul > li > a { + display: block; + padding: 1rem; +} +#header .login > a { + position: relative; + font-size: 14px; + font-weight: 500; + margin-right: 2px; + color: #666; + padding-right: 2.8rem; +} +#header .login > a:last-of-type{ + padding-right: 0; +} +#header .login > a::after { + position: absolute; + width: 1px; + height: 10px; + background: #ddd; + top: 5px; + right: 12px; + content: ""; +} +#header .login > a:last-of-type::after { + content: none; +} +.nav_bg { + display: none; + position: absolute; + top: 102px; + left: 0; + width: 100%; + height: 100%; + background: #fff; + z-index: -1; +} + +/* 헤더를 고정한다 */ +#header.scrolled { + position: fixed; +} +/* ios에서 애니메이션 이슈 있을 수 있음 */ +@keyframes slide-down { + 0% { + opacity: 0; + transform: translateY(-100%); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +/*서브비주얼*/ +#container:has(.sub_visual){ + padding-top: 144px; +} +.sub_visual { + position: relative; + height: 246px; + height: 300px; + overflow: hidden; +} +.sub_visual.news1 { + position: relative; + /*height: 246px;*/ + height: 300px; + overflow: hidden; +} +[class*="sub_visual0"] { + height: 300px; +} +.sub_visual .bg { + height: 100%; +} +.sub_visual .bg .title { + padding-top: 90px; + color: #fff; +} +.sub_visual .bg .title strong { + display: block; + font-size: 50px; +} +.sub_visual .bg .title strong span { + color: #ed1c23; +} +.sub_visual .bg .title p { + font-size: 24px; + letter-spacing: -0.72px; + margin-left: 116px; +} +.sub_visual08 .bg { + background: url(/html1/images/layout/sub_visual08.jpg) no-repeat center center/cover; +} +.sub_visual .layout h2 { + color: #fff; +} +.sub_visual .news_group { + width: 100%; + height: 100%; +} +.sub_visual .news_group .slick-slide:nth-child(3) { + background-image: url(/html1/images/layout/news_visual03_a1.jpg); + height: 300px; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; +} +.sub_visual .news_group .slick-slide:nth-child(1) { + background-image: url(/html1/images/layout/news_visual01_a1.jpg); + height: 300px; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; +} +.sub_visual .news_group .slick-slide:nth-child(2) { + background-image: url(/html1/images/layout/news_visual02_a1.jpg); + height: 300px; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; +} +.sub_visual .news_group.news1 .slick-slide:nth-child(3) { + background-image: url(/html1/images/layout/news_visual03_b1.jpg); + height: 300px; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; +} +.sub_visual .news_group.news1 .slick-slide:nth-child(1) { + background-image: url(/html1/images/layout/news_visual01_b1.jpg); + height: 300px; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; +} +.sub_visual .news_group.news1 .slick-slide:nth-child(2) { + background-image: url(/html1/images/layout/news_visual02_b1.jpg); + height: 300px; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; +} +.sub_visual .news_group.news1 .slick-slide { + background-image: url(/html1/images/layout/news_visual01_b1.jpg); + height: 300px; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; +} +.sub_visual .news_group .slick-slide:nth-child(2) .title, +.sub_visual .news_group .slick-slide:nth-child(2) .title h2 { + color: #111; +} +.sub_visual .news_group .title { + color: #fff; + margin-top: 60px; +} +.sub_visual .news_group .title .news_logo { + display: inline-block; + vertical-align: middle; +} +.sub_visual .news_group .title .item { + display: inline-block; + vertical-align: middle; + padding : 30px 60px; +} +.sub_visual .title h2 { + font-size: 60px; + letter-spacing: -1.8px; + line-height: 74px; + margin-bottom: 0; +} +.sub_visual .news_group .title .news_logo { + margin-right: 44px; +} +.sub_visual .news_group .title .item p { + font-size: 35px; + letter-spacing: -1.05px; +} +.sub_visual .slick-arrow { + z-index: 1; +} +.sub_visual .slick-prev { + left: 60px; +} +.sub_visual .slick-next { + right: 60px; +} +.sub_visual .slick-prev::before, +.sub_visual .slick-next::before { + position: absolute; + width: 32px; + height: 55px; + background: url("/html1/images/icon/visual_arrow.svg") no-repeat center center/cover; + opacity: 0.5; + top: 0; + left: 0; + content: ""; +} +.sub_visual .slick-prev, +.sub_visual .slick-next { + width: 32px; + height: 55px; +} +.sub_visual .slick-next::before { + transform: rotate(180deg); +} + +.snb { + background: #2e3192; + margin-bottom: 46px; +} +.snb ul { + position: relative; + float: left; + height: 54px; + line-height: 54px; +} +.snb ul.other { + float: right; + line-height: 47px; + background: #1c1f65; + padding-left: 66px; +} +.snb ul.other::before { + position: absolute; + width: 0; + height: 0; + border-top: 54px solid transparent; + border-bottom: 54px solid none; + /* border-right: 54px solid transparent; */ + border-left: 54px solid #2e3192; + left: 0; + content: ""; +} +.snb ul.other::after { + position: absolute; + width: 1000%; + height: 54px; + left: 100%; + background: #1c1f65; + content: ""; +} +.snb ul li { + position: relative; + float: left; + font-size: 18px; + color: #fff; + margin-right: 15px; +} +.snb ul.other li { + font-size: 16px; +} +.snb ul li:last-child { + margin-right: 0; +} +.snb ul li a > * { + display: inline-block; + vertical-align: middle; +} +.snb ul li a > i { + margin-right: 4px; +} +.snb ul li a:focus, +.snb ul li a:hover { + text-decoration: underline; + text-underline-position: under; +} +.snb ul li a.on { + font-weight: 700; + text-decoration: underline; + text-underline-position: under; +} +.snb ul.other li { + padding-right: 10px; + margin-right: 10px; +} +.snb ul.other li::after { + position: absolute; + width: 1px; + height: 18px; + background: #91949c; + top: 18px; + right: 0; + content: ""; +} +.snb ul.other li:nth-child(1) a i { + margin-bottom: 2px; +} +.snb ul.other li:nth-child(3) a i { + margin-right: 4px; + margin-bottom: 2px; +} +.snb ul.other li:last-child:after { + content: none; +} + +/*모바일/전체메뉴 버튼*/ +#header .all_menu { + width: 26px; + height: 23px; +} +#header .all_menu p { +} +#header .all_menu p i { + font-size: 3rem; + vertical-align: middle; + transition: all 1s; + display: none; +} +#header .all_menu p i.hamburger { + width: 26px; + height: 23px; + background: url("../images/layout/hamburger.svg") no-repeat center center/cover; +} +#header.scrolled .all_menu p i.hamburger { + background: url("../images/layout/hamburger_white.svg") no-repeat center center/cover; +} +#header .all_menu .open { + display: block; + font-size: 3rem; +} +#header .all_menu.on .open { + display: none; +} +#header .all_menu .close { + display: none; + font-size: 2.6rem; +} +#header .all_menu.on .close { + display: block; +} + +/*서브바*/ +.snb .layout .snb_wrap { + position: relative; + margin-top: -6rem; +} +.snb .layout .snb_wrap:after { + content: ""; + display: block; + clear: both; +} +.snb .layout .snb_wrap:before { + display: block; + position: absolute; + left: 0; + top: 0; + content: ""; + background: #e50019; + opacity: 0.5; + width: 100%; + height: 100%; +} +.snb .layout .snb_wrap .home { + width: 6rem; + height: 6rem; + display: block; + position: relative; + float: left; +} +.snb .layout .snb_wrap .home i { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: #fff; + font-size: 2rem; +} +.snb .layout .snb_wrap .snb_select { + float: left; + border-left: 1px solid #fff; + position: relative; +} +.snb .layout .snb_wrap .snb_select:last-of-type { + border-right: 1px solid #fff; +} +.snb .layout .snb_wrap .snb_select .select_active { + width: 30rem; + height: 6rem; + line-height: 6rem; + position: relative; + padding-right: 4.25rem; +} +.snb .layout .snb_wrap .snb_select .select_active i { + color: #fff; + font-size: 2.25rem; + position: absolute; + top: 50%; + right: 2rem; + transform: translateY(-50%); +} +.snb .layout .snb_wrap .snb_select .select_active.on { + background: #e50019; +} +.snb .layout .snb_wrap .snb_select .select_active.on i { + transform: translateY(-50%) rotate(180deg); +} +.snb .layout .snb_wrap .snb_select .select_active span { + position: relative; + color: #fff; +} +.snb .layout .snb_wrap .snb_select .select_list { + display: none; + position: absolute; + left: 0; + top: 100%; + width: 100%; + z-index: 1; +} +.snb .layout .snb_wrap .snb_select .select_list:before { + display: block; + position: absolute; + content: ""; + top: 0; + left: 0; + background: #e50019; + opacity: 0.5; + width: 100%; + height: 100%; +} +.snb .layout .snb_wrap .snb_select .select_list li { + border-top: 1px solid #fff; + position: relative; +} +.snb .layout .snb_wrap .snb_select .select_list li a { + padding: 1.25rem 2rem; + display: block; + position: relative; + color: #fff; +} +.snb .layout .snb_wrap .snb_select .select_list li a:hover { + background: #e50019; +} +.snb .layout .snb_wrap .snb_select .select_list li a span { + text-align: center; +} + +/*서브 제목*/ +#sub_tit { + position: relative; + padding: 0 0 5rem 0; + border-bottom: 1px solid #ddd; +} +#sub_tit .layout h3 { + font-size: 3rem; + color: #000; + text-align: center; +} + +/*좌측메뉴*/ +#lnb { + width: 25rem; + height: 100%; + float: left; + margin-bottom: 100px; +} +#lnb .lnb_title { + background: #3352a8; + color: #fff; + padding: 32px 28px; + margin-bottom: 6px; +} +#lnb .lnb_title strong { + font-size: 38px; + letter-spacing: -1.14px; +} +#lnb .lnb_title p { + font-size: 16px; + letter-spacing: -0.48px; + color: rgba(255, 255, 255, 0.4); + display: none; +} +#lnb .lnb_menu > li > a { + display: block; + position: relative; + padding: 12.5px 20px; + color: #3f3f3f; + border-top: 1px solid #e0e0e0; + background: #fff; + letter-spacing: -0.05em; + transition: none; +} +#lnb .lnb_menu > li:last-of-type > a { + border-bottom: 1px solid #e0e0e0; +} +#lnb .lnb_menu > li > a:hover { + color: #222; +} +#lnb .lnb_menu > li > a.on.sub { + background: #8a94af; + color: #fff; +} +#lnb .lnb_menu > li > a.on.sub:after { + transform: translateY(-50%) rotate(90deg); +} + +#lnb .lnb_menu > li > a.sub::after { + position: absolute; + top: 50%; + right: 10px; + transform: translateY(-50%); + font-family: "xeicon"; + font-size: 13px; + content: "\e93e"; + transition: all 0.3s; +} +#lnb .lnb_menu > li > a[target="_blank"]:after { + display: block; + position: absolute; + font-family: "xeicon"; + font-size: 13px; + top: 50%; + right: 10px; + transform: translateY(-50%); + content: "\e980"; +} +#lnb .lnb_menu > li > ul { + display: none; + padding: 1.15rem 1.65rem; + background: #f5f5f5; +} +#lnb .lnb_menu > li > ul > li > a { + position: relative; + display: block; + color: #313131; + padding-left: 1rem; +} +#lnb .lnb_menu > li > ul > li { + margin-bottom: 0.5rem; +} +#lnb .lnb_menu > li > ul > li:first-of-type { + margin-top: 0; +} +#lnb .lnb_menu > li > ul > li > a:hover { + text-decoration: underline; +} +#lnb .lnb_menu > li > ul > li > a.on { + color: #288bcc; +} +#lnb .lnb_menu > li > ul > li > a:before { + content: ""; + display: block; + width: 4px; + height: 4px; + position: absolute; + left: 0; + top: 1.15rem; + background: #888888; +} +#lnb .lnb_menu > li > ul > li > a:hover:before { + background: #888888 !important; +} +#lnb .lnb_menu > li > ul > li > a.on:before { + background: #288bcc; +} + +/*콘텐츠영역*/ +#txt { + margin: 4rem 0; +} + +/*검색*/ +#header .search { + width: 28px; + height: 28px; + margin-right: 1.4rem; + color: #fff; +} +#header.scrolled .search, #wrap:has(.mobile_wrap.on) #header .search, body.on #header .search, #wrap.sub #header .search{ + color: #242424; +} +#header .all_menu{ + color: #fff; +} +#header.scrolled .all_menu, #wrap:has(.mobile_wrap.on) #header .all_menu, body.on #header .all_menu, #wrap.sub #header .all_menu{ + color: #242424; +} +#header .search p i { + font-size: 25px; + vertical-align: middle; + transition: all 1s; + display: none; +} +#header .search p .open { + display: block; +} +#header .search.on p .open { + display: none; +} +#header .search p .close { + display: none; +} +#header .search.on p .close { + display: block; +} +#header .search_box:before { + display: block; + width: 1000%; + background: #fff; + position: absolute; + top: 0; + left: 50%; + content: ""; + height: 100%; + transform: translateX(-50%); + z-index: 2; +} +#header .search_box { + display: none; + position: fixed; + top: 144px; + left: 0; + background: #fff; + width: 100%; + padding: 4.7rem 0; + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; +} +#header .search_box .search_wrap { + position: relative; + width: 600px; + margin: 0 auto; + z-index: 3; +} +#header .search_box .search_wrap strong { + display: block; + position: absolute; + top: 50%; + left: 0; + font-size: 2.5rem; + color: #e50019; + transform: translateY(-50%); + line-height: 100%; + display: none; +} +#header .search_box .search_wrap .search_bar input { + height: 5rem; + width: 100%; + border: 0; + border-bottom: 2px solid #000; + color: #000 !important; +} +#header .search_box .search_wrap .search_bar .submit { + position: absolute; + top: 6px; + right: 0; + width: 4rem; + height: 4rem; +} +#header .search_box .search_wrap .search_bar .submit i { + font-size: 3.2rem; + color: #000; +} + +/*전체메뉴*/ +#wrap:has(.mobile_wrap.on) #header #gnb_wrap{ + justify-content: flex-end; +} +.mobile_wrap { + position: fixed; + top: 102px; + width: 100%; + right: -100%; + height: calc(100% - 102px); + opacity: 0; + transition: all 0.2s; + z-index: 1; + visibility: hidden; + overflow: hidden; +} +.mobile_wrap .layout { + height: 100%; +} +.mobile_menu { + position: relative; + height: 100%; +} +.mobile_menu:before { + width: 20rem; + background: #f6f7f9; + position: absolute; + left: 0; + top: 0; + content: ""; + display: block; + height: 100%; +} +.mobile_menu > ul { + height: 100%; + position: relative; +} +.mobile_menu > ul > li > a { + width: 20rem; + height: 102px; + display: block; + display: table; + background: #f6f7f9; + padding: 0 2rem; +} +.mobile_menu > ul > li > a.on { + background: #e50019; +} +.mobile_menu > ul > li > a.on > span { + color: #fff; +} +.mobile_menu > ul > li > a > span { + display: table-cell; + vertical-align: middle; + text-align: center; + font-size: 2rem; +} +.mobile_menu > ul > li > .sub { + display: none; + position: absolute; + width: calc(100% - 20rem); + left: 20rem; + height: 100%; + top: 0; + padding: 2rem; + background: #fff; +} +.mobile_menu > ul > li.on .sub { + display: block; + padding: 2rem; +} +.mobile_menu > ul > li.on > a { + background: #353541; + color: #fff; +} +.mobile_menu > ul > li > .sub > ul > li > a { + display: block; + padding: 2rem; + position: relative; +} +.mobile_menu > ul > li > .sub > ul > li > a > span { + font-size: 1.8rem; + display: block; +} +.mobile_menu > ul > li > .sub > ul > li { + border-top: 1px solid #ddd; +} +.mobile_menu > ul > li > .sub > ul > li:first-of-type { + border-top: 0; +} +.mobile_menu > ul > li > .sub > ul > li > a.on { + border-bottom: 1px solid #e50019; +} +.mobile_menu > ul > li > .sub > ul > li > .depth { + padding: 2rem; + display: none; +} +.mobile_menu > ul > li > .sub > ul > li > .depth > ul > li { + margin-top: 1rem; +} +.mobile_menu > ul > li > .sub > ul > li > .depth > ul > li:first-of-type { + margin-top: 0; +} +.mobile_menu > ul > li > .sub > ul > li > a:before { + display: block; + position: absolute; + top: 50%; + right: 2rem; + transform: translateY(-50%); + content: ""; + background: url(../../images/layout/mobile_menu_arr.png) no-repeat center center/cover; + width: 1.3rem; + height: 0.8rem; +} +.mobile_menu > ul > li > .sub > ul > li > a.on:before { + transform: translateY(-50%) rotate(-180deg); +} +.mobile_menu > ul > li > a.on + .sub { + display: block; +} +.mobile_menu > ul > li > .sub > ul > li > a.empty:before { + display: none; +} +.mobile_menu ul li a span { + position: relative; +} +.mobile_menu ul li a[target="_blank"] span:after { + width: 13px; + height: 10px; + display: block; + content: ""; + background: url(../../images/layout/blank.png) center center no-repeat; + position: absolute; + top: 50%; + right: 0; + transform: translateY(-50%); +} +.mobile_menu > ul > li > .sub > ul > li > a[target="_blank"] span:after { + width: 13px; + height: 10px; + display: block; + content: ""; + background: url(../../images/layout/blank.png) center center no-repeat; + position: absolute; + top: 50%; + right: 0; + transform: translateY(-50%); +} +.mobile_wrap.on { + opacity: 1; + right: 0; + transition: all 0.2s; + visibility: visible; + overflow: visible; + z-index: 3; +} + +/*전체메뉴 스크롤바*/ +.mobile_wrap .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar { + background: #e50019; +} +.mobile_wrap .mCSB_scrollTools .mCSB_draggerRail { + background: #ddd; +} +.mobile_wrap .mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar, +.mobile_wrap .mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, +.mobile_wrap .mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar { + background: #e50019; +} + +/*상단 탑 이동*/ +.page_topBtn { + position: fixed; + bottom: 20rem; + z-index: 1; + right: 10rem; +} +.page_topBtn a { + width: 6.1rem; + height: 5.7rem; + display: block; +} + +/*푸터*/ +#footer .footer_links{ + background: #2F2F2F; +} +#footer .footer_links .layout{ + display: flex; + align-items: center; + justify-content: space-between; +} +#footer .footer_links .layout > a{ + display: none; +} +#footer .footer_links .layout > div{ + display: flex; + align-items: center; +} +#footer .footer_links .anchor-wrap{ + gap: 42px; +} +#footer .footer_links .anchor-wrap a{ + color: rgba(153, 153, 153, .7); + font-size: 14px; +} +#footer .footer_links .anchor-wrap a:first-of-type{ + color: #fff; +} +#footer .select_wrap .select_box > button:before{ + position: relative; + top: unset; + transform: none; + font-family: 'remixicon'; + content: '\ea4e'; + order: 2; + right: 0; + font-size: 12px; + font-weight: 600; + color: #fff; +} +#footer .select_wrap .select_box > button.on:before{ + transform: rotate(180deg); +} +#footer .select_wrap .select_box > button{ + width: auto; + display: flex; + align-items: center; + justify-content: space-between; + gap: 11px; + background: none; + color: rgba(153, 153, 153, 0.7); + font-size: 14px; +} +#footer .select_wrap .select_box ul{ + width: 100%; +} +#footer .select_wrap .select_box ul{ + bottom: unset; + border: none; + padding: 21px 32px 25px 32px; + background: #515151; +} +#footer .select_wrap .select_box ul li + li{ + margin-top: 9px; + +} +#footer .select_wrap .select_box ul li a{ + height: auto; + color: rgba(178, 178, 178, 1); + font-size: 14px; + line-height: 1.25; + background: unset; + text-align: center; + border: none; +} +#footer .select_wrap .select_box ul li a:hover{ + color: #fff; +} +#footer .footer_bottom{ + background: #1E1E1E; +} +#footer .footer_bottom .layout{ + display: flex; + padding: 91px 0 110px 0; + gap: 54px; +} +#footer .footer-info{ + display: flex; + flex-direction: column; + justify-content: space-between; +} +#footer .footer-info img{ + width: 94px; +} +#footer .footer-info address{ + color: #8F8F8F; + font-size: 15px; + display: flex; + flex-direction: column; +} +#footer .footer-info address span + span{ + padding-top: 12px; +} +#footer .footer-info address span.copyright{ + padding-top: 22px; + font-size: 16px; +} +#footer .footer-anchor ul{ + display: flex; + text-align: left; +} +#footer .footer-anchor > ul > li{ + padding: 0 58px 0 20px; + position: relative; +} +#footer .footer-anchor > ul > li::before{ + display: block; + position: absolute; + top: 0; + right: 0; + width: 1px; + height: 100%; + background: #2C2C2C; + content: ''; +} +#footer .footer-anchor > ul > li:first-of-type{ + padding: 0 58px 0 40px; +} +#footer .footer-anchor > ul > li > p > a{ + color: rgba(255, 255, 255, .7); + font-size: 15px; + font-weight: 600; +} +#footer .footer-anchor ul li ul{ + flex-direction: column; + margin-top: 20px; + gap: 20px; +} +#footer .footer-anchor ul li ul li a{ + color: #8F8F8F; + font-size: 15px; + font-weight: 400; +} +#footer .footer-report{ + display: flex; + flex-direction: column; + justify-content: space-between; + flex: 1; + text-align: right; +} +#footer .footer-report > div p{ + color: rgba(255, 255, 255, .7); + font-size: 15px; + font-weight: 600; +} +#footer .footer-report > div span{ + display: inline-block; + padding-top: 15px; + font-size: 16px; + font-weight: 400; + line-height: 1.875; + color: #8F8F8F; +} +#footer .footer-report ul{ + display: flex; + align-items: center; + justify-content: flex-end; + gap: 6.9px; +} +#footer .footer-report ul li a{ + display: inline-block; + width: 40.86px; + height:40.86px; + font-size: 0; + line-height: 0; + border-radius: 50%; +} +#footer .footer-report ul li a.kakao{ + background: #4E4E4E url(/html1/images/layout/kakao.svg) no-repeat center center; +} +#footer .footer-report ul li a.insta{ + background: #4E4E4E url(/html1/images/layout/insta.svg) no-repeat center center; +} +#footer .footer-report ul li a.youtube{ + background: #4E4E4E url(/html1/images/layout/youtube.svg) no-repeat center center; +} +#footer .footer-report ul li a.facebook{ + background: #4E4E4E url(/html1/images/layout/facebook.svg) no-repeat center center; +} +/*전체메뉴 1000px 이상*/ +@media (min-width: 1px) { + #wrap.main .mobile_wrap .layout{ + padding: 4rem 2rem; + } + .mobile_wrap .layout { + padding: 14rem 2rem; + height: calc(100% - 102px); + } + .mobile_menu > ul { + max-width: 1400px; + margin: 0 auto; + } + .mobile_menu:before { + display: none; + } + .mobile_menu > ul > li > .sub { + width: 100%; + position: relative; + left: auto; + top: auto; + display: block !important; + padding: 2rem 0; + } + .mobile_menu > ul > li > .sub > ul > li { + float: left; + width: 20%; + border-top: 0; + } + .mobile_menu > ul > li > .sub > ul { + overflow: hidden; + } + .mobile_menu > ul > li > .sub > ul > li > a:before { + display: none; + padding: 0; + } + .mobile_menu > ul > li > .sub > ul > li > .depth { + display: block !important; + } + .mobile_menu > ul > li > a { + width: 100%; + height: auto; + background: none; + border-bottom: 2px solid #707070; + padding: 0; + } + .mobile_menu > ul > li > a > span { + display: inline-block; + position: relative; + font-size: 40px; + font-weight: 700; + padding: 1rem; + } + .mobile_menu > ul > li > a > span:before { + content: ""; + display: block; + width: 10px; + height: 10px; + top: 15px; + right: -6px; + background: #e50019; + position: absolute; + } + .mobile_wrap { + background: #fff; + top: -200%; + right: auto; + height: 100%; + } + .mobile_wrap.on { + opacity: 1; + top: 144px; + } + .mobile_wrap.on .mobile_menu > ul { + overflow-y: auto; + height: calc(100% - 90px); + } + .mobile_menu ul li a[target="_blank"] span:after { + position: relative; + display: inline-block; + top: auto; + right: auto; + transform: none; + margin-left: 1rem; + vertical-align: middle; + } + .mobile_menu > ul > li > .sub > ul > li > a[target="_blank"] span:after { + position: relative; + display: inline-block; + top: auto; + right: auto; + transform: none; + margin-left: 1rem; + vertical-align: middle; + } + .mobile_menu > ul > li > .sub > ul > li > a.on { + border: 0; + } + .mobile_menu > ul > li > a.on { + background: none; + } + .mobile_menu > ul > li > a.on span { + color: #555; + } + .mobile_menu > ul > li > .sub > ul > li > a { + font-size: 18px; + font-weight: 500; + color: #515151; + padding: 5px 5px 5px 24px; + } + .mobile_menu > ul > li > .sub > ul > li > a:hover, + .mobile_menu > ul > li > .sub > ul > li > a:focus { + text-decoration: underline; + text-underline-position: under; + } + .mobile_menu > ul > li > .sub > ul > li > a::after { + position: absolute; + width: 8px; + height: 2px; + background: #c6bfbf; + top: 18px; + left: 10px; + content: ""; + } +} + +/* 콘텐츠 탭 */ +.content_tab { + position: relative; + padding-top: 8rem; + overflow: hidden; +} +.content_tab a.tab_tit { + padding: 2rem 1rem; + text-align: center; + display: block; + position: relative; + border: 1px solid #d2d2d2; + color: #646464; + float: left; + position: absolute; + top: 0; + background: #fff; + border-left: 0; +} +.content_tab a.tab_tit.on { + background: #009fdc; + color: #fff; +} +.content_tab a.tab_tit:first-of-type { + border-left: 1px solid #d2d2d2; +} +.content_tab.tab_col_2 a.tab_tit:nth-of-type(1) { + left: 0; +} +.content_tab.tab_col_2 a.tab_tit:nth-of-type(2) { + left: 50%; +} +.content_tab.tab_col_3 a.tab_tit:nth-of-type(1) { + left: 0; +} +.content_tab.tab_col_3 a.tab_tit:nth-of-type(2) { + left: 33.333%; +} +.content_tab.tab_col_3 a.tab_tit:nth-of-type(3) { + left: 66.666%; +} +.content_tab.tab_col_4 a.tab_tit:nth-of-type(1) { + left: 0; +} +.content_tab.tab_col_4 a.tab_tit:nth-of-type(2) { + left: 25%; +} +.content_tab.tab_col_4 a.tab_tit:nth-of-type(3) { + left: 50%; +} +.content_tab.tab_col_4 a.tab_tit:nth-of-type(4) { + left: 75%; +} +.content_tab.tab_col_5 a.tab_tit:nth-of-type(1) { + left: 0; +} +.content_tab.tab_col_5 a.tab_tit:nth-of-type(2) { + left: 20%; +} +.content_tab.tab_col_5 a.tab_tit:nth-of-type(3) { + left: 40%; +} +.content_tab.tab_col_5 a.tab_tit:nth-of-type(4) { + left: 60%; +} +.content_tab.tab_col_5 a.tab_tit:nth-of-type(5) { + left: 80%; +} +.content_tab.tab_col_2 a.tab_tit { + width: 50%; +} +.content_tab.tab_col_3 a.tab_tit { + width: 33.333%; +} +.content_tab.tab_col_4 a.tab_tit { + width: 25%; +} +.content_tab.tab_col_5 a.tab_tit { + width: 20%; +} +.content_tab .tab_txt { + display: none; + padding: 4rem 2rem; + border: 1px solid #d2d2d2; + background: #f8f8f8; +} +.content_tab .tab_txt:first-of-type { + display: block; +} +/* //콘텐츠 탭 */ + +/*셀렉트 박스*/ +.select_box { + position: relative; +} +.select_box > button { + display: block; + background: #9b9b9b; + position: relative; + height: 5rem; + line-height: 5rem; + width: 262px; + text-align: left; + padding: 0 2rem; + color: #fff; + font-size: 16px; +} +.select_box > button:before { + position: absolute; + top: 50%; + transform: translateY(-50%); + font-family: "xeicon"; + font-size: 11px; + content: "\e935"; + right: 2rem; + transition: all 0.2s; +} +.select_box > button.on:before { + transform: translateY(-50%) rotate(180deg); +} +.select_box ul { + display: none; +} +.select_box ul li a { + display: block; + color: #fff; + font-weight: 300; + background: #fff; + position: relative; + height: 5rem; + line-height: 5rem; + width: 100%; + text-align: left; + padding: 0 1rem; + border-top: 1px solid #9b9b9b; + color: #555; +} +.select_box ul li a:hover { + background: #9b9b9b; + color: #fff; +} +.select_box ul li:first-of-type a { + border-top: 0; +} +.select_box ul { + position: absolute; + bottom: 50px; + border: 1px solid #9b9b9b; + overflow: hidden; + width: 262px; + z-index: 100; +} +/*//셀렉트 박스*/ + +a.more_link { + position: absolute; + top: 20px; + right: 0; + font-size: 16px; +} +a.more_link:focus, +a.more_link:hover { + text-decoration: underline; + text-underline-position: under; +} + +.group { + position: relative; +} +body:has(.news-main) .quick_nav_wrap main{ + top:5%; + } +.quick_nav_wrap.main { + position: absolute; + top: 10%; + -webkit-transition: all 1s; + transition: all 1s; + z-index: 2; +} +.quick_nav_wrap.main.fixed { + position: fixed; + top: 28%; +} +.quick_nav_wrap.main:has(.fixed) { + position: fixed; + top: 28%; +} +#quick_nav{ + border: 1.389px solid #EFEFEF; + width: 95px; + border-radius: 5px 0 0 5px; + text-align: center; + overflow: hidden; +} +#quick_nav > p{ + background: #E7280E; + font-size: 16px; + font-weight: 600; + color: #fff; + padding: 12px 3px; +} +#quick_nav ul{ + background: #fff; +} +#quick_nav ul li a{ + display: flex; + flex-direction: column; + gap: 5px; + padding: 12px 5px 15px 5px; + align-items: center; +} +#quick_nav ul li a + a{ + border-top: 1px solid #EFEFEF; +} +#quick_nav ul li a span{ + color: #444; + font-size: 14px; + font-weight: 500; + position: relative; +} +#quick_nav ul li a span::before{ + display: block; + position: absolute; + right: -5px; + bottom: -3px; + z-index: -1; + width: 0; + height: 10px; + border-radius: 5px; + background-color: #f9ece2; + transition-property: left, right, width; + transition-duration: .25s; + transition-timing-function: ease-in-out; + content: ''; +} +#quick_nav ul li a:hover span::before{ + left: -5px; + right: auto; + width: calc(100% + 10px); + z-index: 1; + opacity: .5; +} +#quick_nav ul li a i{ + display: inline-block; + width: 26.57px; + height: 26.57px; + transition-property: transform; + transition-duration: 0s; + transition-timing-function: ease-in-out; +} +#quick_nav ul li a:hover i{ + transform: rotateY(360deg); + transition-duration: .4s; +} +#quick_nav ul li a.n01 i{ + background: url(/html1/images/layout/quick-icon01.svg)no-repeat center center; +} +#quick_nav ul li a.n02 i{ + background: url(/html1/images/layout/quick-icon02.svg)no-repeat center center; +} +#quick_nav ul li a.n03 i{ + background: url(/html1/images/layout/quick-icon03.svg)no-repeat center center; +} +#quick_nav ul li a.n04 i{ + background: url(/html1/images/layout/quick-icon04.svg)no-repeat center center; +} +#quick_nav button{ + background: #333333; + font-size: 16px; + font-weight: 600; + color: #fff; + display: flex; + align-items: center; + justify-content: center; + gap: 5.4px; + padding: 12px 5px 14px 5px; + width: 100%; +} +#quick_nav button i{ + align-self: flex-end; +} +/* #quick_nav { + position: absolute; + width: 90px; + top: 0; + right: -100px; + background: #ffc601; + border-radius: 100px; + text-align: center; + padding: 32px 0; + box-shadow: 10px 10px 10px rgba(0, 0, 0, 0.09); + -webkit-transition: all 1s; + transition: all 1s; +} +#quick_nav a { + display: block; + position: relative; +} +#quick_nav a::after { + display: block; + width: 73px; + height: 1px; + background: #f1f0ee; + margin: 8px auto; + content: ""; +} +#quick_nav a:last-child::after { + content: none; +} +#quick_nav a i { + display: block; +} +#quick_nav a i[class*="xi-"] { + font-size: 38px; + color: #fff; +} +#quick_nav a i img { + height: 30px; +} +#quick_nav a > img { + height: 40px; +} +#quick_nav a p { + font-size: 14px; + font-weight: 500; + letter-spacing: -0.8px; + margin-top: 5px; + line-height: 16px; +} +#quick_nav.fixed { + position: fixed; + top: 28%; +} +#quick_nav a:focus, +#quick_nav a:hover { + text-decoration: none; +} */ + +/* on air */ +/* #header .on_air { + position: absolute; + height: 29px; + text-align: left; + font-weight: 700; + z-index: 2; +} +#header .on_air::after { + display: block; + clear: both; + content: ""; +} +.on_air > .title { + float: left; + width: 76px; + height: 29px; + color: #000; + background: #e9e9e9; + border-radius: 0 0 0 20px; + text-align: center; +} +.on_air > .title > .red { + display: inline-block; + width: 1.2rem; + height: 1.2rem; + border-radius: 50%; + background: #ed1c23; +} +.on_air > ul { + float: left; + width: 119px; + height: 29px; + background: #2e3192; + border-radius: 0 0 20px 0; + padding-right: 4px; + text-align: center; +} +#header.scrolled .on_air > ul { + background: #fff; +} +.on_air > ul li { + display: inline-block; + width: 40px; + width: auto; + text-align: center; +} +.on_air > ul li a { + display: block; + position: relative; + color: #fff; +} +.on_air > ul li a:focus, +.on_air > ul li a:hover { + color: #ed1c23; +} +#header.scrolled .on_air > ul li a { + color: #292929; +} +.on_air > ul li:first-child a { + padding-right: 10px; + margin-right: 5px; +} +.on_air > ul li:first-child a::after { + position: absolute; + width: 1px; + height: 13px; + background: #888; + top: 7px; + right: 0; + content: ""; +} +#header.scrolled .on_air > ul li:first-child a::after { + background: #292929; +} */ +/* .on_air > ul li a { + display: block; + width: 29px; + height: 18px; + font-size: 10px; + font-weight: 700; + background: url('/html1/images/layout/on_air_btn_bg.svg') no-repeat center center/100%; + color: #fff; +} */ +/* //on air */ + +@media (min-width: 1px) { + /* 210602 헤더 소규모 사이트 스타일로 변경 */ + #header #gnb_wrap #gnb > ul { + /* display: table; + table-layout: fixed; */ + width: 100%; + } + #header #gnb_wrap #gnb > ul > li { + /* display: table-cell; + vertical-align: middle; */ + width: auto; + position: static; + margin-right: 8%; + } + #header #gnb_wrap #gnb > ul > li > a { + display: block; + text-align: center; + height: auto; + line-height: normal; + position: relative; + padding: 40px 0 29px; + } + #header #gnb_wrap #gnb > ul > li > a > span { + /* display: inline-block; + vertical-align: middle; + line-height: 100%; */ + } + #header #gnb_wrap #gnb > ul > li > a.on:before { + content: ""; + display: block; + width: 10px; + height: 10px; + bottom: -14px; + left: 50%; + transform: translateX(-50%); + position: absolute; + background: #ed1c23; + } + #header #gnb_wrap #gnb > ul > li > .sub { + display: none; + position: absolute; + width: 116rem; + top: 100%; + left: 50%; + transform: translateX(-50%); + text-align: center; + padding-top: 1.1rem; + padding-left: 29rem; + } + #header #gnb_wrap #gnb > ul > li > .sub::before { + position: absolute; + width: 1000vw; + height: 23.5rem; + top: 0; + left: -500%; + background: #fff; + border: 1px solid #bcbcbc; + z-index: -1; + content: ""; + border-top: none; + } + #header #gnb_wrap #gnb > ul > li > .sub > ul { + display: block; + width: 100%; + height: 7rem; + } + #header #gnb_wrap #gnb > ul > li > .sub > ul > li { + float: left; + width: 23.3%; + } + #header #gnb_wrap #gnb > ul > li > .sub > ul > li > .depth_01 { + display: none; + } + #header #gnb_wrap #gnb > ul > li > .sub > ul > li:first-of-type { + padding-top: inherit; + } + #header #gnb_wrap #gnb > ul > li > .sub > ul > li:last-of-type { + padding-bottom: inherit; + } + #header #gnb_wrap #gnb > ul > li > .sub > ul > li { + margin: 4px; + } + #header #gnb_wrap #gnb > ul > li > .sub .sub_left { + position: absolute; + top: 3.2rem; + left: 0; + text-align: center; + } + #header #gnb_wrap #gnb > ul > li > .sub .sub_left strong { + display: block; + font-size: 4rem; + } + #header #gnb_wrap #gnb > ul > li > .sub .sub_left p { + font-size: 1.6rem; + line-height: 2.4rem; + text-align: left; + color: #7e7e7e; + margin: 1.6rem auto 2rem; + } + #header #gnb_wrap #gnb > ul > li > .sub .sub_left .bottom { + display: none; + } + #header #gnb_wrap #gnb > ul > li > .sub > ul > li > a { + position: relative; + text-align: left; + border: 1px solid #ccc; + -webkit-transition: all 0.3s; + transition: all 0.3s; + font-size: 16px; + padding: 0.4rem 1rem; + } + #header #gnb_wrap #gnb > ul > li > .sub > ul > li > a > span { + display: block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + max-width: 85%; + } + #header #gnb_wrap #gnb > ul > li > .sub > ul > li > a::after { + position: absolute; + top: 50%; + right: 18px; + transform: translateY(-50%); + font-family: "xeicon"; + font-size: 14px; + content: "\e93e"; + } + #header #gnb_wrap #gnb > ul > li > .sub > ul > li > a:focus, + #header #gnb_wrap #gnb > ul > li > .sub > ul > li > a:hover { + border-color: #2d3091; + } +} + +.blinking { + -webkit-animation: blink 1.5s ease-in-out infinite alternate; + -moz-animation: blink 1.5s ease-in-out infinite alternate; + animation: blink 1.5s ease-in-out infinite alternate; +} +@-webkit-keyframes blink { + 0% { + opacity: 0.2; + } + 100% { + opacity: 1; + } +} +@-moz-keyframes blink { + 0% { + opacity: 0.2; + } + 100% { + opacity: 1; + } +} +@keyframes blink { + 0% { + opacity: 0.2; + } + 100% { + opacity: 1; + } +} +.wide #content_wrap .top .sub_nav { + text-align: right; + margin-top: 14px; + margin-right: 128px; +} +#content_wrap .top .sub_nav { + display: block; + margin-top: 0; + margin-right: 0; +} +#content_wrap .top .sub_nav a { + position: relative; + color: #9b9b9b; +} +#content_wrap .top .sub_nav a:last-child { + color: #000; + font-weight: 500; +} +#content_wrap .top .sub_nav a span { + font-size: 1.7rem; + color: #292929; + vertical-align: middle; +} +#content_wrap .top .sub_nav a::after { + display: inline-block; + position: relative; + vertical-align: middle; + font-family: "xeicon"; + font-size: 1.7rem; + content: "\e93f"; + margin: 0 0.4rem 0 0.6rem; +} +#content_wrap .top .sub_nav a:last-child:after { + content: none; +} +#content_wrap .top .sub_nav a i { + font-size: 1.7rem; + color: #7b766d; +} +.wide #content_wrap .top .utill { + float: left; +} +.wide #content_wrap .top { + position: absolute; + width: 100%; + border-bottom: 1px solid #676767; + padding: 10px 0; + top: 0; +} +#content_wrap .top { + position: relative; + top: inherit; + border-bottom: 1px solid #676767; + padding: 10px 0 20px; + margin-bottom: 20px; +} +#content_wrap .top .utill { + position: absolute; + top: 50%; + right: 0; + transform: translateY(-50%); + float: none; +} +#content_wrap .top .utill button { + display: inline-block; + float: none; + position: relative; + width: 3.4rem; + height: 3.4rem; + border-radius: 50%; + border: 1px solid #bcbcbc; + vertical-align: top; + margin-right: 0.6rem; + color: #545454; + -webkit-transition: all 0.3s; + transition: all 0.3s; +} +#content_wrap .top .utill button:focus, +#content_wrap .top .utill button:hover { + background: #333; +} +#content_wrap .top .utill button:focus > i, +#content_wrap .top .utill button:hover > i { + color: #fff; +} +#content_wrap .top .utill button:last-child { + margin-right: 0; +} +#content_wrap .top .utill .share .list { + visibility: hidden; + overflow: hidden; + position: absolute; + top: 4rem; + left: 50%; + height: 0; + margin-top: 0; + padding: 0; + border: 1px solid #ddd; + background-color: #fff; + opacity: 0; + transform: translate(-50%, 0); + transition: margin-top 0.3s, opacity 0.3s; +} +#content_wrap .top .utill .share .list::before { + position: absolute; + left: 50%; + top: -0.5rem; + width: 0.8rem; + height: 0.8rem; + margin-left: -0.4rem; + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; + background-color: #fff; + content: ""; + transform: rotate(45deg); +} +#content_wrap .top .utill .share .list a { + display: block; +} +#content_wrap .top .utill .share .list a > i { + font-size: 2rem; + margin: 0.4rem 0; +} +#content_wrap .top .utill .share.active .list { + visibility: visible; + overflow: visible; + height: auto; + margin-top: 0.6rem; + padding: 1rem 2rem; + opacity: 1; + z-index: 1; +} + +input[type="text"]::-ms-clear { + display: none; +} + +#header .utill { + position: absolute; + top: 60px; + right: 5.7rem; + height: 88px; + display: flex; + align-items: center; +} +/* #header .utill > .on_air, */ +#header .utill > .login, +#header .utill > button { + display: flex; + align-items: center; + justify-content: center; +} +#header .utill > .login { + margin-right: 19px; +} + +#header .member_btns { + display: flex; + top: 4px; + align-items: center; + padding: 3px 0; + position: absolute; + background: #e9e9e9; + border-radius: 5px; +} +#header .member_btns a { + display: inline-block; + position: relative; + padding: 0 17px !important; + vertical-align: middle; + text-align: center; + font-size: 14px; + font-weight: 500; +} +#header .member_btns a::after { + position: absolute; + width: 1px; + height: 15px; + background: #b1b1cf; + top: 3px; + right: 0; + content: ""; +} +#header .member_btns a:last-child:after { + content: none; +} +#header.scrolled .member_btns a { + color: #292929; +} +#header .login a:last-child { + padding-right: 0; + margin-right: 0; +} + +.snb ul.other li:nth-child(4) { + font-weight: 500; + color: #ffc924; +} + +#quick_nav.news { + top: 0; + right: -100px; + background: transparent; + border-radius: 0; + padding: 0; + box-shadow: none; +} +#quick_nav.news a i { + font-size: 51px; + color: #442c19; + line-height: 0.8; +} +#quick_nav.news a p { + margin-top: 0; +} +#quick_nav.news ul li { + margin-bottom: 10px; +} +#quick_nav.news ul li a { + background: #ffeb01; + border-radius: 20px; + padding: 16px 0; + box-shadow: 10px 10px 10px rgb(0 0 0 / 3%); +} +#quick_nav.news ul li a:focus p, +#quick_nav.news ul li a:hover p { + text-decoration: underline; + text-underline-position: under; +} +#quick_nav.news ul li.allnews a { + border-radius: 20px; + padding: 6px 0; + background: #0a93fa; + box-shadow: 10px 10px 10px rgb(0 0 0 / 3%); + color: #fff; +} +#quick_nav.news ul li.allnews a i { + display: block; + width: 3.8rem; + height: 3.8rem; + border-radius: 50%; + background: #2c62da; + margin: 0 auto 0.4rem; + font-size: 2.6rem; + color: #fff; +} +#quick_nav.news ul li.dataroom a { + border-radius: 20px; + padding: 9px 0; + background: #60d4ff; + box-shadow: 10px 10px 10px rgb(0 0 0 / 3%); + color: #311f1d; +} +#quick_nav.news ul li.dataroom a i { + display: block; + margin: 0 auto 0.4rem; + font-size: 4rem; + color: #15286e; +} +#quick_nav.news ul li.allnews a i img { + height: auto; +} +.quick_nav_wrap.fixed { + position: fixed; + top: 28%; +} + +#footer.news .footer_links { + line-height: 50px; +} + +.quick_nav_wrap { + position: absolute; + top: 10%; + right: 0; + -webkit-transition: all 1s; + transition: all 1s; + z-index: 1; +} +.quick_nav_wrap.sub { + top: 21%; +} +.quick_nav_wrap.sub.fixed { + top: 28%; +} +#quick_nav.news.sub { + padding: 6px 0; + background: #0a93fa; +} +#quick_nav.news.sub a i { + font-size: 0; + line-height: normal; + margin-bottom: 4px; +} +#quick_nav.news.sub a i img { + height: auto; +} +#quick_nav.news.sub a p { + color: #fff; + font-size: 15px; + line-height: 1.4; +} +#quick_nav.news.sub a:nth-child(1) i { + display: block; + width: 3.8rem; + height: 3.8rem; + border-radius: 50%; + background: #2c62da; + margin: 0 auto 0.4rem; + font-size: 2.6rem; + color: #fff; +} +#quick_nav.news.sub a:nth-child(1) i::before { + position: relative; + top: 0.5rem; +} + +.main .sub_visual { + margin-bottom: 20px; +} + +.section03 .half > div:first-child a.more_link { + top: -32px; +} + +#content_wrap .tb_style02 { + table-layout: fixed; +} + +#footer a.pop-link { + display: inline-block; + height: 15px; + line-height: 14px; + padding: 0 4px; + border: 1px solid #ccc; + background-color: #fff; + color: #949494; + font-size: 11px; + margin-left: 5px; + } + + + /* 2025 메인개편 */ + #header{ + background: rgba(0, 0, 0,0); + border-bottom: none; + height: 144px; + } + #header.scrolled, #wrap:has(.mobile_wrap.on) #header, body.on #header, #wrap.sub #header{ + background: #fff; + border-bottom: 1px solid #ddd; + } + #header .logo_wrap{ + left: 59px; + margin-top: 0; + top: 88px; + transform: translateY(0); + } + #header .logo_wrap .logo a{ + width: 17.8rem; + height: 3.1rem; + } + #header #gnb_wrap #gnb > ul > li{ + margin-right: 4.5rem; + } + #header #gnb_wrap #gnb > ul > li > a{ + color: #fff; + font-family: 'Inter'; + font-size: 2rem; + display: flex; + height: 100%; + align-items: center; + padding: unset; + } + #header.scrolled #gnb_wrap #gnb > ul > li > a, + #wrap:has(.mobile_wrap.on) #header #gnb_wrap #gnb > ul > li > a, + body.on #header #gnb_wrap #gnb > ul > li > a, + #wrap.sub #header #gnb_wrap #gnb > ul > li > a{ + color: #212121; + } + #header #gnb_wrap #gnb > ul > li a.news span{ + display: flex; + align-items: center; + justify-content: center; + width: 125px; + height: 43px; + font-size: 19px; + font-weight: 700; + font-family: 'Inter'; + border-radius: 900px; + color: #fff; + padding: 2px; + transition: all .2s linear; + border: 1px solid #c8c8c8; + position: relative; +} +#header.scrolled #gnb_wrap #gnb > ul > li a.news span, #wrap:has(.mobile_wrap.on) #header #gnb_wrap #gnb > ul > li a.news span, body.on #gnb_wrap #gnb > ul > li a.news span, #wrap.sub #gnb_wrap #gnb > ul > li a.news span{ + background: linear-gradient(112deg, #E7280E 6.88%, #1D2088 93.18%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +#header #gnb_wrap #gnb > ul > li a.news span::before{ + display: block; + position: absolute; + top: -1px; + left: -1px; + width: calc(100% + 2px); + height: calc(100% + 2px); + background: url('/html1/images/main02/menu-bg.png')no-repeat center center; + background-size: contain; + content: ''; + opacity: 0; + visibility: hidden; + transition: all 0.2s linear; +} +#header #gnb_wrap #gnb > ul > li a.on.news span{ + border: none; +} +#header #gnb_wrap #gnb > ul > li a.on.news span::before{ + opacity: 1; + visibility: visible; +} +#header #gnb_wrap #gnb > ul > li > a.on.news:before{ + display: none; +} + #header #gnb_wrap{ + display: flex; + align-items: center; + justify-content: space-between; + height: 80px; + } + #header #gnb_wrap #gnb{ + width: 72rem; + height: 100%; + } + #header .login > a{ + color: #fff; + } + #header.scrolled .login > a, #wrap:has(.mobile_wrap.on) #header .login > a, body.on #header .login > a, #wrap.sub #header .login > a{ + color: #666; + } + .on_air{ + display: flex; + align-items: center; + } + .on_air > .title { + display: flex; + align-items: center; + } + .on_air > .title > .red { + width: .6rem; + height: .6rem; + border-radius: 50%; + background: #ed1c23; + display: inline-block; + vertical-align: middle; +} +.on_air > ul{ + margin-left: .6rem; + position: relative; +} +.on_air > ul > li p{ + color: #fff; + font-size: 1.7rem; + font-weight: 700; + font-family: 'Inter'; + cursor: pointer; +} +#header.scrolled .on_air > ul > li p, #wrap:has(.mobile_wrap.on) #header .on_air > ul > li p, body.on .on_air > ul > li p,#wrap.sub .on_air > ul > li p{ + color: #32383E; +} +.on_air ul .live{ + position: absolute; + bottom: -40px; + left: 50%; + width: 129px; + height: 40px; + background: #2E2F47; + box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25); + transform: translateX(-50%); + opacity: 0; + visibility: hidden; + transition: all .2s linear; + z-index: 2; +} +.on_air ul .live.hover{ + opacity: 1; + visibility: visible; +} +.on_air ul .live ul{ + width: 100%; + display: flex; + align-items: center; + justify-content: center; + gap: 33px; + height: 100%; +} +.on_air ul .live ul li a{ + color: #fff; + font-size: 13px; + font-weight: 500; +} +.on_air ul .live ul li + li a{ + position: relative; +} +.on_air ul .live ul li + li a::before{ + display: block; + position: absolute; + top: 50%; + left: -16.5px; + width: 1px; + height: 14px; + background: rgba(217, 217, 217, 0.20); + content: ''; + transform: translateY(-50%); +} +.on_air .report{ + margin-left: 1.4rem; +} +.on_air .report a{ + display: flex; + align-items: center; + justify-content: center; + width: 7rem; + height: 3.2rem; + background: #fff; + border-radius: 10rem; + font-size: 1.6rem; + font-weight: 600; + color: #3F71A2; +} +#header.scrolled .on_air .report a, #wrap:has(.mobile_wrap.on) #header .on_air .report a, body.on .on_air .report a, #wrap.sub .on_air .report a{ + background: #f2f2f2; +} +/* 관리자 로그인 시 보이는 화면 */ +#header.admin #gnb_wrap{ + max-width: 1120px; +} +#header.admin .utill > .login{ + flex-wrap: wrap; + width: 230px; + height: 100%; + align-items: flex-start; +} +#header.admin .login > a{ + order: 2; +} +#header.admin .member_btns{ + position: relative; + top: 4px; + width: 100%; + order: 1; +} +@media (max-width: 1920px) and (min-width:1681px){ + #header #gnb_wrap{ + max-width: 960px; + } + #header.admin #gnb_wrap{ + max-width: 880px; + } +} +@media (max-width: 1820px) { + #header #gnb_wrap{ + padding: unset !important; + } +} +@media (max-width: 1680px) and (min-width:1201px){ + #header .on_air{ + padding-right: 20px; + } + #header #gnb_wrap{ + justify-content: flex-start; + gap: 40px; + } + #header #gnb_wrap #gnb{ + padding-left: 130px; + width: 80rem; + } + #header.admin #gnb_wrap{ + margin-left: 90px; + gap: 20px; + padding-left: 1rem; + justify-content: flex-start; + } + #header .logo_wrap .logo a{ + width: 16rem; + } + #header #gnb_wrap #gnb > ul > li > .sub > ul > li{ + width: 22%; + } + #header .logo_wrap{ + left: 30px; + } + #header .utill{ + right: 30px; + } +} +@media (max-width: 1420px) and (min-width:1201px){ + #header #gnb_wrap #gnb{ + padding-left: 210px; + width: 70rem; + } + #header.admin #gnb_wrap #gnb{ + padding-left: 0; + } + #header #gnb_wrap #gnb > ul > li a.news span{ + width: 100px; + height: 35px; + } +} +@media (max-width: 1420px){ + #header #gnb_wrap #gnb > ul > li a.news span{ + font-size: 16px; + width: 110px; + height: 37px; + } + #header.admin #gnb_wrap{ + margin-left: 200px; + } + #header.admin #gnb_wrap #gnb{ + width: 49rem; + } + #header.admin .utill > .login{ + margin-right: 5px; + } +} +@media (max-width: 1200px){ + #header #gnb_wrap #gnb{ + display: none; + } + #header .logo_wrap{ + left: 20px; + } + #header .utill{ + right: 20px; + } + .on_air{ + position: relative; + left: 0; + margin-left: 251px; + } + .news-lnb .wrap{ + padding: 0 20px; + } + #header.admin #gnb_wrap{ + width: 100%; + margin-left: 0; + } + .banner-wrap{ + display: none; + } +} +#container.main:has(.visual){ + padding-top: 64px; +} +.quick_nav_wrap{ + display: none !important; +} +.replay .content_tab .tab_txt ul li a.active{ + background-color: rgba(255, 255, 255, .1); +} +#container:has(.news-lnb) .wide #content_wrap .top .sub_nav{ + margin-right: 60px; +} + +/* 헤더 띠배너 추가 */ +#header .header-banner{ + background: linear-gradient(0deg, #253352 0%, #253352 100%), linear-gradient(90deg, #DAF1CC 0%, #E0F5F1 50%, #D0F4F8 75%, #88F1DD 100%); + height: 64px; +} +#header .header-banner a{ + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; +} + +/* 광고배너 */ +.banner-wrap{ + position: fixed; + width: 1200px; + margin: 0 auto; + top: 230px; + left: 50%; + transform: translateX(-50%); + -webkit-transition: all 1s; + transition: all 1s; + z-index: 1; + opacity: 0; + visibility: hidden; +} +.banner-wrap.active{ + opacity: 1; + visibility: visible; +} +.sub .banner-wrap{ + opacity: 1; + visibility: visible; + top: 40%; + +} +body:has(#header.scrolled) .sub .banner-wrap{ + top: 30%; +} +.banner-wrap .banner-list{ + position: absolute; + top: 0; + display: flex; + flex-direction: column; +} +.banner-wrap .banner-list.left{ + left: -191px; +} +.banner-wrap .banner-list.right{ + right: -191px; +} +.banner-wrap .banner-list a{ + position: relative; + width: 136px; + height: 192px; +} +.banner-wrap .banner-list a img{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + object-fit: cover; +} + +/* 배너사이즈조정 */ +.banner-wrap .banner-list{ + gap: 20px; +} +.banner-wrap .banner-list a{ + width: 300px; +} +.banner-wrap .banner-list.left{ + left: -330px; +} +.banner-wrap .banner-list.right{ + right: -330px; +} +@media (max-width: 1870px){ +.banner-wrap .banner-list.left{ + left: -310px; +} +.banner-wrap .banner-list.right{ + right: -310px; +} +} +@media (max-width: 1820px){ + .banner-wrap{ + width: 100%; + } + .banner-wrap .banner-list.left{ + left: 0; +} +.banner-wrap .banner-list.right{ + right: 0; +} +.banner-wrap .banner-list a{ + width: 250px; +} +} + +/* 배너닫기버튼추가 */ +.banner-wrap .exit{ + width: 40px; + height: 40px; + border-radius: 50%; + background: #2F2F2F; + margin: 0 auto; + position: relative; +} +.banner-wrap .exit i { + display: inline-block; + width: 100%; + height: 100%; + background: url(/html1/images/layout/exit.svg)no-repeat center center; + +} \ No newline at end of file diff --git a/tjb.html b/tjb.html new file mode 100644 index 0000000..cca8b57 --- /dev/null +++ b/tjb.html @@ -0,0 +1,2176 @@ + + + + + + + +True Joy Begins 즐거운 미디어 문화가 펼쳐집니다. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+
+ +
+
+ + +
+
+
+
+
+

TV 프로그램

+
+ +
+ +
+
+ +
+
+
+
+
+
+
+
+

+ + TJB 유튜브 다시보기 +

+
+ + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+

+ New Media +

+

더 다양한 TJB의 소식을 만나보세요.

+
+ +
+
+
+
+ +
+
+ +
+ + + +
+ + + + + +
+ +