:root{--lacquer: #7a1414;--lacquer-deep: #3b0707;--red: #b3261e;--gold: #e7c873;--gold-deep: #b98a2c;--paper: #fbf3e2;--paper-2: #f3e3c0;--ink: #3d2b1f;--ink-soft: #7a5c45;--night: #1a0606;--ok: #2f7a3f;--radius: 18px;--serif: "Noto Serif", Georgia, serif;--sans: "Be Vietnam Pro", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0;min-height:100%}body{background:var(--night);color:var(--paper);font-family:var(--sans);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit}a{color:inherit}.app{position:relative;min-height:100dvh;overflow-x:hidden;isolation:isolate}.sky{position:fixed;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(1200px 600px at 50% -10%,#6d1a12 0%,transparent 60%),radial-gradient(circle at 20% 30%,rgba(231,200,115,.08) 0 1px,transparent 2px) 0 0 / 90px 90px,radial-gradient(circle at 70% 60%,rgba(231,200,115,.06) 0 1px,transparent 2px) 0 0 / 130px 130px,linear-gradient(180deg,#2a0808 0%,var(--night) 70%)}.moon{position:absolute;top:64px;right:6%;width:56px;height:56px;border-radius:50%;background:radial-gradient(circle at 40% 40%,#fff6d8,#f3d58b 70%);box-shadow:0 0 60px 18px #f3d58b40;opacity:.5}.stage{position:relative;z-index:1;max-width:520px;margin:0 auto;padding:0 16px 32px;padding-top:env(safe-area-inset-top)}.topbar{display:flex;align-items:center;justify-content:space-between;padding:14px 0}.brand{background:none;border:0;padding:0;display:flex;align-items:center;gap:8px;font-weight:600;letter-spacing:.02em;cursor:pointer}.brand__dot{width:10px;height:10px;border-radius:50%;background:var(--gold);box-shadow:0 0 10px var(--gold)}.topbar__right{display:flex;align-items:center;gap:8px}.streak{font-size:13px;padding:4px 10px;border:1px solid rgba(231,200,115,.45);border-radius:999px;color:var(--gold)}.icon-btn{background:#ffffff0f;border:1px solid rgba(255,255,255,.12);width:36px;height:36px;border-radius:50%;cursor:pointer}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 22px;border-radius:999px;border:0;cursor:pointer;background:linear-gradient(180deg,#d63a2e,var(--red));color:#fff;font-weight:600;text-decoration:none;box-shadow:0 6px 18px #b3261e59,inset 0 1px #ffffff40;transition:transform .12s ease,filter .2s ease}.btn:active{transform:translateY(1px) scale(.99)}.btn:disabled{filter:grayscale(.6) brightness(.8);cursor:default}.btn:focus-visible,.chip:focus-visible,.offering:focus-visible{outline:3px solid var(--gold);outline-offset:2px}.btn--big{min-height:56px;padding:0 34px;font-size:18px}.btn--ghost{background:transparent;color:inherit;border:1px solid currentColor;box-shadow:none}.btn--gold{background:linear-gradient(180deg,#f3d98d,var(--gold-deep));color:#3b2306;box-shadow:0 6px 18px #b98a2c59}.btn--small{min-height:38px;padding:0 16px;font-size:14px}.link{color:var(--gold);text-underline-offset:3px;font-size:14px}.scene{animation:rise .45s ease both}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}.gate-scene{text-align:center;padding-top:4px}.gate{width:100%;max-width:420px;height:auto;filter:drop-shadow(0 18px 30px rgba(0,0,0,.5))}.gate__plaque{fill:var(--gold);font:700 11px var(--sans);letter-spacing:.12em}.lantern{animation:sway 3.2s ease-in-out infinite}.lantern:nth-of-type(2){animation-delay:-1.4s}@keyframes sway{0%,to{transform:rotate(-4deg)}50%{transform:rotate(4deg)}}.title{font-family:var(--serif);font-weight:700;font-size:clamp(28px,8vw,38px);line-height:1.2;margin:18px 0 10px;color:var(--paper)}.lead{color:#e9d9bd;margin:0 auto 22px;max-width:34ch;line-height:1.55}.gate-meta{margin-top:22px;display:grid;gap:10px;justify-items:center;color:#d9c6a4}.streak-dots{display:flex;gap:8px}.streak-dots span{width:14px;height:14px;border-radius:50%;border:1.5px solid var(--gold)}.streak-dots span.on{background:var(--gold);box-shadow:0 0 10px var(--gold)}.progress{list-style:none;display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:0;margin:4px 0 14px;font-size:12px;color:#c9b08a}.progress li{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center}.progress span{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;border:1.5px solid rgba(231,200,115,.5);font-weight:600}.progress li.done span{background:var(--gold);color:#3b2306;border-color:var(--gold)}.progress li.now{color:var(--paper)}.progress li.now span{border-color:var(--paper);box-shadow:0 0 0 4px #e7c87333}.panel{background:linear-gradient(180deg,var(--paper),#f6e7c8);color:var(--ink);border-radius:var(--radius);padding:22px 18px;border:2px solid var(--gold);box-shadow:0 20px 50px #00000073;display:grid;gap:16px;justify-items:center;text-align:center}.panel h2{font-family:var(--serif);color:var(--red);margin:0;font-size:24px}.hint{margin:0;color:var(--ink-soft);font-size:14px;line-height:1.5}.result .hint,.tree .hint,.people .hint{color:#d9c6a4}.result .panel .hint{color:var(--ink-soft)}.small{font-size:12.5px}.center{text-align:center}.offerings{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;width:100%}.offering{display:grid;justify-items:center;gap:6px;padding:14px 8px;border-radius:14px;cursor:pointer;background:#fff8ea;border:2px solid #e7d5ac;color:var(--ink);font-weight:500;transition:transform .15s ease,border-color .2s ease,box-shadow .2s ease}.offering svg{width:58px;height:58px}.offering.is-on{border-color:var(--red);box-shadow:0 0 0 3px #b3261e26;transform:translateY(-2px)}.flame{transform-origin:32px 20px;animation:flicker .9s ease-in-out infinite alternate}@keyframes flicker{0%{transform:scale(1)}to{transform:scale(.92,1.08)}}.incense-hit{position:relative;background:none;border:0;padding:0;cursor:pointer;touch-action:none;user-select:none;-webkit-user-select:none}.incense{position:relative;width:220px}.incense svg{width:100%;height:auto;display:block}.ember{fill:#ff5a1f;filter:drop-shadow(0 0 4px #ff8a3d);transition:opacity .1s linear}.is-lit .ember{animation:glow 1.4s ease-in-out infinite alternate}@keyframes glow{0%{opacity:.75}to{opacity:1}}.smoke{position:absolute;inset:-40px 0 auto;height:120px;pointer-events:none}.smoke span{position:absolute;bottom:0;width:22px;height:22px;border-radius:50%;background:#5f554e73;filter:blur(6px);animation:smoke 3.6s ease-out infinite;animation-delay:calc(var(--i) * .6s)}@keyframes smoke{0%{transform:translate(-50%,30px) scale(.5);opacity:0}20%{opacity:.9}to{transform:translate(calc(-50% + 18px),-90px) scale(2.6);opacity:0}}.ring{position:absolute;left:50%;top:46%;width:86px;height:86px;transform:translate(-50%,-50%);border-radius:50%;background:conic-gradient(var(--red) calc(var(--p) * 360deg),rgba(179,38,30,.15) 0);display:grid;place-items:center;opacity:.9}.ring span{width:70px;height:70px;border-radius:50%;background:#fbf3e2d9}.ring span:after{content:"Giữ";display:grid;place-items:center;height:100%;color:var(--red);font-weight:700}.row{display:grid;grid-template-columns:1fr 112px;gap:10px;width:100%}.field{display:grid;gap:6px;width:100%;text-align:left;font-size:14px;position:relative}.field>span{color:var(--ink-soft);font-weight:500}.field input,.field select,.field textarea{width:100%;border:1.5px solid #dcc79b;border-radius:12px;background:#fffaf0;color:var(--ink);padding:12px;font:16px var(--sans);color-scheme:light}.field textarea{resize:none}.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--red);box-shadow:0 0 0 3px #b3261e1f}.count{position:absolute;right:10px;bottom:8px;color:#b49b78;font-size:11px}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{border:1.5px solid #dcc79b;background:#fffaf0;color:var(--ink);border-radius:999px;padding:8px 12px;font-size:14px;cursor:pointer}.chip.is-on{background:var(--red);border-color:var(--red);color:#fff}.check{display:flex;gap:10px;align-items:flex-start;text-align:left;font-size:13.5px;color:var(--ink-soft);line-height:1.45}.check input{width:20px;height:20px;margin-top:1px;accent-color:var(--red);flex:none}.tube-hit{background:none;border:0;padding:0;cursor:pointer;position:relative}.tube{position:relative;width:190px}.tube svg{width:100%;height:auto;display:block}.tube__char{fill:var(--gold);font:700 26px var(--serif);letter-spacing:.1em}.tube.is-shaking{animation:shake .26s ease-in-out}@keyframes shake{0%,to{transform:rotate(0)}20%{transform:rotate(-11deg) translateY(-4px)}45%{transform:rotate(9deg)}70%{transform:rotate(-6deg) translateY(-2px)}}.stick{position:absolute;left:62%;top:4%;width:14px;height:150px;border-radius:4px;background:linear-gradient(90deg,#e6c27a,#f6dca0,#d4a957);border:1px solid #a37b33;animation:drop .9s cubic-bezier(.3,1.4,.5,1) both;transform-origin:bottom center}.stick span{position:absolute;top:8px;left:50%;transform:translate(-50%);font:700 11px var(--sans);color:var(--red);writing-mode:vertical-rl}@keyframes drop{0%{transform:translateY(40px) rotate(0);opacity:0}to{transform:translate(40px,-36px) rotate(28deg);opacity:1}}.shake-dots{display:flex;gap:10px}.shake-dots span{width:12px;height:12px;border-radius:50%;background:#e7d5ac;transition:background .2s}.shake-dots span.on{background:var(--red)}.tabs{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:4px;background:#ffffff0f;border-radius:999px;margin-bottom:14px;border:1px solid rgba(231,200,115,.25)}.tabs button{border:0;background:none;padding:10px 2px;border-radius:999px;font-size:13.5px;white-space:nowrap;cursor:pointer;color:#e9d9bd}.tabs button.is-on{background:var(--gold);color:#3b2306;font-weight:600}.fcard{background:var(--paper);color:var(--ink);border-radius:var(--radius);border:3px solid var(--gold);padding:26px 20px 22px;text-align:center;display:grid;gap:10px;justify-items:center;box-shadow:0 0 0 6px var(--lacquer),0 24px 60px #0000008c;animation:unfold .6s cubic-bezier(.2,.9,.3,1.2) both}@keyframes unfold{0%{transform:scale(.9) rotateX(20deg);opacity:0}to{transform:none;opacity:1}}.fcard__head{color:var(--ink-soft);letter-spacing:.1em;text-transform:uppercase;font-size:12px}.fcard__title{font-family:var(--serif);font-size:clamp(28px,8vw,36px);color:var(--red);margin:0;line-height:1.15}.fcard__level{padding:4px 16px;border-radius:999px;color:#fff;font-weight:600;font-size:14px;background:#a35f00}.fcard--thuong .fcard__level{background:var(--red)}.fcard--tieu .fcard__level{background:#6b5a00}.fcard__poem{font-family:var(--serif);font-style:italic;font-size:18px;line-height:1.6;margin:8px 0 2px}.fcard__poem p{margin:0}.fcard__rule{width:70%;height:1px;background:#e0cfa6}.fcard__meaning{margin:0;font-size:16px;line-height:1.5}.fcard__advice{margin:0;background:var(--paper-2);border-radius:12px;padding:12px 14px;font-size:14.5px;line-height:1.5;text-align:left}.fcard__who{margin:4px 0 0;color:var(--ink-soft);font-size:13px}.fcard__note{margin:0;font-size:12.5px;color:#8a5a2b}.fcard__actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;width:100%;margin-top:6px}.fcard .btn--gold{width:100%}.fcard .hint{color:var(--ink-soft)}.people{display:grid;gap:12px}.person{display:grid;grid-template-columns:96px 1fr;gap:14px;background:var(--paper);color:var(--ink);border-radius:16px;padding:12px;border:1.5px solid var(--gold)}.person__photo{width:96px;height:120px;border-radius:12px;background:#e7d5ac center / cover no-repeat;display:grid;place-items:center;font:700 34px var(--serif);color:var(--red)}.person__body{display:grid;align-content:center;gap:6px;text-align:left}.person__body h3{margin:0;font-family:var(--serif);font-size:19px;color:var(--red)}.person__body h3 small{font-family:var(--sans);font-weight:400;color:var(--ink-soft);font-size:13px}.person__body p{margin:0;font-size:14px;color:var(--ink-soft)}.person .btn{justify-self:start}.sent{color:var(--ok);font-weight:600;font-size:14px}.people .link{justify-self:center}.tree{display:grid;gap:14px}.tags{display:grid;grid-template-columns:repeat(2,1fr);gap:18px 12px;padding-top:12px;background:linear-gradient(180deg,transparent 0 6px,rgba(231,200,115,.5) 6px 8px,transparent 8px) 0 0 / 100% 100% no-repeat}.tag{position:relative;background:linear-gradient(180deg,#c6312a,#8f1d1d);color:#fff4dc;border-radius:6px 6px 12px 12px;padding:16px 12px 10px;transform:rotate(var(--tilt));box-shadow:0 10px 20px #00000059;display:grid;gap:6px;border-top:3px solid var(--gold)}.tag__string{position:absolute;top:-14px;left:50%;width:2px;height:14px;background:var(--gold)}.tag small{color:var(--gold);font-size:11px;letter-spacing:.03em}.tag p{margin:0;font-family:var(--serif);font-size:15px;line-height:1.45;word-break:break-word}.tag footer{display:grid;gap:6px;font-size:11.5px;color:#f1cfb4}.tag footer button{justify-self:start;background:#ffffff1f;border:1px solid rgba(255,255,255,.3);color:#fff;border-radius:999px;padding:4px 10px;font-size:12px;cursor:pointer}.tag footer button.is-on{background:var(--gold);color:#3b2306;border-color:var(--gold)}.toast{position:fixed;left:50%;bottom:calc(18px + env(safe-area-inset-bottom));transform:translate(-50%);z-index:20;width:max-content;max-width:calc(100% - 32px);padding:12px 16px;border-radius:14px;background:#2b1a10;border:1px solid var(--gold);color:var(--paper);box-shadow:0 10px 30px #00000080;font-size:14px;text-align:center;animation:toast-in .3s ease both}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,12px)}to{opacity:1;transform:translate(-50%)}}.toast--ok{border-color:#7fcf8f}.toast--warn{border-color:#ff9a7a}.loading{min-height:70dvh;display:grid;place-items:center;align-content:center;gap:14px;color:#e9d9bd}.loading__lantern{width:46px;height:58px;border-radius:50%;background:#e0412f;box-shadow:0 0 40px #e0412f;animation:sway 1.6s ease-in-out infinite}.spinner{width:34px;height:34px;border-radius:50%;border:3px solid #e7d5ac;border-top-color:var(--red);animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.foot{margin-top:28px;text-align:center;font-size:11.5px;color:#a78d6c}@media (min-width: 560px){.stage{padding-bottom:48px}.tags{grid-template-columns:repeat(3,1fr)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition:none!important}}.admin{max-width:960px;margin:0 auto;padding:20px 16px;color:var(--paper)}.admin h1{font-family:var(--serif);color:var(--gold)}.admin table{width:100%;border-collapse:collapse;font-size:14px}.admin th,.admin td{border-bottom:1px solid rgba(231,200,115,.2);padding:8px 6px;text-align:left;vertical-align:top}.admin .bar{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0;align-items:center}.admin .kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin:12px 0 20px}.admin .kpi{background:#ffffff0f;border:1px solid rgba(231,200,115,.25);border-radius:12px;padding:12px}.admin .kpi b{display:block;font-size:24px;color:var(--gold)}.admin input[type=password]{padding:12px;border-radius:10px;border:1px solid var(--gold);background:#2b1a10;color:var(--paper);font:16px var(--sans)}.admin .wrap{overflow-x:auto}.moon{display:none}.app:has(.gate-scene) .moon{display:block}
