-
@Model.Post.CreatedAt.ToString("yyyy-MM-dd")
-
๐๏ธ @Model.Post.ViewCount
-
@Model.Post.CategoryName
+
+ ๐
@Model.Post.CreatedAt.ToString("yyyy๋
MM์ dd์ผ")
+ ๐๏ธ @Model.Post.ViewCount ์กฐํ
+ @Model.Post.CategoryName
-
+
-
+
@Html.Raw(Model.Post.Content)
-
+
-
-
์๋ด์ด ํ์ํ์ ๊ฐ์?
-
์ด ๊ธ๊ณผ ๊ด๋ จ๋ ์๋ด์ด ํ์ํ๋ฉด ์ธ์ ๋ ์ฐ๋ฝ์ฃผ์ธ์.
-
์๋ด ์ ์ฒญํ๊ธฐ
-
+
+ ์๋ด์ด ํ์ํ์ ๊ฐ์?
+ ์ด ๊ธ๊ณผ ๊ด๋ จ๋ ์๋ด์ด ํ์ํ๋ฉด ์ธ์ ๋ ์ฐ๋ฝ์ฃผ์ธ์.
+ ๐ ์๋ด ์ ์ฒญํ๊ธฐ
+
-
-
์ด ๊ธ์ ๊ณต์ ํ์ธ์:
-
-
+
+ ์ด ๊ธ์ ๊ณต์ ํ์ธ์:
+
+
}
else
{
-
+
ํฌ์คํธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๋ธ๋ก๊ทธ ๋์๊ฐ๊ธฐ
-
+
}
diff --git a/TaxBaik.Web/Pages/_Layout.cshtml b/TaxBaik.Web/Pages/_Layout.cshtml
index e3baefe..5e96f33 100644
--- a/TaxBaik.Web/Pages/_Layout.cshtml
+++ b/TaxBaik.Web/Pages/_Layout.cshtml
@@ -10,13 +10,16 @@
+
+
+
-
+
@RenderBody()
@@ -30,8 +33,8 @@
-
-
+
+
@await RenderSectionAsync("Scripts", required: false)
diff --git a/TaxBaik.Web/Program.cs b/TaxBaik.Web/Program.cs
index 7a10333..7731953 100644
--- a/TaxBaik.Web/Program.cs
+++ b/TaxBaik.Web/Program.cs
@@ -5,15 +5,25 @@ var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddMemoryCache();
+builder.Services.AddResponseCompression(opts => {
+ opts.Providers.Add
();
+});
builder.Services.AddInfrastructure();
builder.Services.AddApplication();
var app = builder.Build();
app.UsePathBase("/taxbaik");
+app.UseResponseCompression();
app.UseStaticFiles();
app.UseRouting();
+if (!app.Environment.IsDevelopment())
+{
+ app.UseExceptionHandler("/Error");
+ app.UseHsts();
+}
+
app.MapRazorPages();
app.Run();
diff --git a/TaxBaik.Web/wwwroot/css/site.css b/TaxBaik.Web/wwwroot/css/site.css
index 7a7c2f7..67cc90d 100644
--- a/TaxBaik.Web/wwwroot/css/site.css
+++ b/TaxBaik.Web/wwwroot/css/site.css
@@ -1,110 +1,451 @@
:root {
--color-primary: #1B4F8A;
--color-primary-dark: #133970;
+ --color-primary-light: #2E5FA3;
--color-accent: #C9A227;
--color-cta: #E05A2B;
+ --color-cta-dark: #D45A1F;
--color-bg: #F7F9FC;
--color-text: #1A1A2E;
--color-text-muted: #5A6A7A;
+ --color-border: #D8E2EE;
+ --color-success: #2E7D32;
+ --color-warning: #F57C00;
+ --color-danger: #C62828;
+
+ --spacing-xs: 0.25rem;
+ --spacing-sm: 0.5rem;
+ --spacing-md: 1rem;
+ --spacing-lg: 1.5rem;
+ --spacing-xl: 2rem;
+ --spacing-2xl: 3rem;
+
+ --radius-sm: 4px;
+ --radius-md: 8px;
+ --radius-lg: 12px;
+
+ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
+ --transition-normal: 300ms cubic-bezier(0.4, 0, 0.2, 1);
}
* {
font-family: 'Noto Sans KR', 'Apple SD Gothic Neo', sans-serif;
}
+html {
+ font-size: 16px;
+ scroll-behavior: smooth;
+}
+
body {
color: var(--color-text);
background-color: #fff;
+ line-height: 1.75;
+ font-size: clamp(0.875rem, 2.5vw, 1rem);
+}
+
+/* ๋ฒํผ ์คํ์ผ */
+.btn {
+ border-radius: var(--radius-md);
+ font-weight: 500;
+ transition: all var(--transition-fast);
+ cursor: pointer;
+ border: none;
+ padding: 0.625rem 1.5rem;
+ font-size: 1rem;
+}
+
+.btn:active {
+ transform: scale(0.98);
}
.btn-primary {
background-color: var(--color-primary);
border-color: var(--color-primary);
+ color: white;
}
.btn-primary:hover {
background-color: var(--color-primary-dark);
border-color: var(--color-primary-dark);
+ box-shadow: 0 4px 12px rgba(27, 79, 138, 0.25);
}
.btn-warning {
background-color: var(--color-cta);
border-color: var(--color-cta);
+ color: white;
}
.btn-warning:hover {
- background-color: #d45a1f;
- border-color: #d45a1f;
+ background-color: var(--color-cta-dark);
+ border-color: var(--color-cta-dark);
+ box-shadow: 0 4px 12px rgba(224, 90, 43, 0.25);
}
+.btn-outline-primary {
+ color: var(--color-primary);
+ border-color: var(--color-primary);
+ background: transparent;
+}
+
+.btn-outline-primary:hover {
+ background-color: var(--color-primary);
+ color: white;
+}
+
+/* ๋ฐฐ๊ฒฝ ๋ฐ ํ
์คํธ */
.bg-primary {
background-color: var(--color-primary) !important;
}
+.bg-primary-light {
+ background-color: #E8F1F8 !important;
+}
+
.text-primary {
color: var(--color-primary) !important;
}
-.hero-section {
- padding: 80px 0;
- background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-dark) 100%);
+.text-muted {
+ color: var(--color-text-muted) !important;
}
+/* ํ์ด๋ก ์น์
*/
+.hero-section {
+ padding: clamp(2rem, 15vh, 5rem) 0;
+ background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-dark) 100%);
+ color: white;
+ position: relative;
+ overflow: hidden;
+}
+
+.hero-section::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 500px;
+ height: 500px;
+ background: rgba(255, 255, 255, 0.05);
+ border-radius: 50%;
+ transform: translate(30%, -30%);
+}
+
+.hero-section h1 {
+ font-size: clamp(1.5rem, 5vw, 3rem);
+ font-weight: 700;
+ margin-bottom: var(--spacing-lg);
+ position: relative;
+ z-index: 1;
+}
+
+/* ์นด๋ ์คํ์ผ */
+.card {
+ border: 1px solid var(--color-border);
+ border-radius: var(--radius-lg);
+ transition: all var(--transition-normal);
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+}
+
+.card:hover {
+ transform: translateY(-4px);
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
+}
+
+.card-body {
+ padding: var(--spacing-xl);
+}
+
+.card-title {
+ font-weight: 600;
+ color: var(--color-primary);
+ margin-bottom: var(--spacing-md);
+}
+
+/* ๋ค๋น๊ฒ์ด์
*/
+.navbar-brand {
+ font-size: 1.25rem;
+ font-weight: 700;
+ color: var(--color-primary) !important;
+}
+
+.navbar {
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
+ background-color: white;
+ padding: var(--spacing-md) 0;
+}
+
+.navbar.sticky {
+ position: sticky;
+ top: 0;
+ z-index: 999;
+}
+
+.nav-link {
+ color: var(--color-text) !important;
+ font-weight: 500;
+ transition: color var(--transition-fast);
+ margin: 0 var(--spacing-sm);
+}
+
+.nav-link:hover {
+ color: var(--color-primary) !important;
+}
+
+.nav-link.active {
+ color: var(--color-cta) !important;
+}
+
+/* ๋ชจ๋ฐ์ผ CTA ๋ฐ */
.mobile-cta-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background: white;
- border-top: 1px solid #ddd;
- padding: 10px;
+ border-top: 2px solid var(--color-border);
+ padding: var(--spacing-md);
z-index: 1000;
+ box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.05);
}
.btn-kakao-mobile {
display: block;
width: 100%;
- padding: 12px;
+ padding: var(--spacing-md);
background: #FFE812;
- color: black;
+ color: #000;
text-decoration: none;
- border-radius: 8px;
- font-weight: 500;
+ border-radius: var(--radius-md);
+ font-weight: 600;
text-align: center;
border: none;
cursor: pointer;
+ font-size: 0.95rem;
+ transition: background var(--transition-fast);
}
.btn-kakao-mobile:hover {
background: #FDD835;
+ text-decoration: none;
}
-.card {
- transition: transform 0.2s;
+.btn-kakao-mobile:active {
+ transform: scale(0.98);
}
-.card:hover {
- transform: translateY(-4px);
+/* ํ์ด์ง ์คํ์ด์ฑ */
+body.with-mobile-cta {
+ padding-bottom: 70px;
}
-.navbar-brand {
- font-size: 1.3rem;
+/* ์น์
*/
+.section {
+ padding: var(--spacing-2xl) 0;
}
-.navbar {
- box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+.section-title {
+ font-size: clamp(1.5rem, 4vw, 2.5rem);
+ font-weight: 700;
+ color: var(--color-primary);
+ margin-bottom: var(--spacing-xl);
+ text-align: center;
}
-@media (max-width: 768px) {
- body {
- padding-bottom: 70px;
+/* ๋ฐฐ์ง */
+.badge {
+ border-radius: var(--radius-sm);
+ padding: var(--spacing-xs) var(--spacing-sm);
+ font-size: 0.875rem;
+ font-weight: 500;
+}
+
+.badge-success {
+ background-color: #E8F5E9;
+ color: var(--color-success);
+}
+
+/* ํผ ์์ */
+.form-control, .form-select {
+ border: 1px solid var(--color-border);
+ border-radius: var(--radius-md);
+ padding: 0.625rem 1rem;
+ font-size: 1rem;
+ transition: border-color var(--transition-fast);
+}
+
+.form-control:focus, .form-select:focus {
+ border-color: var(--color-primary);
+ box-shadow: 0 0 0 3px rgba(27, 79, 138, 0.1);
+}
+
+/* ์ด๋ฏธ์ง ์ต์ ํ */
+img {
+ max-width: 100%;
+ height: auto;
+ display: block;
+}
+
+img[loading="lazy"] {
+ background-color: #f0f0f0;
+}
+
+/* ํ์ดํฌ๊ทธ๋ํผ */
+h1, h2, h3, h4, h5, h6 {
+ font-weight: 700;
+ line-height: 1.25;
+ color: var(--color-text);
+}
+
+h1 { font-size: clamp(1.75rem, 5vw, 3rem); }
+h2 { font-size: clamp(1.5rem, 4vw, 2.25rem); }
+h3 { font-size: clamp(1.25rem, 3vw, 1.75rem); }
+h4 { font-size: 1.25rem; }
+h5 { font-size: 1.1rem; }
+h6 { font-size: 1rem; }
+
+p {
+ margin-bottom: var(--spacing-md);
+}
+
+a {
+ color: var(--color-primary);
+ text-decoration: none;
+ transition: color var(--transition-fast);
+}
+
+a:hover {
+ color: var(--color-cta);
+ text-decoration: underline;
+}
+
+/* ๋ฆฌ์คํธ */
+.list-group-item {
+ border-color: var(--color-border);
+ padding: var(--spacing-md) var(--spacing-lg);
+}
+
+/* ๋ชจ๋ฌ */
+.modal-content {
+ border: 1px solid var(--color-border);
+ border-radius: var(--radius-lg);
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.16);
+}
+
+.modal-header {
+ border-bottom: 1px solid var(--color-border);
+ padding: var(--spacing-xl);
+}
+
+.modal-footer {
+ border-top: 1px solid var(--color-border);
+ padding: var(--spacing-xl);
+}
+
+/* ํญ */
+.nav-tabs .nav-link {
+ color: var(--color-text-muted);
+ border-bottom: 3px solid transparent;
+ margin-bottom: -3px;
+ padding: var(--spacing-md) var(--spacing-lg);
+}
+
+.nav-tabs .nav-link:hover {
+ color: var(--color-primary);
+ border-color: transparent;
+}
+
+.nav-tabs .nav-link.active {
+ color: var(--color-primary);
+ border-bottom-color: var(--color-primary);
+ background-color: transparent;
+}
+
+/* ํ์ด์ง๋ค์ด์
*/
+.pagination .page-link {
+ border-color: var(--color-border);
+ color: var(--color-primary);
+}
+
+.pagination .page-link:hover {
+ background-color: var(--color-bg);
+ border-color: var(--color-border);
+}
+
+.pagination .page-item.active .page-link {
+ background-color: var(--color-primary);
+ border-color: var(--color-primary);
+}
+
+/* ๋ฐ์ํ โ ํ๋ธ๋ฆฟ ์ด์ */
+@media (min-width: 768px) {
+ .container {
+ max-width: 960px;
+ }
+}
+
+/* ๋ฐ์ํ โ ๋ชจ๋ฐ์ผ (375px ~) */
+@media (max-width: 767.98px) {
+ .hero-section {
+ padding-top: 2rem;
+ padding-bottom: 2rem;
}
- .hero-section {
- padding: 40px 0;
+ .section {
+ padding: 1.5rem 0;
+ }
+
+ .card-body {
+ padding: 1rem;
+ }
+
+ .modal {
+ padding: 0 !important;
+ }
+
+ .modal-dialog {
+ margin: 0.5rem;
+ }
+
+ .btn {
+ padding: 0.5rem 1rem;
+ font-size: 0.95rem;
+ }
+
+ .nav-link {
+ padding: 0.5rem 0.75rem !important;
+ margin: 0 !important;
+ }
+
+ .section-title {
+ font-size: 1.5rem;
+ }
+}
+
+/* ์ด์ํ ํ๋ฉด (max 375px) */
+@media (max-width: 375px) {
+ html {
+ font-size: 14px;
}
.hero-section h1 {
- font-size: 1.8rem;
+ font-size: 1.25rem;
+ }
+
+ .card {
+ margin-bottom: 1rem;
+ }
+
+ .container-fluid {
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
}
}
+
+/* ๋์๋ง ํ
์คํธ */
+.form-text {
+ color: var(--color-text-muted);
+ font-size: 0.875rem;
+ margin-top: 0.25rem;
+}