Files
portfolio/app/globals.css
denshooter 377631ee50 Copilot/setup sentry nextjs (#58)
* Revise portfolio: warm brown theme, elegant typography, optimized analytics tracking (#55)

* Initial plan

* Update color theme to warm brown and off-white, add elegant fonts, fix analytics tracking

Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

* Fix 404 page integration with warm theme, update admin console colors, fix font loading

Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

* Address code review feedback: fix navigation, add utils, improve tracking

Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

* Fix accessibility and memory leak issues from code review

Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

* chore: Code cleanup, add Sentry.io monitoring, and documentation (#56)

* Initial plan

* Remove unused code and clean up console statements

Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

* Remove unused components and fix type issues

Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

* Wrap console.warn in development check

Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

* Integrate Sentry.io monitoring and add text editing documentation

Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

* Initial plan

* feat: Add Sentry configuration files and example pages

- Add sentry.server.config.ts and sentry.edge.config.ts
- Update instrumentation.ts with onRequestError export
- Update instrumentation-client.ts with onRouterTransitionStart export
- Update global-error.tsx to capture exceptions with Sentry
- Create Sentry example page at app/sentry-example-page/page.tsx
- Create Sentry example API route at app/api/sentry-example-api/route.ts

Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

* feat: Update middleware to allow Sentry example page and fix deprecated API

- Update middleware to exclude /sentry-example-page from locale routing
- Remove deprecated startTransaction API from Sentry example page
- Use consistent DSN configuration with fallback values

Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

* refactor: Improve Sentry configuration with environment-based sampling

- Add comments explaining DSN fallback values
- Use environment-based tracesSampleRate (10% in production, 100% in dev)
- Address code review feedback for production-safe configuration

Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com>

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
2026-01-22 10:05:43 +01:00

225 lines
5.2 KiB
CSS

@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
/* Warm Brown & Off-White Palette */
--background: #faf8f3; /* Warm off-white */
--foreground: #3e2723; /* Rich brown */
--card: rgba(255, 252, 245, 0.7);
--card-foreground: #3e2723;
--popover: #fffcf5;
--popover-foreground: #3e2723;
--primary: #5d4037; /* Medium brown */
--primary-foreground: #faf8f3;
--secondary: #d7ccc8; /* Light taupe */
--secondary-foreground: #3e2723;
--muted: #efebe9; /* Very light brown */
--muted-foreground: #795548; /* Muted brown */
--accent: #bcaaa4; /* Warm taupe */
--accent-foreground: #3e2723;
--destructive: #d84315; /* Warm red-brown */
--destructive-foreground: #faf8f3;
--border: #d7ccc8;
--input: #efebe9;
--ring: #a1887f; /* Warm brown ring */
--radius: 1rem;
}
body {
background-color: var(--background);
color: var(--foreground);
font-family: "Inter", sans-serif;
margin: 0;
padding: 0;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
}
/* Custom Selection */
::selection {
background: var(--primary); /* Rich brown for better contrast */
color: var(--primary-foreground); /* Off-white */
}
/* Smooth Scrolling */
html {
scroll-behavior: smooth;
}
/* Liquid Glass Effects */
.glass-panel {
background: rgba(250, 248, 243, 0.5);
backdrop-filter: blur(12px) saturate(120%);
-webkit-backdrop-filter: blur(12px) saturate(120%);
border: 1px solid rgba(215, 204, 200, 0.5);
box-shadow: 0 8px 32px rgba(62, 39, 35, 0.08);
will-change: backdrop-filter;
}
.glass-card {
background: rgba(255, 252, 245, 0.8);
backdrop-filter: blur(24px) saturate(180%);
-webkit-backdrop-filter: blur(24px) saturate(180%);
border: 1px solid rgba(215, 204, 200, 0.6);
box-shadow:
0 4px 6px -1px rgba(62, 39, 35, 0.04),
0 2px 4px -1px rgba(62, 39, 35, 0.03),
inset 0 0 20px rgba(255, 252, 245, 0.5);
transition: all 0.6s cubic-bezier(0.25, 0.1, 0.25, 1);
will-change: transform, box-shadow;
}
.glass-card:hover {
background: rgba(255, 252, 245, 0.9);
box-shadow:
0 20px 25px -5px rgba(62, 39, 35, 0.1),
0 10px 10px -5px rgba(62, 39, 35, 0.04),
inset 0 0 20px rgba(255, 252, 245, 0.8);
transform: translateY(-4px);
border-color: rgba(215, 204, 200, 0.8);
}
/* Typography & Headings */
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: var(--font-playfair), Georgia, serif;
letter-spacing: -0.02em;
font-weight: 700;
color: #3e2723;
}
/* Improve text contrast - using foreground variable for WCAG AA compliance */
p,
span,
div {
color: var(--foreground); /* #3e2723 - meets WCAG AA standards */
}
/* Hide scrollbar but keep functionality */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: #bcaaa4;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #a1887f;
}
.scrollbar-hide::-webkit-scrollbar {
display: none;
}
.scrollbar-hide {
-ms-overflow-style: none;
scrollbar-width: none;
}
/* Animations */
@keyframes float {
0%,
100% {
transform: translateY(0px);
}
50% {
transform: translateY(-10px);
}
}
.animate-float {
animation: float 8s ease-in-out infinite;
will-change: transform;
}
/* Liquid Blobs Background */
.liquid-bg-blob {
position: absolute;
filter: blur(80px);
opacity: 0.6;
z-index: -1;
animation: float 10s ease-in-out infinite;
}
/* Markdown Specifics for Blog/Projects */
.markdown h1 {
@apply text-4xl font-bold mb-6 tracking-tight;
color: #3e2723;
}
.markdown h2 {
@apply text-2xl font-semibold mt-8 mb-4 tracking-tight;
color: #3e2723;
}
.markdown p {
@apply mb-4 leading-relaxed;
color: #4e342e;
}
.markdown a {
@apply underline decoration-2 underline-offset-2 hover:opacity-80 transition-colors duration-300;
color: #5d4037;
text-decoration-color: #a1887f;
}
.markdown ul {
@apply list-disc list-inside mb-4 space-y-2;
color: #4e342e;
}
.markdown code {
@apply px-1.5 py-0.5 rounded text-sm font-mono;
background: #efebe9;
color: #3e2723;
}
.markdown pre {
@apply p-4 rounded-xl overflow-x-auto mb-6;
background: #3e2723;
color: #faf8f3;
}
/* Admin Dashboard Styles - Warm Brown Theme */
.animated-bg {
background: #faf8f3;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
}
.admin-glass {
background: rgba(250, 248, 243, 0.95);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-bottom: 1px solid #d7ccc8;
color: #3e2723;
}
.admin-glass-light {
background: #fffcf5;
border: 1px solid #d7ccc8;
color: #3e2723;
transition: all 0.2s ease;
box-shadow: 0 1px 2px rgba(62, 39, 35, 0.05);
}
.admin-glass-light:hover {
background: #faf8f3;
border-color: #bcaaa4;
box-shadow: 0 4px 6px rgba(62, 39, 35, 0.08);
}
.admin-glass-card {
background: #fffcf5;
border: 1px solid #d7ccc8;
box-shadow: 0 4px 6px -1px rgba(62, 39, 35, 0.06);
color: #3e2723;
}