@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600&family=Noto+Sans+TC:wght@400;500;700&family=Noto+Serif+TC:wght@400;500;700&display=swap";:root{--font-heading: "Noto Serif TC", "Bitter", serif;--font-body: "Noto Serif TC", serif;--font-ui: "Noto Sans TC", "IBM Plex Sans", sans-serif;--font-code: "JetBrains Mono", "Fira Code", monospace;--weight-regular: 400;--weight-medium: 500;--weight-bold: 700;--color-primary: #2f5474;--color-secondary: #4d6a84;--color-accent: #177f8a;--color-bg: #f3f6fa;--color-bg-soft: #e9eff6;--color-card: #ffffff;--color-text: #1f2d3a;--color-text-secondary: #4f6072;--color-muted: #7c8c9b;--color-border: #dbe4ed;--color-rose: var(--color-primary);--color-lavender: var(--color-secondary);--color-sage: #5f87a7;--color-charcoal: var(--color-text-secondary);--color-paper: var(--color-bg);--color-ink: var(--color-text);--color-rose-12: rgba(47, 84, 116, .12);--color-rose-20: rgba(47, 84, 116, .2);--color-lavender-15: rgba(77, 106, 132, .15);--color-sage-15: rgba(23, 127, 138, .15);--radius-sm: 8px;--radius-md: 14px;--radius-lg: 20px;--shadow-sm: 0 8px 20px rgba(30, 56, 82, .08);--shadow-md: 0 14px 28px rgba(30, 56, 82, .12);--space-xs: 4px;--space-sm: 8px;--space-md: 16px;--space-lg: 24px;--space-xl: 32px;--space-2xl: 48px;--container: 1120px;--content: 720px}@font-face{font-family:SweiSpring;src:url(https://blog.helloruru.com/fonts/SweiSpring-Bold.woff2) format("woff2");font-weight:700;font-display:swap}@font-face{font-family:SweiSpring;src:url(https://blog.helloruru.com/fonts/SweiSpring-Medium.woff2) format("woff2");font-weight:500;font-display:swap}@font-face{font-family:GenWanMin2;src:url(https://blog.helloruru.com/fonts/GenWanMin2TW-R.woff2) format("woff2");font-weight:400;font-display:swap}@font-face{font-family:GenWanMin2;src:url(https://blog.helloruru.com/fonts/GenWanMin2TW-M.woff2) format("woff2");font-weight:500;font-display:swap}@font-face{font-family:GenSenRounded;src:url(https://lab.helloruru.com/fonts/GenSenRounded-Regular.woff2) format("woff2");font-weight:400;font-display:swap}@font-face{font-family:GenSenRounded;src:url(https://lab.helloruru.com/fonts/GenSenRounded-Medium.woff2) format("woff2");font-weight:500;font-display:swap}:root{--font-article-heading: "SweiSpring", "Noto Serif TC", serif;--font-article-body: "GenWanMin2", "Noto Serif TC", serif;--font-article-ui: "GenSenRounded", "Noto Sans TC", sans-serif;--article-text-primary: #333333;--article-text-secondary: #4a4a4a;--article-text-muted: #888888;--home-font-heading: "SweiSpring", "Noto Serif TC", serif;--home-font-body: "GenWanMin2", "Noto Serif TC", serif;--home-font-ui: "GenSenRounded", "Noto Sans TC", sans-serif;--home-text-primary: #333333;--home-text-secondary: #4a4a4a;--home-text-muted: #888888;--home-text-hint: #aaaaaa;--home-text-charcoal: #5c5856}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font-body);color:var(--color-charcoal);background-color:var(--color-paper);background-image:radial-gradient(circle at 50% -10%,#dae6f4 0,var(--color-paper) 58%),radial-gradient(circle at 12% 12%,rgba(47,84,116,.16),transparent 34%),radial-gradient(circle at 88% 16%,rgba(23,127,138,.1),transparent 32%);line-height:1.9;letter-spacing:.02em}a{color:var(--color-accent)}a:hover{color:var(--color-primary)}img{max-width:100%;display:block}.container{max-width:var(--container);margin:0 auto;padding:0 48px}.container-narrow{max-width:720px;margin:0 auto;padding:0 48px}.page-shell{padding-top:20px;padding-bottom:52px}.cat-hero{position:relative;padding:64px 0 40px}.cat-hero:before{content:"";position:absolute;top:-16px;right:-20px;width:140px;height:140px;border-radius:999px;background:radial-gradient(circle,rgba(47,84,116,.16),transparent 72%);pointer-events:none}.back-tape{text-decoration:none;display:inline-flex;align-items:center;gap:6px;margin-bottom:32px;font-family:var(--home-font-ui);font-size:13px;letter-spacing:.04em;color:var(--color-secondary);opacity:.7;transition:opacity .2s ease,transform .2s ease}.back-tape:hover{opacity:1;transform:translate(-2px)}.back-tape .badge-tape{all:unset;display:inline-flex;align-items:center;gap:6px;font-family:inherit;font-size:inherit;letter-spacing:inherit;color:inherit;cursor:pointer}.cat-title{margin:0;display:inline-block;font-family:var(--home-font-heading);font-size:40px;font-weight:var(--weight-bold);color:var(--home-text-primary);letter-spacing:.03em}.cat-intro{margin:16px 0 0;max-width:640px;font-family:var(--home-font-body);font-size:16px;color:var(--home-text-secondary);line-height:1.8}.cat-count{margin:8px 0 0;font-family:var(--home-font-ui);font-size:14px;color:var(--home-text-muted)}.post-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-lg);padding-bottom:var(--space-3xl)}.post-grid .post-card{height:100%}.hero{position:relative;padding:52px 0 24px}.hero-eyebrow{display:flex;align-items:center;gap:10px;font-family:var(--home-font-body);font-size:13px;letter-spacing:.2em;color:var(--home-text-muted);margin:0 0 10px}.hero-eyebrow:before{content:"";width:24px;height:1px;background:#2f547473}.hero-title{margin:0 0 10px;font-family:var(--home-font-heading);font-size:40px;font-weight:var(--weight-bold);color:var(--home-text-primary);line-height:1.3;letter-spacing:.03em}.hero-desc{margin:0;font-family:var(--home-font-body);font-size:16px;max-width:520px;color:var(--home-text-muted);font-weight:var(--weight-regular);line-height:1.7}.main-content{min-width:0}.main-grid{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:36px;align-items:start;padding:24px 0 16px}.category-nav{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}.category-chip{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border-radius:8px;border:1px solid rgba(47,84,116,.16);background:#ffffffd1;color:var(--home-text-secondary);text-decoration:none;font-family:var(--home-font-ui);font-size:12px;transition:transform .15s ease,border-color .2s ease,background .2s ease}.category-chip:hover{transform:translateY(-1px);border-color:#177f8a59;background:#fff}.category-chip.active{border-color:#2f547461;background:#e9eff6f2;color:var(--home-text-primary)}.chip-count{font-size:11px;color:var(--home-text-hint)}.section-block{margin-bottom:22px}.main-content .section-block:last-child{margin-bottom:0}.section-title{margin:0 0 16px;font-family:var(--home-font-heading);font-size:18px;font-weight:var(--weight-bold);border-bottom:1px solid var(--color-border);padding-bottom:8px;color:var(--home-text-primary);letter-spacing:.03em}.post-list{display:flex;flex-direction:column;gap:24px}.pagination{margin-top:20px;display:flex;flex-wrap:wrap;align-items:center;gap:8px}.pagination-link{min-width:34px;height:34px;padding:0 10px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);border:1px solid rgba(47,84,116,.18);background:#ffffffd1;color:var(--home-text-secondary);font-family:var(--home-font-ui);font-size:13px;font-weight:var(--weight-medium);text-decoration:none}.pagination-link:hover{border-color:#177f8a59;color:var(--home-text-primary)}.pagination-link.active{background:var(--color-rose-12);border-color:#2f54744d;color:var(--home-text-primary)}.post-card{position:relative;display:block;text-decoration:none;color:inherit;padding:20px;border-radius:var(--radius-md);border:1px solid rgba(47,84,116,.1);background:var(--color-card);box-shadow:var(--shadow-sm);transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.post-card:before{content:"";position:absolute;top:-7px;right:20px;width:68px;height:14px;border-radius:3px;background:linear-gradient(90deg,#2f547470,#177f8a54);opacity:.36}.post-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:#177f8a57}.post-card.featured{border-color:#2f54742e;background:linear-gradient(145deg,#ffffff,var(--color-bg-soft))}.post-card-badges{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.post-title{margin:0 0 8px;font-family:var(--home-font-heading);font-size:19px;font-weight:var(--weight-bold);line-height:1.5;color:var(--home-text-primary);letter-spacing:.04em}.post-desc{margin:0 0 14px;font-family:var(--home-font-body);color:#5c5856;font-size:15px;line-height:1.8}.post-card-footer{display:flex;align-items:center;justify-content:space-between;font-family:var(--home-font-ui);font-size:12px;color:var(--home-text-muted)}.post-date{display:inline-flex;align-items:center;gap:8px;font-family:var(--home-font-body);letter-spacing:.08em}.post-date:before{content:"";width:20px;height:1px;background:#2f547459}.post-reading{color:var(--home-text-muted)}.post-meta{display:flex;flex-wrap:wrap;gap:10px;align-items:center;font-family:var(--font-ui);font-size:12px;color:var(--color-muted)}.badge{display:inline-flex;align-items:center;padding:4px 10px;border-radius:var(--radius-sm);border:1px solid var(--color-rose-20);background:var(--color-rose-12);font-family:var(--font-ui);font-size:11px;letter-spacing:.06em}.badge.sage{border-color:#177f8a4d;background:var(--color-sage-15)}.badge.subtle{border-color:#4d6a8442;background:var(--color-lavender-15)}.sidebar{margin-top:40px;display:grid;gap:20px}.sidebar-card{background:transparent;border:0;border-radius:var(--radius-md);padding:0}.sidebar-title{margin:0 0 12px;font-family:var(--home-font-ui);letter-spacing:.08em;font-size:13px;font-weight:var(--weight-bold);color:var(--home-text-muted)}.sidebar-about{margin:0 0 10px;font-family:var(--home-font-body);font-size:14px;color:var(--home-text-muted);line-height:1.7}.sidebar-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:10px}.sidebar-list a{font-family:var(--home-font-body);color:var(--home-text-secondary);text-decoration:none;font-size:13px;line-height:1.5}.sidebar-list a:hover{color:var(--color-accent)}.site-footer{border-top:1px solid var(--color-border);padding:10px 16px 18px;text-align:center;font-family:var(--font-ui);font-size:13px;color:var(--color-muted)}.site-footer p{margin:0}.nav-shell{position:sticky;top:0;z-index:50;border-bottom:1px solid var(--color-border);backdrop-filter:blur(6px);background:#f3f6faeb}.nav-inner{height:56px;display:flex;align-items:center;justify-content:space-between;gap:14px}.nav-brand{display:flex;align-items:center;gap:8px;text-decoration:none;color:var(--color-ink)}.nav-brand-logo{border-radius:50%;object-fit:cover}.nav-brand-name{font-family:var(--home-font-ui);font-size:15px;font-weight:var(--weight-bold);letter-spacing:.05em;background:linear-gradient(135deg,var(--color-primary),var(--color-accent));-webkit-background-clip:text;background-clip:text;color:transparent}.nav-links{display:flex;align-items:center;gap:4px}.nav-link{display:inline-flex;align-items:center;gap:4px;padding:6px 11px;border-radius:var(--radius-sm);text-decoration:none;font-family:var(--home-font-ui);font-size:13px;font-weight:var(--weight-medium);color:var(--home-text-secondary)}.nav-count{font-size:11px;color:#aaa}.nav-link.active,.nav-link:hover{background:var(--color-rose-12);color:var(--color-ink)}.nav-toggle{display:none;border:0;border-radius:var(--radius-sm);padding:6px;background:transparent}.mobile-menu{display:none;padding-bottom:12px;border-bottom:1px solid var(--color-border)}.mobile-menu.open{display:block}.mobile-link{display:flex;align-items:center;justify-content:space-between;text-decoration:none;border-radius:var(--radius-sm);padding:10px 12px;font-family:var(--home-font-ui);font-size:14px;font-weight:var(--weight-medium);color:var(--home-text-secondary)}.mobile-link.active,.mobile-link:hover{background:var(--color-bg-soft)}.article{position:relative;background:#fff;border-radius:20px;border:1px solid rgba(47,84,116,.18);box-shadow:0 2px 8px #1e385214,0 8px 24px #1e38520f;padding:28px 28px 26px;overflow:hidden;margin-top:22px}.article-bg{position:absolute;inset:0;pointer-events:none;z-index:0}.article-bg--cover{background:radial-gradient(circle at 14% 10%,rgba(47,84,116,.18),transparent 33%),radial-gradient(circle at 89% 11%,rgba(23,127,138,.12),transparent 34%),linear-gradient(180deg,#fffffff0,#e9eff6d1)}.article>*{position:relative;z-index:1}.article-category{margin-bottom:14px}.badge-tape-link{text-decoration:none}.badge-tape{display:inline-flex;align-items:center;justify-content:center;min-height:30px;padding:7px 18px 6px;background:linear-gradient(135deg,#e9eff6f2,#dbe4ede6);border:1px solid rgba(47,84,116,.24);color:var(--color-secondary);border-radius:8px;font-family:var(--font-ui);font-size:12px;letter-spacing:.08em;text-decoration:none}.article-header{margin-bottom:12px}.article-title{margin:0 0 12px;font-family:var(--font-article-heading);font-size:36px;line-height:1.4;color:var(--article-text-primary);letter-spacing:0}.underline-hand{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none' viewBox='0 0 200 8'%3E%3Cpath d='M0 5 Q10 2, 22 4.5 T50 4 T78 5.2 T108 3.8 T140 5 T170 4.2 T200 5' fill='none' stroke='rgba(47,84,116,0.28)' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:bottom;background-size:100% 8px;padding-bottom:4px}.article-desc{margin:0 0 14px;color:#4a4a4a;font-family:var(--font-article-body);font-size:17px;letter-spacing:.02em;font-weight:400;line-height:1.85}.article-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-family:var(--font-article-ui);font-size:14px;color:var(--article-text-muted);margin-bottom:12px}.meta-dot{opacity:.7}.article-tag-list{display:flex;flex-wrap:wrap;gap:8px;margin:0}.divider-rose{width:120px;height:1px;background:linear-gradient(90deg,transparent,var(--color-primary),transparent);margin:22px auto;opacity:.55}.toc{border:1px solid rgba(47,84,116,.22);border-radius:12px;background:#e9eff6bf;margin-bottom:22px;font-family:var(--font-article-ui);font-size:14px;line-height:1.5}.toc-toggle{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;border:0;background:transparent;padding:12px 14px;font-family:var(--font-article-ui);font-size:14px;color:var(--article-text-secondary);cursor:pointer}.toc-chevron{transition:transform .2s ease}.toc-toggle[aria-expanded=false] .toc-chevron{transform:rotate(-90deg)}.toc-body{padding:0 14px 12px}.toc-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.toc-item--h3{padding-left:12px}.toc-link{text-decoration:none;font-size:14px;line-height:1.55;color:var(--color-secondary)}.toc-link:hover{color:var(--color-accent)}.prose-wrap{position:relative}.prose{max-width:var(--content);margin:0 auto;font-family:GenWanMin2,"Noto Serif TC",serif;font-size:17px;line-height:2;letter-spacing:.02em;color:#4a4a4a;text-wrap:pretty}.article .prose h1,.article .prose h2,.article .prose h3{color:var(--article-text-primary)}.article .prose h1{font-family:var(--font-article-heading);font-size:24px;font-weight:500;line-height:1.4;margin-top:48px;margin-bottom:20px}.article .prose h2{font-family:var(--font-article-heading);font-size:24px;font-weight:500;line-height:1.4;margin-top:56px;margin-bottom:20px;border-bottom:1px solid var(--color-border);padding-bottom:10px;position:relative;letter-spacing:.04em}.article .prose h2:after{content:"";position:absolute;bottom:-1px;left:0;width:40px;height:3px;background:linear-gradient(135deg,var(--color-primary),var(--color-accent));border-radius:2px}.article .prose h3{font-family:GenWanMin2,"Noto Serif TC",serif;font-size:18px;font-weight:500;line-height:1.4;margin-top:40px;margin-bottom:16px;display:flex;align-items:center;gap:10px;letter-spacing:.04em}.article .prose h3:before{content:"";display:inline-block;width:8px;height:8px;background:var(--color-primary);transform:rotate(45deg);flex-shrink:0}.article .prose p{margin-bottom:1.8em}.article .prose a{color:#4e6878;text-decoration:none;background-image:linear-gradient(transparent 50%,#7e99aa38 50%);border-bottom:1.5px dashed #4e6878;padding-bottom:1px}.article .prose a:hover{color:#3a5262;background-image:linear-gradient(transparent 0%,#7e99aa66);border-bottom-color:transparent}.article .prose strong{font-weight:var(--weight-medium);color:#333;background-image:linear-gradient(transparent 60%,#2f547433 60%)}.article .prose blockquote{margin:32px 0;padding:16px 28px 16px 36px;background:#2f547414;border-left:none;border-radius:0 var(--radius-md) var(--radius-md) 0;position:relative;color:var(--article-text-secondary);line-height:1.9;font-size:16px}.article .prose blockquote:before{content:"";position:absolute;left:-6px;top:8px;bottom:8px;width:18px;border-radius:2px;background:linear-gradient(180deg,#2f547494,#177f8a73);opacity:.55}.article .prose code{font-family:var(--font-code);font-size:14px;background:var(--color-bg-soft);padding:2px 6px;border-radius:4px}.article .prose pre{font-family:var(--font-code);font-size:14px;line-height:1.6;padding:24px;border-radius:var(--radius-md);border:1px solid var(--color-border);background:#fff;margin:32px 0;overflow-x:auto}.article .prose pre code{background:none;padding:0}.article .prose img{max-width:100%;height:auto;border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);margin:24px 0}.article .prose figure{margin:24px 0}.article .prose figcaption{font-family:var(--font-article-ui);font-size:14px;color:var(--article-text-muted);text-align:center;margin-top:8px}.article .prose ul,.article .prose ol{margin-bottom:28px;padding-left:24px}.article .prose li{margin-bottom:8px}.article .prose li::marker{color:var(--color-primary)}.article .prose table{width:100%;border-collapse:separate;border-spacing:0;margin:24px 0;font-size:14px;line-height:1.6;border-radius:12px;overflow:hidden;border:1px solid rgba(47,84,116,.18);box-shadow:var(--shadow-sm);background:#fff}.article .prose th{font-family:var(--font-heading);font-weight:var(--weight-bold);text-align:left;padding:10px 14px;background:#2f54741f;color:var(--color-text);border-bottom:2px solid rgba(47,84,116,.35)}.article .prose td{padding:10px 14px;border-bottom:1px solid rgba(47,84,116,.12)}.article .prose tr:last-child td{border-bottom:none}.article .prose hr{border:none;width:120px;height:1px;background:linear-gradient(90deg,transparent,var(--color-primary),transparent);margin:48px auto;opacity:.5}.related-posts{margin-top:8px}.related-title{margin:0 0 12px;font-family:var(--font-heading);font-size:22px;color:var(--color-text)}.related-list{display:grid;gap:10px}.related-card{display:flex;align-items:center;gap:10px;text-decoration:none;background:#ffffffd1;border:1px solid rgba(47,84,116,.2);border-radius:12px;padding:10px 14px;transition:border-color .2s ease}.related-card:hover{border-color:#177f8a59}.related-cat{flex-shrink:0;font-family:var(--font-ui);font-size:11px;color:var(--color-secondary);letter-spacing:.06em;padding:3px 10px;background:#e9eff6d9;border:1px solid rgba(47,84,116,.18);border-radius:6px}.related-card-title{flex:1;font-size:14px;line-height:1.6;color:var(--color-text-secondary)}.related-arrow{flex-shrink:0;color:var(--color-accent);font-size:15px}.share-bar{margin-top:18px;display:flex;flex-wrap:wrap;align-items:center;gap:8px}.share-label{font-family:var(--font-article-ui);font-size:14px;color:#888;margin-right:4px}.share-btn{border:1px solid rgba(47,84,116,.24);background:#ffffffe6;color:var(--color-text-secondary);border-radius:999px;padding:6px 12px;font-family:var(--font-ui);font-size:12px;text-decoration:none;cursor:pointer}.share-btn:hover{border-color:#177f8a73;color:var(--color-text)}.search-shell{max-width:880px}.search-input{width:100%;padding:12px 14px;font-size:16px;border-radius:var(--radius-sm);border:1px solid var(--color-border);font-family:var(--font-ui)}.search-status{margin:12px 0;font-family:var(--font-ui);font-size:13px;color:var(--color-muted)}.search-results{display:grid;gap:10px}.search-item{background:#ffffffe6;border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:12px}@media(max-width:960px){.main-grid{grid-template-columns:1fr;padding:20px 0 16px}.sidebar{order:2;margin-top:8px}}@media(max-width:767px){.container,.container-narrow{padding:0 20px}.nav-links{display:none}.nav-toggle{display:inline-flex;align-items:center;justify-content:center}.page-shell{padding-top:10px}.hero{padding:40px 0 20px}.cat-hero{padding:48px 0 32px}.cat-title{font-size:30px}.post-grid{grid-template-columns:1fr}.hero-title{font-size:30px}.section-title{font-size:18px}.post-title{font-size:19px}.article{border-radius:16px;padding:20px 16px}.article-title{font-size:28px}.article .prose{font-size:16px}.article .prose h2{font-size:24px}.article .prose h3{font-size:18px}}
