:root{color-scheme:light;--paper:#fdfcfa;--surface:#ffffff;--dot:#e8e4dc;--ink:#1b1a18;--ink-2:#55514b;--ink-3:#8a847c;--line:#e7e3db;--gold:#c7a189;--gold-deep:#8a6a3a;--accent:var(--gold-deep);--danger:#a3342a;--danger-soft:#fdeceb;--danger-line:#f0c4c0;--radius:14px;--radius-bento:22px;--radius-pill:999px;--shadow-tile:0 1px 2px rgba(27,26,24,0.04);--shadow-tile-hover:0 10px 28px rgba(27,26,24,0.1)}*{box-sizing:border-box}body,html{margin:0;padding:0}body{min-height:100dvh;background-color:var(--paper);background-image:radial-gradient(var(--dot) 1px,transparent 1px);background-size:22px 22px;background-attachment:fixed;color:var(--ink);font-family:system-ui,-apple-system,Noto Sans TC,PingFang TC,Microsoft JhengHei,sans-serif;line-height:1.6;-webkit-font-smoothing:antialiased}a{color:inherit}.page{max-width:1120px;margin:0 auto;padding:20px max(16px,env(safe-area-inset-left,0px)) max(48px,env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-right,0px))}@media (min-width:640px){.page{padding:28px 24px 72px}}.site-header{display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:space-between;padding:0 4px 18px;margin-bottom:26px;border-bottom:1px solid var(--line)}.site-header h1{margin:0;font-size:clamp(38px,8vw,48px);letter-spacing:.01em;font-weight:700}.site-id{display:flex;flex-direction:column;gap:4px}.header-actions{gap:8px}.greeting,.header-actions{display:flex;align-items:center}.greeting{margin:0;flex-wrap:wrap;gap:6px;font-size:30px;color:var(--ink-2);--cube-size:1.7em}.greeting-hello{display:inline-flex;align-items:center;line-height:1}.greeting-hello .hello-mark{width:4.6em;height:auto;overflow:visible;margin:-.5em 0}.greeting-hello .hello-word{fill:var(--gold-deep)}.greeting-hello .hello-extra{fill:none;stroke:var(--gold-deep);stroke-width:9;stroke-linecap:round}.greeting-stage{position:relative;display:inline-block;width:3.7em;flex-shrink:0;height:var(--cube-size);perspective:17.3em}.greeting-cube{position:absolute;inset:0;transform-style:preserve-3d;transition:transform .9s cubic-bezier(.65,0,.35,1)}.greeting-face{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--ink);font-weight:600;white-space:nowrap;background:var(--surface);border:1px solid var(--line);border-radius:6px;-webkit-backface-visibility:hidden;backface-visibility:hidden}.greeting-face[data-face="0"]{transform:rotateX(0deg) translateZ(calc(var(--cube-size) / 2))}.greeting-face[data-face="1"]{transform:rotateX(-90deg) translateZ(calc(var(--cube-size) / 2))}.greeting-face[data-face="2"]{transform:rotateX(-180deg) translateZ(calc(var(--cube-size) / 2))}.greeting-face[data-face="3"]{transform:rotateX(-270deg) translateZ(calc(var(--cube-size) / 2))}.greeting-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.greeting-who{color:var(--ink);font-weight:500}@media (prefers-reduced-motion:reduce){.greeting-cube{transition:none}}@media (max-width:560px){.site-header{flex-direction:column;align-items:stretch;gap:14px}.header-actions{justify-content:flex-start;flex-wrap:wrap}.greeting{font-size:28px}}:root{--hello-1:#3ea9ff;--hello-2:#5b6ef5;--hello-3:#8a5cf0;--hello-4:#c05ce0;--hello-5:#ef6ea8;--hello-6:#ffab6b;--hello-gold:#ffd479;--curtain:#07060a}.welcome-root{display:none}html[data-welcome] .welcome-root{display:block}.welcome-backdrop{z-index:40;background:var(--curtain)}.welcome-backdrop,.welcome-stage{position:fixed;inset:0;pointer-events:none}.welcome-stage{z-index:41;display:flex;align-items:center;justify-content:center}html[data-welcome=reveal] .welcome-backdrop{opacity:0;transition:opacity var(--w-shrink,1.24s) ease}.welcome-stage{transform-origin:center center;will-change:transform,opacity}.welcome-svg{display:block;width:min(88vw,880px);height:auto;overflow:visible}.welcome-grad stop:first-child{stop-color:var(--hello-1)}.welcome-grad stop:nth-child(2){stop-color:var(--hello-2)}.welcome-grad stop:nth-child(3){stop-color:var(--hello-3)}.welcome-grad stop:nth-child(4){stop-color:var(--hello-4)}.welcome-grad stop:nth-child(5){stop-color:var(--hello-5)}.welcome-grad stop:nth-child(6){stop-color:var(--hello-6)}html[data-welcome=reveal] .welcome-grad stop{stop-color:var(--hello-gold);transition:stop-color calc(var(--w-shrink, 1.24s) * .78) ease}.welcome-stage .hello-word{fill:url(#welcome-grad)}.welcome-stage .hello-extra{fill:none;stroke:url(#welcome-grad);stroke-width:9;stroke-linecap:round}.welcome-pen-path{fill:none;stroke:#fff;stroke-width:56;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:100 100;stroke-dashoffset:100}html[data-welcome] .welcome-stage.is-writing .welcome-pen-path{stroke-dashoffset:0;transition:stroke-dashoffset var(--w-write,3s) cubic-bezier(.36,.06,.5,.96)}.welcome-pen-dot{fill:none;stroke:#fff6e0;stroke-width:11;stroke-linecap:round;stroke-dasharray:.001 100;stroke-dashoffset:0;opacity:0;filter:drop-shadow(0 0 6px #fff2d2) drop-shadow(0 0 18px var(--hello-4))}html[data-welcome] .welcome-stage.is-writing .welcome-pen-dot{opacity:1;stroke-dashoffset:-100;transition:stroke-dashoffset var(--w-write,3s) cubic-bezier(.36,.06,.5,.96),opacity calc(var(--w-write, 3s) * .15) ease var(--w-write,3s)}html[data-welcome=reveal] .welcome-pen-dot{opacity:0}html[data-welcome=reveal] .welcome-stage{opacity:0;transition:transform var(--w-shrink,1.24s) cubic-bezier(.22,1,.36,1),opacity calc(var(--w-shrink, 1.24s) * .29) ease calc(var(--w-shrink, 1.24s) * .84)}html[data-welcome] .greeting-hello{opacity:0}html[data-welcome=reveal] .greeting-hello{opacity:1;transition:opacity calc(var(--w-shrink, 1.24s) * .42) ease calc(var(--w-shrink, 1.24s) * .68)}html[data-welcome] .tile{opacity:0;pointer-events:none}html[data-welcome=reveal] .tile{pointer-events:auto}@keyframes welcome-tile-hero{0%{opacity:0;transform:translate(var(--hero-dx,0),var(--hero-dy,0)) scale(var(--hero-scale,.82))}to{opacity:1;transform:none}}html[data-welcome=reveal] .tile{animation:welcome-tile-hero var(--w-tile-dur,.84s) cubic-bezier(.24,1.24,.44,1) backwards}html[data-welcome=reveal] .tile:first-child{animation-delay:var(--w-tile-first,.28s)}html[data-welcome=reveal] .tile:nth-child(2){animation-delay:calc(var(--w-tile-first, .28s) + var(--w-tile-step, .12s))}html[data-welcome=reveal] .tile:nth-child(3){animation-delay:calc(var(--w-tile-first, .28s) + var(--w-tile-step, .12s) * 2)}html[data-welcome=reveal] .tile:nth-child(4){animation-delay:calc(var(--w-tile-first, .28s) + var(--w-tile-step, .12s) * 3)}html[data-welcome=reveal] .tile:nth-child(n+5){animation-delay:calc(var(--w-tile-first, .28s) + var(--w-tile-step, .12s) * 4)}@media (prefers-reduced-motion:reduce){html[data-welcome] .welcome-backdrop{display:none}html[data-welcome] .greeting-hello,html[data-welcome] .tile{opacity:1;animation:none;transition:none;pointer-events:auto}}.tile-group+.tile-group{margin-top:30px}.tile-group-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:0 4px 12px}.tile-group-head h2{margin:0;font-size:12.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}.tile-group-head p{margin:0;font-size:13px;color:var(--ink-3)}.checkbox-group+.checkbox-group{margin-top:18px}.checkbox-group-label{margin:0 0 8px;font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}.tile-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:132px;grid-gap:16px;gap:16px}.tile{display:flex;flex-direction:column;justify-content:flex-start;gap:8px;padding:22px;border-radius:var(--radius-bento);text-decoration:none;color:var(--ink);box-shadow:var(--shadow-tile);transition:transform .18s ease,box-shadow .18s ease}.tile:focus-visible,.tile:hover{transform:translateY(-3px);box-shadow:var(--shadow-tile-hover)}.tile-name{font-size:17px;font-weight:700;letter-spacing:.01em}.tile-desc{font-size:14px;color:var(--ink-2)}.tile-hint{margin-top:auto;font-size:12px;color:var(--ink-3)}.tile.is-pending{opacity:.72;cursor:default}.tile.is-pending:hover{transform:none;box-shadow:var(--shadow-tile)}.tile.tone-1{background:linear-gradient(145deg,#ddf3fb,#c9ebf7)}.tile.tone-2{background:linear-gradient(145deg,#fde5f1,#fbd2e8)}.tile.tone-3{background:linear-gradient(145deg,#fdf0cd,#fbe3a6)}.tile.tone-4{background:linear-gradient(145deg,#e8e0fc,#dbcffa)}.tile.tone-5{background:linear-gradient(145deg,#fde2cf,#fbd0b3)}.tile.tone-6{background:linear-gradient(145deg,#dcf6e4,#c6efd4)}@media (max-width:860px){.tile-grid{grid-template-columns:repeat(2,1fr);grid-auto-rows:124px}}@media (max-width:560px){.tile-grid{grid-template-columns:1fr;grid-auto-rows:auto}.tile{min-height:110px}}.empty-state{padding:40px 28px;text-align:center;background:var(--surface);border:1px dashed var(--line);border-radius:var(--radius-bento)}.empty-state h2{margin:0 0 10px;font-size:18px}.empty-state p{margin:0 auto;max-width:42ch;color:var(--ink-2);font-size:14px}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-bento);box-shadow:var(--shadow-tile);padding:24px}.login-wrap{min-height:100dvh;display:grid;place-items:center;padding:max(16px,env(safe-area-inset-left,0px))}@media (min-width:640px){.login-wrap{padding:24px}}.login-card{width:100%;max-width:400px;padding:32px 28px;text-align:center}.login-card h1{margin:0 0 24px;font-size:24px}.login-card .subtitle{margin:0 0 26px;font-size:14px;color:var(--ink-2)}.login-card .field,.login-card form{text-align:left}.field{display:block;margin-bottom:16px}.field span{display:block;margin-bottom:6px;font-size:13px;font-weight:600;color:var(--ink-2)}input[type=date],input[type=email],input[type=password],input[type=text],select,textarea{width:100%;padding:12px 14px;font-size:15px;font-family:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:12px;transition:border-color .15s ease}select{-webkit-appearance:none;-moz-appearance:none;appearance:none}textarea{resize:vertical}input[type=date]:focus,input[type=email]:focus,input[type=password]:focus,input[type=text]:focus,select:focus,textarea:focus{border-color:var(--gold)}input::placeholder{color:var(--ink-3)}a:focus-visible,button:focus-visible,input:focus-visible,summary:focus-visible{outline:2px solid var(--gold-deep);outline-offset:2px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 18px;font-size:14px;font-family:inherit;font-weight:600;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-pill);cursor:pointer;text-decoration:none;transition:border-color .15s ease,background .15s ease}.btn:hover:not(:disabled){border-color:var(--ink-3)}.btn:disabled{opacity:.55;cursor:progress}.btn:not(.btn-secondary){color:#fff;background:var(--ink);border-color:var(--ink)}.btn:not(.btn-secondary):hover:not(:disabled){background:#000;border-color:#000}.btn-block{width:100%;padding-top:12px;padding-bottom:12px}.btn-secondary{color:var(--ink-2)}.btn-secondary:hover:not(:disabled){color:var(--ink)}@media (hover:none) and (pointer:coarse){.btn,.checkbox-row,input,select{min-height:44px}.checkbox-row{align-items:center}.checkbox-row input{width:20px;height:20px}}.alert{margin-bottom:16px;padding:10px 14px;font-size:14px;color:var(--danger);background:var(--danger-soft);border:1px solid var(--danger-line);border-radius:12px}.notice{margin-bottom:20px;padding:12px 14px;font-size:14px;color:var(--ink);background:#fdf0cd;border:1px solid #f0d79a;border-radius:12px}.admin-user{margin-bottom:12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.admin-user>summary{display:flex;flex-wrap:wrap;gap:10px;align-items:baseline;padding:14px 18px;cursor:pointer;font-weight:600}.admin-user>summary .meta{font-weight:400;font-size:13px;color:var(--ink-2)}.admin-user-body{padding:4px 18px 20px;border-top:1px solid var(--line)}.badge{display:inline-block;padding:1px 10px;font-size:12px;font-weight:600;border-radius:var(--radius-pill);background:#fdf0cd;border:1px solid #f0d79a;color:var(--gold-deep)}.badge-off{border-color:var(--danger-line);color:var(--danger)}.badge-off,.danger-zone{background:var(--danger-soft)}.danger-zone{margin-top:22px;padding:16px;border:1px solid var(--danger-line);border-radius:var(--radius)}.danger-zone-title{margin:0 0 8px;font-size:13px;font-weight:600;letter-spacing:.02em;color:var(--danger)}.danger-zone .muted-note{margin-top:0}.btn.btn-danger{color:#ffffff;background:var(--danger);border-color:var(--danger)}.btn.btn-danger:hover:not(:disabled){background:#8c2c23;border-color:#8c2c23}.field-row{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:16px}.field-row .field{flex:1 1 180px;margin-bottom:0}.checkbox-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));grid-gap:8px 16px;gap:8px 16px;margin:10px 0 18px}@media (max-width:560px){.checkbox-grid{grid-template-columns:1fr;gap:2px}}.checkbox-row{display:flex;gap:8px;align-items:flex-start;font-size:14px}.checkbox-row input{margin-top:5px;accent-color:var(--gold-deep)}.checkbox-row .muted,.section-title{color:var(--ink-3);font-size:12px}.section-title{margin:22px 0 8px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.form-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.muted-note{font-size:13px;color:var(--ink-2)}code{font-size:.92em;padding:1px 6px;background:#f2efe9;border-radius:6px}