@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/a6c19694cd327cd4-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/851c4691abdf3def-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/a8a8dd7277bab4cf-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/313510e2713fb214-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:800;font-display:swap;src:url(/_next/static/media/a6c19694cd327cd4-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:800;font-display:swap;src:url(/_next/static/media/851c4691abdf3def-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:800;font-display:swap;src:url(/_next/static/media/a8a8dd7277bab4cf-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:800;font-display:swap;src:url(/_next/static/media/313510e2713fb214-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Hanken Grotesk Fallback;src:local("Arial");ascent-override:99.07%;descent-override:30.02%;line-gap-override:0.00%;size-adjust:100.94%}.__className_bf64f5{font-family:Hanken Grotesk,Hanken Grotesk Fallback;font-style:normal}.__variable_bf64f5{--font-display:"Hanken Grotesk","Hanken Grotesk Fallback"}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/edc640959b0c7826-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/ac0e76ddaeeb7981-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/64d784ea54a4acde-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/ff71da380fbe67dd-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/6d831b18ae5b01dc-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/558ca1a6aa3cb55e-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/edc640959b0c7826-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/ac0e76ddaeeb7981-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/64d784ea54a4acde-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/ff71da380fbe67dd-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/6d831b18ae5b01dc-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/558ca1a6aa3cb55e-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/edc640959b0c7826-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/ac0e76ddaeeb7981-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/64d784ea54a4acde-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/ff71da380fbe67dd-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/6d831b18ae5b01dc-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/558ca1a6aa3cb55e-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:JetBrains Mono Fallback;src:local("Arial");ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.00%;size-adjust:134.59%}.__className_898c26{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.__variable_898c26{--font-mono:"JetBrains Mono","JetBrains Mono Fallback"}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:300;font-display:swap;src:url(/_next/static/media/699bd79bf2b43bab-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:300;font-display:swap;src:url(/_next/static/media/672d4d9b9d8d459a-s.p.woff2) format("woff2");unicode-range:u+02d7,u+0303,u+0331,u+0e01-0e5b,u+200c-200d,u+25cc}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:300;font-display:swap;src:url(/_next/static/media/b129d5638b5694d2-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:300;font-display:swap;src:url(/_next/static/media/b88b793517a9d83f-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/db9bfcd87f1d73a3-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/4e2312c98e240c05-s.p.woff2) format("woff2");unicode-range:u+02d7,u+0303,u+0331,u+0e01-0e5b,u+200c-200d,u+25cc}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/feed52454563c595-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/f83e5507ec3854fa-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/8934311971e59087-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/bfdf244a9384e8b2-s.p.woff2) format("woff2");unicode-range:u+02d7,u+0303,u+0331,u+0e01-0e5b,u+200c-200d,u+25cc}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/b10e9fa1144bb4fb-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/d13ab8ed065835e4-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/d8c0f620f258dcc1-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/5fcb63deed33aab6-s.p.woff2) format("woff2");unicode-range:u+02d7,u+0303,u+0331,u+0e01-0e5b,u+200c-200d,u+25cc}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/e595057e1ab84c19-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/861fabf8a4ffc042-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/2b32cc5cb75c7a84-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/0d4277ce62acaedf-s.p.woff2) format("woff2");unicode-range:u+02d7,u+0303,u+0331,u+0e01-0e5b,u+200c-200d,u+25cc}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/942c4903ae74b0f3-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:IBM Plex Sans Thai;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/66c5464579bf95d1-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:IBM Plex Sans Thai Fallback;src:local("Arial");ascent-override:110.31%;descent-override:52.78%;line-gap-override:0.00%;size-adjust:101.17%}.__className_3237e5{font-family:IBM Plex Sans Thai,IBM Plex Sans Thai Fallback;font-style:normal}.__variable_3237e5{--font-thai:"IBM Plex Sans Thai","IBM Plex Sans Thai Fallback"}:root{--navy:#071426;--paper:#f8f8f6;--white:#ffffff;--jade:#42c98a;--ink:var(--navy);--ink-dim:rgba(7,20,38,0.55);--rule:rgba(7,20,38,0.22);--ghost:rgba(7,20,38,0.06);--danger:#c04545}*{box-sizing:border-box;margin:0;padding:0}body,html{min-height:100%}body{background:var(--paper);color:var(--ink);font-family:var(--font-thai),"IBM Plex Sans Thai",-apple-system,sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}.mono{font-family:var(--font-mono),"JetBrains Mono",monospace;letter-spacing:.22em;font-weight:500}.display,.mono{text-transform:uppercase}.display{font-family:var(--font-display),"Hanken Grotesk",sans-serif;font-weight:800;letter-spacing:-.02em}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:100%;max-width:400px;background:var(--white);border:1px solid var(--rule);padding:48px 40px 40px}.login-card .brand{display:flex;flex-direction:column;align-items:center;margin-bottom:40px}.login-card .motto{font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.24em;font-size:10.5px;font-weight:500;color:var(--ink-dim);margin-top:16px}.field{margin-bottom:16px}.field label{display:block;font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.22em;font-size:10.5px;font-weight:500;color:var(--ink-dim);margin-bottom:8px}.field input{width:100%;background:var(--paper);border:1px solid var(--rule);border-radius:0;padding:12px 14px;color:var(--ink);font-size:15px;font-family:var(--font-thai),sans-serif;outline:none}.field input:focus{border-color:var(--navy)}.btn{width:100%;background:var(--navy);color:var(--white);border:none;border-radius:0;padding:14px;font-size:14.5px;font-weight:600;font-family:var(--font-thai),sans-serif;cursor:pointer;margin-top:16px}.btn:hover{background:#0d2440}.btn:disabled{opacity:.6;cursor:default}.error{color:var(--danger);font-size:13px;margin-top:16px;min-height:18px;text-align:center;font-weight:400}.hub-header{justify-content:space-between;padding:24px 48px;border-bottom:1px solid var(--rule)}.hub-header,.hub-user{display:flex;align-items:center}.hub-user{gap:24px}.hub-user .meta{font-size:11px}.hub-user .meta,.hub-user button{font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.18em;font-weight:500;color:var(--ink-dim)}.hub-user button{background:transparent;border:1px solid var(--rule);border-radius:0;padding:8px 16px;font-size:10.5px;cursor:pointer}.hub-user button:hover{color:var(--ink);border-color:var(--ink)}.hub-main{max-width:1024px;margin:0 auto;padding:48px 48px 96px}.section-label{font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.26em;font-size:11px;font-weight:500;color:var(--ink-dim);margin-bottom:16px}.section-rule{border:none;border-top:1px solid var(--rule);margin:0 0 24px}.ws-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:64px}.ws-chip{position:relative;padding:12px 20px;border:1px solid var(--rule);background:transparent;color:var(--ink-dim);font-size:14px;font-weight:600;transition:border-color .15s,color .15s}.ws-chip:hover{border-color:var(--ink);color:var(--ink)}.ws-chip.active{background:var(--navy);border-color:var(--navy);color:var(--white)}.ws-chip.active:after{content:"";position:absolute;top:6px;right:6px;width:6px;height:6px;background:var(--jade)}.ws-chip .group-tag{font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.14em;font-weight:400;font-size:9.5px;opacity:.6;margin-left:8px}.ws-groups{display:flex;flex-wrap:wrap;gap:20px 44px;margin-bottom:64px}.ws-group{min-width:200px}.ws-group-name{font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.16em;font-size:10.5px;font-weight:600;color:var(--ink-dim);margin-bottom:12px;padding-bottom:7px;border-bottom:1px solid var(--rule)}.ws-group .ws-row{margin-bottom:0}.module-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));grid-gap:16px;gap:16px}.module-card{position:relative;overflow:hidden;background:var(--white);border:1px solid var(--rule);padding:24px;display:block;transition:border-color .15s}.module-card:hover{border-color:var(--navy)}.module-card .ghost{position:absolute;top:-8px;right:8px;font-size:72px;line-height:1;color:var(--ghost);pointer-events:none}.module-card .ghost,.module-card .mod-name{font-family:var(--font-display),sans-serif;font-weight:800}.module-card .mod-name{letter-spacing:-.02em;text-transform:uppercase;font-size:21px;line-height:.95;margin-bottom:8px;color:var(--ink)}.module-card .mod-tagline{font-size:13px;font-weight:300;color:var(--ink-dim);line-height:1.5;margin-bottom:24px;min-height:40px}.module-card .mod-meta{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--rule);padding-top:12px}.module-card .mod-url{font-size:10px;letter-spacing:.06em;color:var(--ink-dim)}.module-card .mod-url,.role-badge{font-family:var(--font-mono),monospace}.role-badge{text-transform:uppercase;letter-spacing:.18em;font-size:9.5px;font-weight:700;color:var(--ink);border:1px solid var(--rule);padding:4px 8px}.empty{color:var(--ink-dim);font-size:14px;font-weight:300;padding:48px 0;text-align:center}.admin-main{max-width:1000px;margin:0 auto;padding:32px 24px 80px}.admin-back{font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.16em;font-size:10px;font-weight:500;color:var(--ink-dim);border:1px solid var(--rule);padding:6px 12px;margin-left:4px}.admin-back:hover{color:var(--ink);border-color:var(--navy)}.admin-tabs{display:flex;gap:0;border-bottom:1px solid var(--rule);margin-bottom:28px}.admin-tab{font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.18em;font-size:11px;font-weight:500;color:var(--ink-dim);padding:12px 18px;border-bottom:2px solid transparent;margin-bottom:-1px}.admin-tab:hover{color:var(--ink)}.admin-tab.active{color:var(--ink);border-bottom-color:var(--jade)}.admin-hint{font-size:12.5px;font-weight:300;margin:12px 0 20px;line-height:1.5}.admin-hint,.ink-dim{color:var(--ink-dim)}.admin-table{display:flex;flex-direction:column;border-top:1px solid var(--rule)}.toggle{width:40px;height:22px;border:1px solid var(--rule);background:var(--paper);border-radius:999px;padding:2px;cursor:pointer;position:relative;flex:none;transition:.15s}.toggle .knob{display:block;width:16px;height:16px;background:var(--ink-dim);border-radius:50%;transition:.15s}.toggle.on{background:var(--jade);border-color:var(--jade)}.toggle.on .knob{background:#fff;transform:translateX(18px)}.toggle:disabled{opacity:.5;cursor:wait}.link-btn{background:none;border:none;color:var(--ink);cursor:pointer;font-size:12px;font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.12em;padding:4px 6px}.link-btn:hover{color:var(--jade)}.link-btn:disabled{opacity:.4;cursor:not-allowed}.btn-sm{background:var(--navy);color:#fff;border:none;padding:9px 18px;font-size:13px;font-weight:600;font-family:var(--font-thai),sans-serif;cursor:pointer;border-radius:0}.btn-sm:disabled{opacity:.5;cursor:not-allowed}.mod-row{border-bottom:1px solid var(--rule)}.mod-row.off{opacity:.5}.mod-row-main{display:flex;align-items:center;gap:16px;padding:14px 4px}.mod-key{font-size:11px;color:var(--ink-dim);width:56px;flex:none}.mod-row-info{flex:1 1;min-width:0}.mod-row-name{font-weight:600;font-size:15px}.mod-row-sub{font-size:12.5px;color:var(--ink-dim);font-weight:300}.mod-row-url{font-size:10px;color:var(--ink-dim);letter-spacing:.1em;margin-top:2px}.mod-row-actions{display:flex;align-items:center;gap:14px;flex:none}.mod-edit{padding:8px 4px 20px}.mod-edit-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:12px;gap:12px;margin-bottom:14px}.field-sm{display:flex;flex-direction:column;gap:5px}.field-sm.span2{grid-column:1/-1}.field-sm.chk{flex-direction:row;align-items:center;gap:8px}.field-sm>span{font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.14em;font-size:9.5px;font-weight:500;color:var(--ink-dim)}.field-sm input:not([type]),.field-sm input[type=email],.field-sm input[type=text]{border:1px solid var(--rule);background:var(--paper);padding:9px 11px;font-size:14px;font-family:var(--font-thai),sans-serif;outline:none;border-radius:0}.field-sm input:focus{border-color:var(--navy)}.form-err{color:var(--danger);font-size:12.5px;margin-bottom:10px}.matrix-scroll{overflow-x:auto;border:1px solid var(--rule)}.matrix{border-collapse:collapse;width:100%}.matrix td,.matrix th{border:1px solid var(--rule);text-align:center}.matrix-corner,.matrix-mod{background:var(--paper)}.matrix-mod{padding:10px 8px;white-space:nowrap}.matrix-mod.muted{opacity:.45}.matrix-mod .off-tag{display:block;font-size:8px;color:var(--danger);text-transform:uppercase;letter-spacing:.1em;margin-top:2px}.matrix-ws{text-align:left;padding:8px 12px;background:var(--paper);white-space:nowrap}.matrix-ws .ws-nm{display:block;font-weight:600;font-size:13.5px}.matrix-ws .ws-grp{display:block;font-size:9px;color:var(--ink-dim);letter-spacing:.12em}.matrix-cell{padding:4px}.cell-box{width:30px;height:30px;border:1px solid var(--rule);background:var(--white);cursor:pointer;color:var(--jade);font-weight:800;font-size:15px;border-radius:0}.cell-box.on{background:var(--jade);color:#fff;border-color:var(--jade)}.cell-box.muted{opacity:.35}.cell-box:disabled{cursor:wait}.role-sel{border:1px solid var(--rule);background:var(--white);font-size:11.5px;padding:4px 2px;font-family:var(--font-mono),monospace;border-radius:0;max-width:82px}.na{color:var(--ghost)}.users-toolbar{margin-bottom:16px}.user-row{border-bottom:1px solid var(--rule)}.user-row.off{opacity:.55}.user-row-main{display:flex;align-items:center;gap:14px;padding:13px 4px;cursor:pointer}.user-avatar{width:34px;height:34px;flex:none;display:grid;place-items:center;background:var(--navy);color:#fff;border-radius:50%;font-size:14px;font-weight:700}.user-info{flex:1 1;min-width:0}.user-name{font-weight:600;font-size:14.5px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.user-email{font-size:10.5px;color:var(--ink-dim);letter-spacing:.06em}.user-count{font-size:10px;color:var(--ink-dim);flex:none}.badge{font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.1em;font-size:8.5px;font-weight:700;padding:2px 6px;border:1px solid var(--rule)}.badge.admin{color:var(--jade);border-color:var(--jade)}.badge.off{color:var(--danger);border-color:var(--danger)}.badge.me{color:var(--ink-dim)}.user-detail{padding:6px 4px 22px}.user-actions{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:10px 0 18px;border-top:1px dashed var(--rule)}.hint-inline{font-size:11px;color:var(--ink-dim);font-weight:300}.detail-label{font-size:9.5px;color:var(--ink-dim);letter-spacing:.16em;margin-bottom:10px}.add-user{border:1px solid var(--rule);padding:18px;margin-bottom:18px;background:var(--white)}.audit-row{display:grid;grid-template-columns:150px 130px 130px 1fr;grid-gap:12px;gap:12px;padding:9px 4px;border-bottom:1px solid var(--rule);font-size:12.5px;align-items:baseline}.audit-time{font-size:10px;color:var(--ink-dim)}.audit-action{font-weight:600}.audit-action.danger{color:var(--danger)}.audit-user{color:var(--ink-dim);font-size:12px}.audit-detail{font-size:9.5px;color:var(--ink-dim);letter-spacing:0;text-transform:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pager{display:flex;gap:20px;justify-content:center;padding:24px 0}@media (max-width:640px){.mod-edit-grid{grid-template-columns:1fr}.audit-row{grid-template-columns:1fr 1fr}.audit-detail{grid-column:1/-1;white-space:normal}}.step-title{font-family:var(--font-display),sans-serif;font-weight:800;font-size:18px;margin-bottom:8px}.step-desc{font-size:13px;line-height:1.55;margin-bottom:18px}.step-desc,.step-hint{color:var(--ink-dim);font-weight:300}.step-hint{font-size:11.5px;margin-top:12px;text-align:center}.code-input{letter-spacing:.4em;font-family:var(--font-mono),monospace;font-size:20px;text-align:center}.qr-box{display:flex;justify-content:center;padding:14px;background:#fff;border:1px solid var(--rule);margin-bottom:14px}.qr-box img{display:block}.secret-line{font-size:11px;color:var(--ink-dim);text-align:center;margin-bottom:16px;word-break:break-all}.secret-line code{font-size:11px;color:var(--ink);letter-spacing:.08em}.backup-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:8px;gap:8px;margin:8px 0 22px}.backup-code{background:var(--paper);border:1px solid var(--rule);padding:8px 10px;text-align:center;font-size:13px;letter-spacing:.08em;color:var(--ink);text-transform:none}.twofa-badge{font-family:var(--font-mono),monospace;text-transform:uppercase;letter-spacing:.1em;font-size:8.5px;font-weight:700;padding:2px 6px;border:1px solid}.twofa-badge.on{color:var(--jade);border-color:var(--jade)}.twofa-badge.off{color:var(--danger);border-color:var(--danger)}@media (max-width:640px){.hub-header{padding:14px 16px}.hub-header,.hub-user{flex-wrap:wrap;gap:10px}.hub-user{justify-content:flex-end}.hub-user .meta{display:none}.hub-user button{padding:7px 12px;font-size:10px}.hub-main{padding:28px 16px 64px}.ws-row{margin-bottom:36px}.module-grid{grid-template-columns:1fr}.module-card{padding:20px}.admin-main{padding:24px 16px 64px}.admin-tabs{overflow-x:auto}.matrix-scroll{max-width:100%}}