style: upgrade admin panel theme to Tabler native vertical layout with light/dark mode support
TaxBaik CI/CD / build-and-deploy (push) Successful in 58s
TaxBaik CI/CD / build-and-deploy (push) Successful in 58s
This commit is contained in:
@@ -45,7 +45,7 @@
|
||||
<span class="text-muted small text-uppercase fw-semibold" style="letter-spacing: 0.5px;">데이터베이스</span>
|
||||
<span class="avatar avatar-md rounded-circle bg-indigo-lt text-indigo"><i class="bi bi-database-fill-check"></i></span>
|
||||
</div>
|
||||
<h3 class="fw-bold text-dark mb-1 font-numeric">Flyway Migration</h3>
|
||||
<h3 class="fw-bold text-dark mb-1 font-numeric">DbUp Migration</h3>
|
||||
<p class="text-muted small mb-0">SQL 스키마 형상 버전 실시간 추적</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -132,7 +132,7 @@
|
||||
<div class="alert alert-info d-flex align-items-start gap-2 mb-3" role="alert">
|
||||
<i class="bi bi-info-circle-fill text-info mt-1"></i>
|
||||
<div class="small leading-relaxed text-muted">
|
||||
본 시스템은 Razor Pages, Dapper, Flyway, Cookie Auth 및 Tabler CSS 라이브러리를 탑재한 서버 사이드 렌더링 프레임워크로 가볍고 안전합니다.
|
||||
본 시스템은 Razor Pages, Dapper, DbUp, Cookie Auth 및 Tabler CSS 라이브러리를 탑재한 서버 사이드 렌더링 프레임워크로 가볍고 안전합니다.
|
||||
</div>
|
||||
</div>
|
||||
<div class="card bg-light border border-light-subtle rounded-3 p-3 mt-3">
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<div class="col">
|
||||
<div class="page-pretitle">TaxBaik Admin</div>
|
||||
<h2 class="page-title">고객관리 어드민</h2>
|
||||
<p class="text-muted mb-0">Razor Pages + Cookie Authentication + Dapper + Flyway 기준으로 정리하는 서버 렌더링 어드민입니다.</p>
|
||||
<p class="text-muted mb-0">Razor Pages + Cookie Authentication + Dapper + DbUp 기준으로 정리하는 서버 렌더링 어드민입니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -16,147 +16,248 @@
|
||||
<title>@(ViewData["Title"] ?? "TaxBaik Admin")</title>
|
||||
<meta name="theme-color" content="#1F4E79" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
|
||||
<!-- Tabler Core & Icons -->
|
||||
<link href="https://cdn.jsdelivr.net/npm/@@tabler/core@1.0.0/dist/css/tabler.min.css" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
|
||||
|
||||
<!-- Custom CSS -->
|
||||
<link rel="stylesheet" href="~/css/admin.css" asp-append-version="true" />
|
||||
|
||||
<!-- Fast head theme load script to prevent flashing -->
|
||||
<script>
|
||||
(function () {
|
||||
var theme = localStorage.getItem('tablerTheme') || 'light';
|
||||
document.documentElement.setAttribute('data-bs-theme', theme);
|
||||
})();
|
||||
</script>
|
||||
</head>
|
||||
<body class="admin-app bg-light">
|
||||
<div class="page admin-shell min-vh-100 d-flex flex-column">
|
||||
<!-- Topbar Panel -->
|
||||
<header class="navbar navbar-expand-md navbar-light d-print-none admin-topbar py-2 sticky-top">
|
||||
<div class="container-fluid px-3">
|
||||
<div class="d-flex align-items-center gap-3 flex-wrap admin-topbar-branding">
|
||||
<div class="navbar-brand">
|
||||
<a href="/admin/dashboard" class="text-decoration-none text-dark fw-bold d-flex align-items-center gap-2">
|
||||
<span class="avatar avatar-sm bg-primary text-white rounded-3"><i class="bi bi-safe-fill"></i></span>
|
||||
<span>TaxBaik <span class="text-primary">Admin</span></span>
|
||||
<body class="layout-fluid">
|
||||
<div class="page">
|
||||
<!-- Sidebar Panel (Tabler Native Vertical Navbar) -->
|
||||
<aside class="navbar navbar-vertical navbar-expand-lg navbar-dark bg-dark d-print-none" data-bs-theme="dark">
|
||||
<div class="container-fluid">
|
||||
<!-- Toggle Button for Mobile -->
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar-menu" aria-controls="sidebar-menu" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<!-- Logo & Branding -->
|
||||
<h1 class="navbar-brand navbar-brand-autodark px-2">
|
||||
<a href="/admin/dashboard" class="text-decoration-none text-white fw-bold d-flex align-items-center gap-2">
|
||||
<span class="avatar avatar-sm bg-primary text-white rounded-3"><i class="bi bi-safe-fill"></i></span>
|
||||
<span>TaxBaik <span class="text-primary-light small">Admin</span></span>
|
||||
</a>
|
||||
</h1>
|
||||
|
||||
<!-- Mobile User Dropdown -->
|
||||
<div class="navbar-nav flex-row d-lg-none">
|
||||
<div class="nav-item dropdown">
|
||||
<a href="#" class="nav-link d-flex lh-1 text-reset p-0" data-bs-toggle="dropdown" aria-label="Open user menu">
|
||||
<span class="avatar avatar-sm rounded-circle"><i class="bi bi-person-circle"></i></span>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
|
||||
<div class="dropdown-item small text-muted font-numeric">@User.Identity?.Name</div>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="/admin/logout" class="dropdown-item text-danger"><i class="bi bi-box-arrow-right me-1"></i> 로그아웃</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Navigation Sidebar Links -->
|
||||
<div class="collapse navbar-collapse" id="sidebar-menu">
|
||||
<ul class="navbar-nav pt-lg-3">
|
||||
<!-- 기본 관리 -->
|
||||
<li class="nav-item dropdown @(coreOpen ? "active" : "")">
|
||||
<a class="nav-link dropdown-toggle" href="#menu-core" data-bs-toggle="dropdown" data-bs-auto-close="false" role="button" aria-expanded="@(coreOpen ? "true" : "false")">
|
||||
<span class="nav-link-icon d-md-none d-lg-inline-block"><i class="bi bi-speedometer2"></i></span>
|
||||
<span class="nav-link-title fw-semibold">기본 관리</span>
|
||||
</a>
|
||||
<div class="dropdown-menu @(coreOpen ? "show" : "")">
|
||||
<a class="dropdown-item @activeClass("/admin/dashboard")" href="/admin/dashboard">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>대시보드
|
||||
</a>
|
||||
<a class="dropdown-item @activeClass("/admin/settings")" href="/admin/settings">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>설정
|
||||
</a>
|
||||
<a class="dropdown-item @activeClass("/admin/clientlogs")" href="/admin/clientlogs">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>클라이언트 로그
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 고객/상담 -->
|
||||
<li class="nav-item dropdown @(customerOpen ? "active" : "")">
|
||||
<a class="nav-link dropdown-toggle" href="#menu-customer" data-bs-toggle="dropdown" data-bs-auto-close="false" role="button" aria-expanded="@(customerOpen ? "true" : "false")">
|
||||
<span class="nav-link-icon d-md-none d-lg-inline-block"><i class="bi bi-people"></i></span>
|
||||
<span class="nav-link-title fw-semibold">고객/상담</span>
|
||||
</a>
|
||||
<div class="dropdown-menu @(customerOpen ? "show" : "")">
|
||||
<a class="dropdown-item @activeClass("/admin/customers")" href="/admin/customers">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>고객
|
||||
</a>
|
||||
<a class="dropdown-item @activeClass("/admin/clients")" href="/admin/clients">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>고객사
|
||||
</a>
|
||||
<a class="dropdown-item @activeClass("/admin/inquiries")" href="/admin/inquiries">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>문의 관리
|
||||
</a>
|
||||
<a class="dropdown-item @activeClass("/admin/consultingactivities")" href="/admin/consultingactivities">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>상담 활동
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 콘텐츠 운영 -->
|
||||
<li class="nav-item dropdown @(contentOpen ? "active" : "")">
|
||||
<a class="nav-link dropdown-toggle" href="#menu-content" data-bs-toggle="dropdown" data-bs-auto-close="false" role="button" aria-expanded="@(contentOpen ? "true" : "false")">
|
||||
<span class="nav-link-icon d-md-none d-lg-inline-block"><i class="bi bi-file-earmark-richtext"></i></span>
|
||||
<span class="nav-link-title fw-semibold">콘텐츠 운영</span>
|
||||
</a>
|
||||
<div class="dropdown-menu @(contentOpen ? "show" : "")">
|
||||
<a class="dropdown-item @activeClass("/admin/blog")" href="/admin/blog">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>블로그 편집
|
||||
</a>
|
||||
<a class="dropdown-item @activeClass("/admin/announcements")" href="/admin/announcements">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>공지사항
|
||||
</a>
|
||||
<a class="dropdown-item @activeClass("/admin/faqs")" href="/admin/faqs">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>FAQ 관리
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 세무 관리 -->
|
||||
<li class="nav-item dropdown @(financeOpen ? "active" : "")">
|
||||
<a class="nav-link dropdown-toggle" href="#menu-finance" data-bs-toggle="dropdown" data-bs-auto-close="false" role="button" aria-expanded="@(financeOpen ? "true" : "false")">
|
||||
<span class="nav-link-icon d-md-none d-lg-inline-block"><i class="bi bi-calculator"></i></span>
|
||||
<span class="nav-link-title fw-semibold">세무 관리</span>
|
||||
</a>
|
||||
<div class="dropdown-menu @(financeOpen ? "show" : "")">
|
||||
<a class="dropdown-item @activeClass("/admin/taxprofiles")" href="/admin/taxprofiles">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>세무 프로필
|
||||
</a>
|
||||
<a class="dropdown-item @activeClass("/admin/taxfilings")" href="/admin/taxfilings">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>신고 관리
|
||||
</a>
|
||||
<a class="dropdown-item @activeClass("/admin/taxfilingschedules")" href="/admin/taxfilingschedules">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>신고 일정
|
||||
</a>
|
||||
<a class="dropdown-item @activeClass("/admin/revenuetrackings")" href="/admin/revenuetrackings">
|
||||
<i class="bi bi-circle-fill small me-2" style="font-size: 0.35rem;"></i>매출 추적
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<!-- Main Wrapper Panel -->
|
||||
<div class="page-wrapper d-flex flex-column min-vh-100">
|
||||
<!-- Topbar (Search, Breadcrumbs, Theme Switcher, User Profiles) -->
|
||||
<header class="navbar navbar-expand-md navbar-light d-none d-lg-flex d-print-none sticky-top border-bottom">
|
||||
<div class="container-xl justify-content-between">
|
||||
<!-- Left breadcrumb -->
|
||||
<div class="d-flex align-items-center">
|
||||
<nav aria-label="breadcrumb" class="d-inline-block">
|
||||
<ol class="breadcrumb breadcrumb-muted mb-0 small">
|
||||
<li class="breadcrumb-item"><a href="/admin/dashboard" class="text-muted"><i class="bi bi-house-door-fill"></i></a></li>
|
||||
<li class="breadcrumb-item active text-dark fw-semibold" aria-current="page">@breadcrumbText</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<!-- Right Actions -->
|
||||
<div class="navbar-nav flex-row align-items-center gap-3">
|
||||
<!-- Dark/Light Theme Switcher Button -->
|
||||
<div class="nav-item">
|
||||
<a href="#" class="nav-link px-0 text-muted" onclick="toggleTheme(); return false;" title="테마 전환" data-bs-toggle="tooltip" data-bs-placement="bottom">
|
||||
<i class="bi bi-sun fs-3 theme-icon-light d-none"></i>
|
||||
<i class="bi bi-moon-stars-fill fs-3 theme-icon-dark"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Divider -->
|
||||
<div class="vr bg-light opacity-50" style="height: 1.5rem;"></div>
|
||||
|
||||
<!-- Profile & Logout -->
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="avatar avatar-xs rounded-circle bg-secondary-lt text-secondary"><i class="bi bi-person-circle"></i></span>
|
||||
<span class="text-dark small fw-semibold font-numeric me-2">@User.Identity?.Name</span>
|
||||
</div>
|
||||
<a class="btn btn-outline-danger btn-sm px-3 rounded-pill fw-semibold" href="/admin/logout">
|
||||
<i class="bi bi-box-arrow-right me-1"></i> 로그아웃
|
||||
</a>
|
||||
</div>
|
||||
<nav aria-label="breadcrumb" class="admin-topbar-breadcrumb d-none d-md-inline-block ms-2">
|
||||
<ol class="breadcrumb breadcrumb-muted mb-0 small">
|
||||
<li class="breadcrumb-item"><a href="/admin/dashboard" class="text-muted"><i class="bi bi-house-door-fill"></i></a></li>
|
||||
<li class="breadcrumb-item active text-dark fw-semibold" aria-current="page">@breadcrumbText</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="navbar-nav flex-row order-md-last gap-3 align-items-center">
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="avatar avatar-xs rounded-circle bg-secondary-lt text-secondary"><i class="bi bi-person-circle"></i></span>
|
||||
<span class="text-dark small fw-semibold font-numeric d-none d-md-inline">@User.Identity?.Name</span>
|
||||
</div>
|
||||
<a class="btn btn-outline-danger btn-sm px-3 rounded-pill fw-semibold" href="/admin/logout">
|
||||
<i class="bi bi-box-arrow-right me-1"></i> 로그아웃
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
</header>
|
||||
|
||||
<div class="page-wrapper flex-fill py-4">
|
||||
<div class="container-fluid px-3 px-md-4">
|
||||
<div class="row g-4">
|
||||
<!-- Left Sidebar Panel -->
|
||||
<aside class="col-12 col-lg-3 col-xxl-2">
|
||||
<div class="card shadow-sm border-0 admin-sidebar-card sticky-top" style="top: 80px; z-index: 10;">
|
||||
<div class="card-header admin-sidebar-header bg-white py-3 px-4 border-bottom border-light">
|
||||
<h3 class="card-title mb-0 admin-sidebar-title fw-bold text-dark" style="font-size: 0.9rem;">
|
||||
<i class="bi bi-grid-fill text-primary me-2"></i> 관리 메뉴
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body p-0 admin-sidebar-body bg-white">
|
||||
<div class="accordion accordion-flush" id="adminSidebarAccordion">
|
||||
<!-- 기본 Accordion -->
|
||||
<div class="accordion-item border-0">
|
||||
<h2 class="accordion-header">
|
||||
<button class="accordion-button py-2.5 px-4 @(coreOpen ? string.Empty : "collapsed") fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#adminMenuCore" aria-expanded="@(coreOpen ? "true" : "false")">
|
||||
<i class="bi bi-speedometer2 text-muted me-2"></i> 기본 관리
|
||||
</button>
|
||||
</h2>
|
||||
<div id="adminMenuCore" class="accordion-collapse collapse @(coreOpen ? "show" : string.Empty)" data-bs-parent="#adminSidebarAccordion">
|
||||
<div class="list-group list-group-flush bg-transparent py-1">
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/dashboard")" href="/admin/dashboard"><i class="bi bi-circle small me-2"></i> 대시보드</a>
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/settings")" href="/admin/settings"><i class="bi bi-circle small me-2"></i> 설정</a>
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/clientlogs")" href="/admin/clientlogs"><i class="bi bi-circle small me-2"></i> 클라이언트 로그</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 고객/상담 Accordion -->
|
||||
<div class="accordion-item border-0">
|
||||
<h2 class="accordion-header">
|
||||
<button class="accordion-button py-2.5 px-4 @(customerOpen ? string.Empty : "collapsed") fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#adminMenuCustomer" aria-expanded="@(customerOpen ? "true" : "false")">
|
||||
<i class="bi bi-people text-muted me-2"></i> 고객/상담
|
||||
</button>
|
||||
</h2>
|
||||
<div id="adminMenuCustomer" class="accordion-collapse collapse @(customerOpen ? "show" : string.Empty)" data-bs-parent="#adminSidebarAccordion">
|
||||
<div class="list-group list-group-flush bg-transparent py-1">
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/customers")" href="/admin/customers"><i class="bi bi-circle small me-2"></i> 고객</a>
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/clients")" href="/admin/clients"><i class="bi bi-circle small me-2"></i> 고객사</a>
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/inquiries")" href="/admin/inquiries"><i class="bi bi-circle small me-2"></i> 문의 관리</a>
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/consultingactivities")" href="/admin/consultingactivities"><i class="bi bi-circle small me-2"></i> 상담 활동</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 콘텐츠 Accordion -->
|
||||
<div class="accordion-item border-0">
|
||||
<h2 class="accordion-header">
|
||||
<button class="accordion-button py-2.5 px-4 @(contentOpen ? string.Empty : "collapsed") fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#adminMenuContent" aria-expanded="@(contentOpen ? "true" : "false")">
|
||||
<i class="bi bi-file-earmark-richtext text-muted me-2"></i> 콘텐츠 운영
|
||||
</button>
|
||||
</h2>
|
||||
<div id="adminMenuContent" class="accordion-collapse collapse @(contentOpen ? "show" : string.Empty)" data-bs-parent="#adminSidebarAccordion">
|
||||
<div class="list-group list-group-flush bg-transparent py-1">
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/blog")" href="/admin/blog"><i class="bi bi-circle small me-2"></i> 블로그 편집</a>
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/announcements")" href="/admin/announcements"><i class="bi bi-circle small me-2"></i> 공지사항</a>
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/faqs")" href="/admin/faqs"><i class="bi bi-circle small me-2"></i> FAQ 관리</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 세무 관리 Accordion -->
|
||||
<div class="accordion-item border-0">
|
||||
<h2 class="accordion-header">
|
||||
<button class="accordion-button py-2.5 px-4 @(financeOpen ? string.Empty : "collapsed") fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#adminMenuFinance" aria-expanded="@(financeOpen ? "true" : "false")">
|
||||
<i class="bi bi-calculator text-muted me-2"></i> 세무 관리
|
||||
</button>
|
||||
</h2>
|
||||
<div id="adminMenuFinance" class="accordion-collapse collapse @(financeOpen ? "show" : string.Empty)" data-bs-parent="#adminSidebarAccordion">
|
||||
<div class="list-group list-group-flush bg-transparent py-1">
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/taxprofiles")" href="/admin/taxprofiles"><i class="bi bi-circle small me-2"></i> 세무 프로필</a>
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/taxfilings")" href="/admin/taxfilings"><i class="bi bi-circle small me-2"></i> 신고 관리</a>
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/taxfilingschedules")" href="/admin/taxfilingschedules"><i class="bi bi-circle small me-2"></i> 신고 일정</a>
|
||||
<a class="list-group-item list-group-item-action ps-5 py-2 @activeClass("/admin/revenuetrackings")" href="/admin/revenuetrackings"><i class="bi bi-circle small me-2"></i> 매출 추적</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Page Body Area -->
|
||||
<div class="page-body flex-fill py-4">
|
||||
<div class="container-xl">
|
||||
<div class="card shadow-sm border border-light-subtle rounded-3 overflow-hidden bg-surface">
|
||||
<div class="card-body p-4 p-md-5">
|
||||
@RenderBody()
|
||||
</div>
|
||||
</aside>
|
||||
<!-- Center Content Panel -->
|
||||
<main class="col-12 col-lg-9 col-xxl-10">
|
||||
<div class="card shadow-sm border-0 admin-content-card rounded-4 bg-white overflow-hidden">
|
||||
<div class="card-body p-4 p-md-5">
|
||||
@RenderBody()
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Footer Area -->
|
||||
<footer class="footer footer-transparent d-print-none py-3 border-top mt-auto bg-surface">
|
||||
<div class="container-xl">
|
||||
<div class="row text-center align-items-center flex-row-reverse">
|
||||
<div class="col-lg-auto ms-lg-auto">
|
||||
<ul class="list-inline list-inline-dots mb-0">
|
||||
<li class="list-inline-item">Razor Pages + Dapper Architecture</li>
|
||||
<li class="list-inline-item">Cookie Security Authentication</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-12 col-lg-auto mt-3 mt-lg-0 text-muted">
|
||||
© 2026 TaxBaik. All rights reserved.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<!-- Footer Panel -->
|
||||
<footer class="admin-footer border-top bg-white mt-auto py-3">
|
||||
<div class="container-fluid px-4 small text-muted">
|
||||
<div class="d-flex flex-wrap justify-content-between align-items-center gap-2 font-numeric">
|
||||
<span>© 2026 TaxBaik. All rights reserved.</span>
|
||||
<div class="d-flex align-items-center gap-3">
|
||||
<span>Razor Pages + Dapper Architecture</span>
|
||||
<span>·</span>
|
||||
<span>Cookie Security Authentication</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<!-- Tabler Javascript -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/@@tabler/core@1.0.0/dist/js/tabler.min.js" defer></script>
|
||||
@await RenderSectionAsync("Scripts", required: false)
|
||||
|
||||
<!-- Theme Manager Javascript -->
|
||||
<script>
|
||||
function applyTheme(theme) {
|
||||
document.documentElement.setAttribute('data-bs-theme', theme);
|
||||
localStorage.setItem('tablerTheme', theme);
|
||||
|
||||
var iconLight = document.querySelector('.theme-icon-light');
|
||||
var iconDark = document.querySelector('.theme-icon-dark');
|
||||
|
||||
if (iconLight && iconDark) {
|
||||
if (theme === 'dark') {
|
||||
iconLight.classList.remove('d-none');
|
||||
iconDark.classList.add('d-none');
|
||||
} else {
|
||||
iconLight.classList.add('d-none');
|
||||
iconDark.classList.remove('d-none');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function toggleTheme() {
|
||||
var currentTheme = localStorage.getItem('tablerTheme') || 'light';
|
||||
var newTheme = currentTheme === 'dark' ? 'light' : 'dark';
|
||||
applyTheme(newTheme);
|
||||
}
|
||||
|
||||
// Initialize Theme Icons on Load
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var currentTheme = localStorage.getItem('tablerTheme') || 'light';
|
||||
applyTheme(currentTheme);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -11,6 +11,12 @@
|
||||
============================================================================ */
|
||||
|
||||
:root {
|
||||
/* Tabler Brand Color Override */
|
||||
--tblr-primary: #1F4E79;
|
||||
--tblr-primary-rgb: 31, 78, 121;
|
||||
--tblr-primary-fg: #ffffff;
|
||||
--tblr-font-family: 'Noto Sans KR', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||
|
||||
/* Color System */
|
||||
--primary-color: #1F4E79;
|
||||
--primary-light: #E8F0F7;
|
||||
@@ -45,7 +51,7 @@
|
||||
--info-light: #CFFAFE;
|
||||
--info-dark: #0E7490;
|
||||
|
||||
/* Semantic Colors */
|
||||
/* Semantic Colors - Reactive to Light Mode */
|
||||
--text-primary: #1A1A1A;
|
||||
--text-secondary: #64748B;
|
||||
--text-tertiary: #94A3B8;
|
||||
@@ -77,31 +83,31 @@
|
||||
--space-16: 40px;
|
||||
|
||||
/* Border Radius - Squarish for professional enterprise look */
|
||||
--radius-sm: 2px;
|
||||
--radius-md: 4px;
|
||||
--radius-lg: 6px;
|
||||
--radius-xl: 8px;
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 6px;
|
||||
--radius-lg: 8px;
|
||||
--radius-xl: 12px;
|
||||
--radius-full: 9999px;
|
||||
|
||||
/* Typography Scale - High Density Compact Size */
|
||||
/* Typography Scale */
|
||||
--font-family-base: 'Noto Sans KR', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||
--font-size-xs: 0.62rem;
|
||||
--font-size-sm: 0.66rem;
|
||||
--font-size-base: 0.72rem;
|
||||
--font-size-lg: 0.8rem;
|
||||
--font-size-xl: 0.9rem;
|
||||
--font-size-2xl: 1rem;
|
||||
--font-size-3xl: 1.15rem;
|
||||
--font-size-4xl: 1.45rem;
|
||||
--font-size-xs: 0.75rem;
|
||||
--font-size-sm: 0.8rem;
|
||||
--font-size-base: 0.875rem;
|
||||
--font-size-lg: 1rem;
|
||||
--font-size-xl: 1.125rem;
|
||||
--font-size-2xl: 1.25rem;
|
||||
--font-size-3xl: 1.5rem;
|
||||
--font-size-4xl: 1.75rem;
|
||||
|
||||
--font-weight-regular: 400;
|
||||
--font-weight-medium: 500;
|
||||
--font-weight-semibold: 600;
|
||||
--font-weight-bold: 700;
|
||||
|
||||
--line-height-tight: 1.1;
|
||||
--line-height-normal: 1.25;
|
||||
--line-height-relaxed: 1.4;
|
||||
--line-height-tight: 1.15;
|
||||
--line-height-normal: 1.35;
|
||||
--line-height-relaxed: 1.5;
|
||||
|
||||
/* Shadow System (Elevation) */
|
||||
--shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
@@ -124,6 +130,16 @@
|
||||
--z-tooltip: 1100;
|
||||
}
|
||||
|
||||
/* Semantic Colors - Reactive to Dark Mode */
|
||||
[data-bs-theme="dark"] {
|
||||
--bg-primary: var(--tblr-bg-surface, #1e293b);
|
||||
--bg-secondary: var(--tblr-body-bg, #0f172a);
|
||||
--text-primary: var(--tblr-body-color, #f8fafc);
|
||||
--text-secondary: var(--tblr-muted, #94a3b8);
|
||||
--border-color: var(--tblr-border-color, #334155);
|
||||
--border-color-light: var(--tblr-border-color-translucent, #1e293b);
|
||||
}
|
||||
|
||||
/* ============================================================================
|
||||
Global Reset & Base Styles
|
||||
============================================================================ */
|
||||
|
||||
Reference in New Issue
Block a user