:root{
  --paper:#f1ede4;--surface:#fbf8f1;--ink:#24221e;--muted:#777065;--muted-2:#9b9387;
  --line:#ded6c7;--line-soft:#eae4d8;--green:#2f6249;--green-soft:#e5eee7;--gold:#b78b2d;--coral:#b7684e;
  --font:'IBM Plex Sans Thai','IBM Plex Sans',sans-serif;--display:'Kanit','IBM Plex Sans Thai',sans-serif;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--paper);color:var(--ink);font:14px/1.65 var(--font);-webkit-font-smoothing:antialiased}
a{color:inherit}
button,input,textarea,select{font:inherit}
button{cursor:pointer}
.hidden{display:none!important}
.site-shell{width:min(1180px,calc(100% - 40px));margin:0 auto}
.site-header{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:88px;border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:var(--ink)}
.brand img{width:42px;height:42px;border-radius:50%;object-fit:contain}
.brand b{display:block;font:600 18px/1.1 var(--display);letter-spacing:-.02em}
.brand small{display:block;margin-top:4px;color:var(--muted);font-size:9px;letter-spacing:.13em;text-transform:uppercase}
.site-nav{display:flex;align-items:center;gap:22px;font-size:12px;color:var(--muted)}
.site-nav a{text-decoration:none}
.site-nav a:hover{color:var(--ink)}
.nav-admin{padding:8px 13px;border:1px solid var(--line);border-radius:99px;color:var(--ink)!important;background:rgba(255,255,255,.35)}
.hero{display:grid;grid-template-columns:1.25fr .75fr;gap:50px;align-items:center;padding:72px 0 80px}
.kicker{margin:0 0 12px;color:var(--green);font:500 9px/1.4 var(--font);letter-spacing:.16em;text-transform:uppercase}
.hero h1{margin:0;font:500 clamp(46px,7vw,84px)/.98 var(--display);letter-spacing:-.055em}
.hero h1 em{color:var(--green);font-style:normal}
.hero-lead{margin:24px 0 0;max-width:44ch;color:var(--muted);font-size:14px;line-height:1.9}
.hero-mark{position:relative;display:grid;place-items:center;min-height:300px}
.hero-mark__ring{position:absolute;width:250px;height:250px;border:1px solid var(--line);border-radius:50%}
.hero-mark__ring:after{content:'';position:absolute;inset:22px;border:1px dashed #cfc5b3;border-radius:50%}
.hero-mark__letter{position:relative;font:500 82px/1 var(--display);letter-spacing:-.06em;color:var(--ink)}
.hero-mark__note{position:absolute;bottom:12px;color:var(--muted);font-size:9px;letter-spacing:.14em;text-transform:uppercase}
.catalog{padding:0 0 90px}
.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;padding-top:28px;border-top:1px solid var(--line);margin-bottom:22px}
.section-head h2{margin:0;font:600 clamp(24px,3vw,34px)/1.2 var(--display);letter-spacing:-.035em}
.search{display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--ink);padding-bottom:6px;min-width:240px}
.search span{font-size:9px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.search input{min-width:0;flex:1;border:0;outline:0;background:transparent;color:var(--ink);font-size:12px;padding:3px 0}
.book-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.book-card{position:relative;display:flex;flex-direction:column;min-height:250px;padding:20px 20px 16px;border:1px solid var(--line);border-radius:14px;background:var(--surface);text-decoration:none;color:var(--ink);overflow:hidden;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease}
.book-card:hover{transform:translateY(-3px);border-color:#c7bca9;box-shadow:0 14px 34px rgba(36,34,30,.07)}
.book-card__top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.book-card__index{color:var(--muted-2);font:500 10px var(--display);letter-spacing:.1em}
.book-card__badge{display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border-radius:99px;font-size:9px;font-weight:600}
.book-card__badge.public{background:var(--green-soft);color:var(--green)}
.book-card__badge.students{background:#f3e9e2;color:#965642}
.book-card h3{margin:28px 0 8px;font:600 23px/1.25 var(--display);letter-spacing:-.03em}
.book-card p{margin:0;color:var(--muted);font-size:12px;line-height:1.75;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.book-card__foot{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:auto;padding-top:18px;border-top:1px solid var(--line-soft);color:var(--muted);font-size:10px}
.book-card__foot b{font-weight:600;color:var(--ink)}
.book-card__arrow{font-size:16px;color:var(--green)}
.empty-state{padding:70px 20px;text-align:center;border:1px dashed var(--line);border-radius:14px;color:var(--muted)}
.empty-state span{font:500 32px var(--display);color:var(--muted-2)}
.empty-state h3{margin:8px 0 4px;font:600 18px var(--display);color:var(--ink)}
.empty-state p{margin:0;font-size:12px}
.site-footer{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:90px;border-top:1px solid var(--line);color:var(--muted);font-size:10px}
.site-footer .brand img{width:30px;height:30px}.site-footer .brand b{font-size:13px}.site-footer .brand small{font-size:8px}
.site-footer p{margin:0}.site-footer a{text-decoration:none}.site-footer a:hover{color:var(--ink)}
.brand--small{gap:8px}
/* book */
.book-page{padding:36px 0 70px}
.book-back{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:11px;text-decoration:none;margin-bottom:26px}
.book-hero{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(250px,.65fr);gap:34px;padding:24px 0 34px;border-bottom:1px solid var(--line)}
.book-hero h1{margin:6px 0 12px;font:500 clamp(34px,5vw,64px)/1.05 var(--display);letter-spacing:-.05em}
.book-hero p{margin:0;max-width:55ch;color:var(--muted);font-size:13px;line-height:1.9}
.book-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:18px;color:var(--muted);font-size:10px}
.book-stats{display:grid;gap:8px;align-content:end}
.book-stat{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--line-soft)}
.book-stat span{color:var(--muted);font-size:10px}.book-stat b{font:500 18px var(--display)}
.book-tools{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;padding:20px 0 14px}
.chapter-filter{display:flex;gap:5px;flex-wrap:wrap}
.chapter-chip{border:1px solid var(--line);border-radius:99px;background:transparent;color:var(--muted);font-size:10px;padding:5px 10px}
.chapter-chip.is-active{background:var(--ink);border-color:var(--ink);color:#fff}
.book-search{display:flex;align-items:center;gap:7px;border-bottom:1px solid var(--ink);padding:4px 0}
.book-search input{border:0;outline:0;background:transparent;min-width:170px;font-size:11px;color:var(--ink)}
.entry-list{border-top:1px solid var(--line)}
.entry-row{display:grid;grid-template-columns:minmax(130px,.42fr) minmax(0,1fr);gap:22px;padding:20px 0;border-bottom:1px solid var(--line-soft)}
.entry-word{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap}
.entry-word h3{margin:0;font:600 23px/1.3 var(--display);letter-spacing:-.025em;word-break:break-word}
.entry-chapter{display:inline-flex;align-items:center;padding:3px 7px;border-radius:99px;font-size:8px;font-weight:600;color:#fff;white-space:nowrap}
.entry-values{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px 24px}
.entry-field{display:flex;align-items:baseline;gap:7px;min-width:0}
.entry-field span{flex:0 0 auto;color:var(--muted-2);font-size:9px;letter-spacing:.02em}
.entry-field strong{font-weight:400;color:var(--ink);font-size:13px;word-break:break-word}
.entry-field strong .katex{font-size:1.05em}
.entry-empty{padding:55px 20px;text-align:center;color:var(--muted);font-size:12px;border-bottom:1px solid var(--line-soft)}
/* access */
.access-overlay{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:18px;background:rgba(30,27,22,.42);backdrop-filter:blur(7px)}
.access-card{width:min(100%,430px);max-height:calc(100dvh - 36px);overflow:auto;padding:24px;border:1px solid var(--line);border-radius:16px;background:var(--surface);box-shadow:0 24px 70px rgba(20,18,15,.2)}
.access-brand{display:flex;align-items:center;gap:10px;margin-bottom:18px}.access-brand img{width:40px;height:40px;border-radius:50%;object-fit:contain}.access-brand b{display:block;font:600 17px var(--display)}.access-brand span{display:block;color:var(--muted);font-size:9px;letter-spacing:.1em;text-transform:uppercase}
.access-card h2{margin:0 0 6px;font:600 22px/1.3 var(--display);letter-spacing:-.03em}
.access-card>p{margin:0 0 18px;color:var(--muted);font-size:12px;line-height:1.8}
.field{margin-bottom:12px}.field label{display:block;margin-bottom:5px;font-size:10px;color:var(--muted)}.input{width:100%;min-height:42px;padding:9px 11px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);font-size:12px;outline:0}.input:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(47,98,73,.11)}
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:8px 14px;border:1px solid transparent;border-radius:8px;font-size:11px;font-weight:600;text-decoration:none}.btn--ink{width:100%;background:var(--ink);color:#fff}.btn--ghost{background:transparent;border-color:var(--line);color:var(--ink)}
.access-error{margin:8px 0;padding:8px 10px;border-radius:7px;background:#f7e6df;color:#8c4230;font-size:11px}.access-note{margin-top:12px;color:var(--muted-2);font-size:9px;text-align:center}
.loading-screen{display:grid;place-items:center;gap:10px;min-height:45vh;color:var(--muted);font-size:11px}.spinner{width:22px;height:22px;border:2px solid var(--line);border-top-color:var(--green);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
@media(max-width:900px){.hero{grid-template-columns:1fr;gap:20px;padding:48px 0 52px}.hero-mark{display:none}.book-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.book-hero{grid-template-columns:1fr}.book-stats{grid-template-columns:repeat(3,1fr);gap:12px}.book-stat{display:block;border:0;padding:0}.book-stat b{display:block;margin-top:2px}.entry-row{grid-template-columns:1fr;gap:10px}}
@media(max-width:620px){.site-shell{width:calc(100% - 28px)}.site-header{min-height:72px}.brand img{width:36px;height:36px}.brand b{font-size:16px}.site-nav{gap:12px;font-size:11px}.nav-admin{padding:7px 10px}.hero{padding:38px 0 42px}.hero h1{font-size:50px}.book-grid{grid-template-columns:1fr}.section-head{align-items:flex-start;flex-direction:column}.search{width:100%}.book-page{padding-top:22px}.book-hero{padding-top:10px}.book-tools{align-items:flex-start;flex-direction:column}.entry-values{grid-template-columns:1fr}.site-footer{align-items:flex-start;flex-direction:column;padding:20px 0;gap:8px}.access-card{padding:20px}}
/* motion layer */
.hero{position:relative;isolation:isolate;overflow:hidden}
.hero-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:-1;pointer-events:none;opacity:.85}
.hero-copy,.hero-mark{position:relative;z-index:1}
.hero h1 span{display:inline-block}
.hero h1 em{display:inline-block}
.hero-mark__ring{animation:ringBreath 9s ease-in-out infinite}
.hero-mark__letter{animation:letterFloat 7s ease-in-out infinite}
.hero-mark__note{animation:noteDrift 11s ease-in-out infinite}
.hero-scroll{display:inline-flex;align-items:center;gap:10px;margin-top:34px;color:var(--muted);font-size:10px;letter-spacing:.08em;text-decoration:none;text-transform:uppercase}
.hero-scroll i{position:relative;display:block;width:38px;height:1px;background:var(--line)}
.hero-scroll i:after{content:'';position:absolute;right:0;top:-2px;width:5px;height:5px;border-right:1px solid var(--muted);border-bottom:1px solid var(--muted);transform:rotate(-45deg);animation:scrollNudge 2.8s ease-in-out infinite}
[data-reveal]{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1)}
[data-reveal].is-visible{opacity:1;transform:none}
.book-card{opacity:0;animation:cardIn .75s cubic-bezier(.2,.7,.2,1) forwards}
.book-card:nth-child(2){animation-delay:.08s}.book-card:nth-child(3){animation-delay:.16s}.book-card:nth-child(4){animation-delay:.24s}.book-card:nth-child(5){animation-delay:.32s}
.book-card:hover h3{color:var(--green)}
.book-card h3{transition:color .2s ease}
.marquee-band{margin:0 0 80px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);overflow:hidden;padding:11px 0;color:var(--muted-2)}
.marquee-track{display:flex;align-items:center;gap:38px;width:max-content;animation:marquee 42s linear infinite;font:500 11px var(--display);letter-spacing:.12em;text-transform:uppercase;white-space:nowrap}
.marquee-track span{display:inline-flex;align-items:center;gap:12px}.marquee-track span:after{content:'·';color:var(--green)}
@keyframes ringBreath{0%,100%{transform:scale(1);opacity:.9}50%{transform:scale(1.035);opacity:1}}
@keyframes letterFloat{0%,100%{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-9px) rotate(1deg)}}
@keyframes noteDrift{0%,100%{transform:translateX(-4px);opacity:.7}50%{transform:translateX(4px);opacity:1}}
@keyframes scrollNudge{0%,100%{transform:rotate(-45deg) translate(0,0);opacity:.5}50%{transform:rotate(-45deg) translate(3px,3px);opacity:1}}
@keyframes cardIn{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
@keyframes marquee{to{transform:translateX(-50%)}}
@media(max-width:900px){.hero-canvas{opacity:.6}.hero-scroll{margin-top:24px}}
@media(max-width:620px){.marquee-band{margin-bottom:48px}.marquee-track{gap:22px;font-size:9px}.hero-mark{display:none}.hero-scroll{margin-top:18px}}
@media(prefers-reduced-motion:reduce){
  *,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
  .hero-canvas{display:none}.book-card{opacity:1}
}
.hero-lead{white-space:pre-line}
