@font-face{font-family:Nunito;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/nunito-400-latin-ext.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:Nunito;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/nunito-400-latin.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:Nunito;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/nunito-600-latin-ext.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:Nunito;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/nunito-600-latin.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:Nunito;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/nunito-700-latin-ext.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:Nunito;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/nunito-700-latin.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:Nunito;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/nunito-800-latin-ext.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:Nunito;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/nunito-800-latin.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:Nunito;font-style:normal;font-weight:900;font-display:swap;src:url(/fonts/nunito-900-latin-ext.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:Nunito;font-style:normal;font-weight:900;font-display:swap;src:url(/fonts/nunito-900-latin.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}:root{--ec-blue:#1AA0DC;--ec-blue-d:#1487bd;--ec-red:#E62A31;--ec-yellow:#F8A81C;--ec-purple:#8A2E90;--ec-green:#34B27B;--ink:#16233B;--body:#4b586c;--muted:#7a869a;--line:#e7edf5;--soft:#f4f8fc;--soft2:#eef4fb;--white:#ffffff;--grad-brand:linear-gradient(120deg,var(--ec-blue) 0%,var(--ec-purple) 55%,var(--ec-red) 100%);--grad-warm:linear-gradient(120deg,var(--ec-yellow),var(--ec-red));--grad-cool:linear-gradient(135deg,var(--ec-blue),var(--ec-purple));--brand:var(--ec-blue);--brand-d:var(--ec-blue-d);--brand-grad:var(--grad-cool);--brand-soft:#e4f4fc;--ok:var(--ec-green);--bad:var(--ec-red);--warn:var(--ec-yellow);--info:var(--ec-purple);--ok-soft:#e5f6ee;--bad-soft:#fdeaea;--warn-soft:#fef3df;--info-soft:#f3e9fb;--sp-1:3px;--sp-2:6px;--sp-3:9px;--sp-4:13px;--sp-5:18px;--sp-6:24px;--sp-7:34px;--sp-8:46px;--fs-xs:0.74rem;--fs-sm:0.83rem;--fs-md:0.93rem;--fs-lg:1.06rem;--fs-xl:1.22rem;--fs-2xl:1.5rem;--r-sm:8px;--r:12px;--r-lg:18px;--r-xl:24px;--r-pill:999px;--shadow-sm:0 2px 8px rgba(22,35,59,0.06);--shadow:0 12px 34px rgba(22,35,59,0.10);--shadow-lg:0 30px 70px rgba(22,35,59,0.16);--shadow-brand:0 10px 26px rgba(26,160,220,0.28);--z-nav:30;--z-sheet:50;--z-toast:60;--font:"Nunito",ui-rounded,"Segoe UI",system-ui,-apple-system,sans-serif;--tabbar-h:62px;--touch:44px}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font);font-size:15px;line-height:1.45;color:var(--body);background:radial-gradient(700px 380px at 105% -5%,rgba(26,160,220,.07),transparent 60%),radial-gradient(600px 340px at -5% 100%,rgba(248,168,28,.06),transparent 60%),var(--soft);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3,h4{color:var(--ink);font-weight:800;line-height:1.15;margin:0 0 .5em;letter-spacing:-.02em}h1{font-size:var(--fs-2xl);font-weight:900}h2{font-size:var(--fs-xl)}h3{font-size:var(--fs-lg)}p{margin:0 0 1em}a{color:var(--brand);text-decoration:none;transition:color .15s}a:hover{color:var(--brand-d)}img{max-width:100%;height:auto;display:block}strong{color:var(--ink);font-weight:800}input,select,textarea{font-family:var(--font);font-size:16px;color:var(--ink);background:var(--white);border:1.5px solid var(--line);border-radius:var(--r-sm);padding:.55em .8em;min-height:var(--touch);outline:none;transition:border-color .15s,box-shadow .15s;max-width:100%}textarea{line-height:1.5;resize:vertical}input:focus,select:focus,textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 18%,transparent)}input::placeholder,textarea::placeholder{color:var(--muted)}label{font-weight:700;color:var(--ink);font-size:var(--fs-sm)}@media (pointer:fine){input,select,textarea{font-size:var(--fs-sm);min-height:34px;padding:.35em .65em}.btn{min-height:34px}.btn--sm{min-height:30px}}button{font-family:var(--font)}:focus-visible{outline:3px solid color-mix(in srgb,var(--brand) 45%,transparent);outline-offset:2px}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5em;font-family:var(--font);font-weight:800;font-size:var(--fs-md);line-height:1;min-height:var(--touch);padding:.6em 1.4em;border-radius:var(--r-pill);border:0;cursor:pointer;transition:transform .18s cubic-bezier(.2,.8,.2,1),box-shadow .18s,background .18s,color .18s;white-space:nowrap;-webkit-tap-highlight-color:transparent}.btn:disabled{opacity:.55;cursor:not-allowed;transform:none!important}.btn svg{width:1.15em;height:1.15em;flex-shrink:0}.btn--primary{background:var(--brand);color:#fff;box-shadow:var(--shadow-brand)}.btn--primary:hover{transform:translateY(-2px)}.btn--secondary{background:var(--brand-soft);color:var(--brand-d)}.btn--secondary:hover{transform:translateY(-1px)}.btn--ghost{background:var(--white);color:var(--ink);box-shadow:inset 0 0 0 2px var(--line)}.btn--ghost:hover{box-shadow:inset 0 0 0 2px var(--brand);transform:translateY(-1px)}.btn--danger{background:var(--bad-soft);color:var(--bad)}.btn--danger:hover{background:var(--bad);color:#fff}.btn--sm{font-size:var(--fs-sm);min-height:36px;padding:.45em 1em}.btn--icon{padding:0;width:var(--touch);min-width:var(--touch)}.btn--icon.btn--sm{width:36px;min-width:36px}.card{background:var(--white);border:1px solid var(--line);border-radius:var(--r);padding:var(--sp-4);box-shadow:var(--shadow-sm)}.card--accent-blue{border-left:4px solid var(--ec-blue)}.card--accent-red{border-left:4px solid var(--ec-red)}.card--accent-yellow{border-left:4px solid var(--ec-yellow)}.card--accent-purple{border-left:4px solid var(--ec-purple)}.card--accent-green{border-left:4px solid var(--ec-green)}.card--tap{transition:transform .15s,box-shadow .15s;cursor:pointer}.card--tap:hover{transform:translateY(-2px);box-shadow:var(--shadow)}.field{display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}.field>label{padding-left:2px}.field-hint{color:var(--muted)}.field-error,.field-hint{font-size:var(--fs-xs);margin:0;padding-left:2px}.field-error{color:var(--bad);font-weight:700}.field--invalid input,.field--invalid select,.field--invalid textarea{border-color:var(--bad)}.sheet-overlay{position:fixed;inset:0;z-index:var(--z-sheet);background:rgba(22,35,59,.45);display:flex;align-items:flex-end;justify-content:center;animation:sheet-fade .18s ease}.sheet{background:var(--white);width:100%;max-height:90dvh;border-radius:var(--r-lg) var(--r-lg) 0 0;display:flex;flex-direction:column;box-shadow:var(--shadow-lg);animation:sheet-up .22s cubic-bezier(.2,.8,.2,1)}.sheet-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-4) var(--sp-4) var(--sp-2);flex-shrink:0}.sheet-head h2{margin:0;font-size:var(--fs-lg)}.sheet-body{padding:var(--sp-2) var(--sp-4);overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-3)}.sheet-foot{display:flex;gap:var(--sp-2);justify-content:flex-end;padding:var(--sp-3) var(--sp-4) calc(var(--sp-4) + env(safe-area-inset-bottom));flex-shrink:0;border-top:1px solid var(--line);margin-top:var(--sp-2)}.sheet-foot .btn{flex:1 1}@keyframes sheet-up{0%{transform:translateY(40px);opacity:.6}to{transform:translateY(0);opacity:1}}@keyframes sheet-fade{0%{opacity:0}to{opacity:1}}@media (min-width:720px){.sheet-overlay{align-items:center;padding:var(--sp-5)}.sheet{max-width:520px;border-radius:var(--r-lg);max-height:85dvh;animation:sheet-pop .18s cubic-bezier(.2,.8,.2,1)}.sheet-foot .btn{flex:0 1 auto}@keyframes sheet-pop{0%{transform:scale(.96);opacity:0}to{transform:scale(1);opacity:1}}}.confirm-overlay{position:fixed;inset:0;z-index:calc(var(--z-sheet) + 2);background:rgba(22,35,59,.5);display:flex;align-items:center;justify-content:center;padding:var(--sp-5);animation:sheet-fade .15s ease}.confirm{background:var(--white);border-radius:var(--r-lg);padding:var(--sp-5);max-width:380px;width:100%;box-shadow:var(--shadow-lg);text-align:center}.confirm h3{margin-bottom:var(--sp-2)}.confirm p{color:var(--muted);font-size:var(--fs-sm);margin-bottom:var(--sp-4)}.confirm-actions{display:flex;gap:var(--sp-2)}.confirm-actions .btn{flex:1 1}.toasts{position:fixed;z-index:var(--z-toast);left:var(--sp-3);right:var(--sp-3);bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + var(--sp-3));flex-direction:column;pointer-events:none}.toast,.toasts{display:flex;gap:var(--sp-2)}.toast{pointer-events:auto;align-items:center;background:var(--ink);color:#fff;font-weight:700;font-size:var(--fs-sm);padding:var(--sp-3) var(--sp-4);border-radius:var(--r);box-shadow:var(--shadow);animation:toast-in .2s cubic-bezier(.2,.8,.2,1)}.toast svg{flex-shrink:0}.toast--success svg{color:var(--ec-green)}.toast--error{background:var(--bad)}.toast--error svg{color:#fff}@keyframes toast-in{0%{transform:translateY(12px);opacity:0}to{transform:translateY(0);opacity:1}}@media (min-width:900px){.toasts{left:auto;right:var(--sp-5);top:var(--sp-5);bottom:auto;width:340px}}.empty{display:flex;flex-direction:column;align-items:center;gap:var(--sp-2);text-align:center;padding:var(--sp-7) var(--sp-4);color:var(--muted)}.empty-icon{width:56px;height:56px;border-radius:var(--r);background:var(--soft2);color:var(--brand);display:grid;place-items:center}.empty h3{color:var(--ink);font-size:var(--fs-md);margin:0}.empty p{font-size:var(--fs-sm);margin:0;max-width:320px}.skeleton{display:flex;flex-direction:column;gap:var(--sp-3)}.skeleton-row{height:64px;border-radius:var(--r);background:linear-gradient(90deg,var(--soft2) 25%,#fff 50%,var(--soft2) 75%);background-size:200% 100%;animation:shimmer 1.3s linear infinite}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.spinner{width:22px;height:22px;border-radius:50%;border:3px solid var(--line);border-top-color:var(--brand);animation:spin .7s linear infinite}.page-header{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-4)}.page-header h1{margin:0;font-size:var(--fs-xl)}.page-header .page-sub{color:var(--muted);font-size:var(--fs-sm);margin:2px 0 0}.badge{display:inline-flex;align-items:center;gap:.35em;font-size:var(--fs-xs);font-weight:800;line-height:1;padding:.45em .85em;border-radius:var(--r-pill);white-space:nowrap}.badge--blue{background:var(--brand-soft);color:var(--brand-d)}.badge--green{background:var(--ok-soft);color:#1e7a52}.badge--red{background:var(--bad-soft);color:var(--bad)}.badge--yellow{background:var(--warn-soft);color:#b07508}.badge--purple{background:var(--info-soft);color:var(--info)}.badge--neutral{background:var(--soft2);color:var(--muted)}.avatar{display:inline-grid;place-items:center;border-radius:50%;background:var(--brand-grad);color:#fff;font-weight:800;flex-shrink:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.appbar{position:-webkit-sticky;position:sticky;top:0;z-index:var(--z-nav);display:flex;align-items:center;gap:var(--sp-3);height:56px;padding:0 var(--sp-4);background:rgba(255,255,255,.86);backdrop-filter:saturate(180%) blur(14px);-webkit-backdrop-filter:saturate(180%) blur(14px);border-bottom:1px solid var(--line)}.appbar-logo img{height:26px;width:auto}.appbar-tenant{font-weight:800;color:var(--ink);font-size:var(--fs-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1;min-width:0}.appbar-user{background:none;border:0;padding:0;cursor:pointer;display:flex}.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:var(--z-nav);display:flex;height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:rgba(255,255,255,.94);backdrop-filter:saturate(180%) blur(14px);-webkit-backdrop-filter:saturate(180%) blur(14px);border-top:1px solid var(--line)}.tabbar a,.tabbar button{flex:1 1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-family:var(--font);font-size:10.5px;font-weight:800;color:var(--muted);background:none;border:0;cursor:pointer;padding:0;-webkit-tap-highlight-color:transparent}.tabbar a svg,.tabbar button svg{width:23px;height:23px}.tabbar .is-active{color:var(--brand)}.shell{min-height:100dvh}.shell-main{padding:var(--sp-4);padding-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + var(--sp-5));max-width:1100px;margin-inline:auto;width:100%}.sidebar{display:none}@media (min-width:900px){.shell{display:grid;grid-template-columns:240px 1fr}.appbar,.tabbar{display:none}.shell-main{padding:var(--sp-6);padding-bottom:var(--sp-7)}.sidebar{display:flex;flex-direction:column;gap:var(--sp-4);position:-webkit-sticky;position:sticky;top:0;height:100dvh;padding:var(--sp-5) var(--sp-4);background:var(--white);border-right:1px solid var(--line);overflow-y:auto}.sidebar-logo img{height:32px;width:auto}.sidebar-tenant{font-weight:800;color:var(--ink);font-size:var(--fs-sm);line-height:1.3;padding:0 2px}.sidebar-section{font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin:var(--sp-3) 0 var(--sp-1);padding:0 var(--sp-2)}.sidebar nav{display:flex;flex-direction:column;gap:2px}.sidebar nav a{display:flex;align-items:center;gap:var(--sp-3);font-weight:700;font-size:var(--fs-sm);color:var(--body);padding:9px var(--sp-2);border-radius:var(--r-sm);transition:background .12s,color .12s}.sidebar nav a svg{width:19px;height:19px;color:var(--muted);transition:color .12s}.sidebar nav a:hover{background:var(--soft);color:var(--ink)}.sidebar nav a.is-active{background:var(--brand-soft);color:var(--brand-d)}.sidebar nav a.is-active svg{color:var(--brand)}.sidebar-user{margin-top:auto;display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2);border-top:1px solid var(--line);padding-top:var(--sp-3)}.sidebar-user-info{flex:1 1;min-width:0}.sidebar-user-info .u-mail{font-size:var(--fs-xs);font-weight:700;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-user-info .u-role{font-size:var(--fs-xs);color:var(--muted)}}.menu-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:var(--sp-2);gap:var(--sp-2);padding-bottom:var(--sp-2)}.menu-grid a{display:flex;flex-direction:column;align-items:center;gap:var(--sp-1);padding:var(--sp-3) var(--sp-1);border-radius:var(--r);background:var(--soft);color:var(--ink);font-weight:700;font-size:var(--fs-xs);text-align:center}.menu-grid a svg{width:24px;height:24px;color:var(--brand)}.menu-grid a.is-active{background:var(--brand-soft);color:var(--brand-d)}.menu-user{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2) 0 var(--sp-3);border-bottom:1px solid var(--line);margin-bottom:var(--sp-3)}.menu-user-info{flex:1 1;min-width:0}.menu-user-info .u-mail{font-weight:800;color:var(--ink);font-size:var(--fs-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-user-info .u-role{font-size:var(--fs-xs);color:var(--muted)}.login-page{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:var(--sp-4)}.login-card{width:100%;max-width:380px;padding:var(--sp-6) var(--sp-5);border-radius:var(--r-lg);box-shadow:var(--shadow);text-align:center}.login-card h1{font-size:var(--fs-xl);margin-bottom:var(--sp-1)}.login-card form{margin-top:var(--sp-4);text-align:left}.login-logo{height:40px;width:auto;margin:0 auto var(--sp-4)}.rowlist{display:flex;flex-direction:column;gap:var(--sp-2)}.rowitem{display:flex;align-items:center;gap:var(--sp-3);background:var(--white);border:1px solid var(--line);border-radius:var(--r);padding:var(--sp-3) var(--sp-4);box-shadow:var(--shadow-sm)}.rowitem-main{flex:1 1;min-width:0}.rowitem-title{font-weight:800;color:var(--ink);font-size:var(--fs-md)}.rowitem-meta,.rowitem-title{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.rowitem-meta{color:var(--muted);font-size:var(--fs-sm);margin-top:3px}.rowitem-meta svg{width:15px;height:15px;vertical-align:-2px}.rowitem-actions{display:flex;gap:var(--sp-1);flex-shrink:0}.rowitem--muted{opacity:.6}.platform{min-height:100dvh;background:var(--soft)}.platform-bar{position:-webkit-sticky;position:sticky;top:0;z-index:var(--z-nav);justify-content:space-between;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);padding-top:max(var(--sp-3),env(safe-area-inset-top));background:var(--white);border-bottom:1px solid var(--line)}.platform-bar,.platform-brand{display:flex;align-items:center}.platform-brand{gap:var(--sp-2);font-weight:800;color:var(--ink);text-decoration:none}.platform-brand b,.platform-brand svg{color:var(--brand)}.platform-brand b{font-weight:800}.platform-bar-right{display:flex;align-items:center;gap:var(--sp-2)}.platform-user{color:var(--muted);font-size:var(--fs-sm)}.platform-main{max-width:880px;margin:0 auto;padding:var(--sp-5) var(--sp-4) calc(var(--sp-8) + env(safe-area-inset-bottom))}@media (max-width:560px){.platform-user{display:none}}.backlink{display:inline-flex;align-items:center;gap:var(--sp-1);color:var(--muted);font-size:var(--fs-sm);font-weight:700;text-decoration:none;margin-bottom:var(--sp-3)}.backlink:hover,.form-section{color:var(--brand)}.form-section{margin:var(--sp-5) 0 var(--sp-2);font-size:var(--fs-sm);font-weight:800;text-transform:uppercase;letter-spacing:.04em}.form-section:first-child{margin-top:0}.form-note{margin:0 0 var(--sp-3);color:var(--muted);font-size:var(--fs-sm)}.detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));grid-gap:var(--sp-3) var(--sp-5);gap:var(--sp-3) var(--sp-5);background:var(--white);border:1px solid var(--line);border-radius:var(--r);padding:var(--sp-4);box-shadow:var(--shadow-sm);margin:0}.detail dt{font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:700;margin-bottom:2px}.detail dd{margin:0;color:var(--ink);font-weight:600;word-break:break-word}.section-head{justify-content:space-between;gap:var(--sp-3);margin:var(--sp-6) 0 var(--sp-3)}.section-head,.section-head h2{display:flex;align-items:center}.section-head h2{gap:var(--sp-2);font-size:var(--fs-lg);font-weight:800;color:var(--ink);margin:0}.section-head h2 svg{color:var(--brand)}.platform-nav{display:flex;gap:var(--sp-1);margin-right:auto;margin-left:var(--sp-3)}.platform-nav a{display:inline-flex;align-items:center;gap:6px;font-weight:800;font-size:var(--fs-sm);color:var(--body);padding:6px 10px;border-radius:var(--r-sm)}.platform-nav a:hover{background:var(--soft);color:var(--ink)}.platform-nav svg{color:var(--muted)}@media (max-width:640px){.platform-nav a span{display:none}}.detail-actions{gap:var(--sp-2)}.detail-actions,.imp-banner{display:flex;align-items:center;flex-wrap:wrap}.imp-banner{justify-content:space-between;gap:var(--sp-3);background:var(--warn-soft);border:1px solid color-mix(in srgb,var(--warn) 45%,transparent);border-radius:var(--r);padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-4)}.imp-banner-txt{display:inline-flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-sm);font-weight:700;color:#8a5a00}.imp-banner-txt svg{color:#b07508}.imp-banner-txt b{color:var(--ink)}.imp-banner-exit{font-family:var(--font);font-weight:800;font-size:var(--fs-sm);color:#8a5a00;background:var(--white);border:1.5px solid color-mix(in srgb,var(--warn) 55%,transparent);border-radius:var(--r-pill);padding:.35em .9em;cursor:pointer;white-space:nowrap}.imp-banner-exit:hover{background:var(--warn);color:#fff}.uploader{display:flex;align-items:center;gap:var(--sp-3)}.uploader-preview{position:relative;width:54px;height:54px;border-radius:var(--r-sm);background:var(--soft2);border:1.5px solid var(--line);display:grid;place-items:center;overflow:hidden;flex-shrink:0}.uploader--wide .uploader-preview{width:104px;height:54px}.uploader-preview img{width:100%;height:100%;object-fit:contain}.uploader-empty svg{width:22px;height:22px;color:var(--muted)}.uploader-busy{position:absolute;inset:0;background:rgba(255,255,255,.6)}.uploader-busy:after{content:"";position:absolute;top:50%;left:50%;width:18px;height:18px;margin:-9px 0 0 -9px;border-radius:50%;border:2.5px solid var(--line);border-top-color:var(--brand);animation:spin .7s linear infinite}.chips,.uploader-actions{display:flex;gap:var(--sp-2)}.chips{flex-wrap:wrap}.chip{font-family:var(--font);font-weight:700;font-size:var(--fs-sm);padding:.32em .8em;border-radius:var(--r-pill);border:1.5px solid var(--line);background:var(--white);color:var(--body);cursor:pointer;transition:background .12s,border-color .12s,color .12s;-webkit-tap-highlight-color:transparent}.chip:hover{color:var(--ink)}.chip--on,.chip:hover{border-color:var(--brand)}.chip--on{background:var(--brand-soft);color:var(--brand-d)}.chip-empty{color:var(--muted);font-size:var(--fs-sm);margin:0}.edu-profile{margin-top:var(--sp-3);background:var(--white);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm);padding:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-3)}.edu-logo img{max-height:46px;width:auto}.tax-row{display:flex;gap:var(--sp-3);align-items:baseline;flex-wrap:wrap}.tax-row-label{flex:0 0 120px;font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:700}.tax-badges{display:flex;flex-wrap:wrap;gap:var(--sp-1)}.tax-row-val{color:var(--ink);font-weight:600}.rowitem-meta .u-job{font-weight:700;color:var(--ink)}.tax-admin{display:grid;grid-gap:var(--sp-4);gap:var(--sp-4)}@media (min-width:720px){.tax-admin{grid-template-columns:1fr 1fr;align-items:start}}.tax-kind{display:flex;flex-direction:column;gap:var(--sp-3)}.tax-kind-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-2)}.tax-kind-head h3{margin:0;font-size:var(--fs-md)}.tax-kind-hint{margin:2px 0 0;color:var(--muted);font-size:var(--fs-xs)}.tax-opts{display:flex;flex-direction:column;gap:var(--sp-1)}.tax-kind-empty{color:var(--muted);font-size:var(--fs-sm);margin:0}.tax-opt{display:flex;align-items:center;gap:var(--sp-2)}.tax-opt-label{flex:1 1;min-width:0}.tax-opt--off .tax-opt-label{color:var(--muted);text-decoration:line-through}.tax-toggle{flex-shrink:0;font-family:var(--font);font-weight:800;font-size:var(--fs-xs);padding:.3em .7em;border-radius:var(--r-pill);border:1.5px solid var(--line);background:var(--white);color:var(--muted);cursor:pointer}.tax-toggle.is-on{background:var(--ok-soft);border-color:transparent;color:#1e7a52}.tax-add{display:flex;gap:var(--sp-2);margin-top:var(--sp-1)}.tax-add input{flex:1 1}.chipbar{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-3)}.statchip{display:inline-flex;align-items:center;gap:var(--sp-2);font-family:var(--font);font-size:var(--fs-sm);font-weight:800;color:var(--muted);background:var(--white);border:1px solid var(--line);border-radius:var(--r-pill);padding:6px 12px;cursor:pointer;transition:all .12s}.statchip:hover{border-color:var(--brand);color:var(--brand)}.statchip.on{background:var(--brand);border-color:var(--brand);color:#fff}.statchip-n{display:inline-grid;place-items:center;min-width:20px;height:18px;padding:0 5px;font-size:var(--fs-xs);border-radius:var(--r-pill);background:var(--soft);color:var(--ink)}.statchip.on .statchip-n{background:rgba(255,255,255,.25);color:#fff}.filterbar{margin-bottom:var(--sp-4)}.filterbar,.searchbox{display:flex;gap:var(--sp-2)}.searchbox{flex:1 1;align-items:center;background:var(--white);border:1px solid var(--line);border-radius:var(--r);padding:0 var(--sp-3)}.searchbox svg{color:var(--muted);flex-shrink:0}.searchbox input{flex:1 1;border:0;background:none;padding:9px 0;font-family:var(--font);font-size:var(--fs-md);outline:none}.searchbox-clear{border:0;background:none;color:var(--muted);cursor:pointer;display:grid;place-items:center;padding:4px}.filterbar>select{flex-shrink:0;max-width:45%}.rowitem--link{text-decoration:none;color:inherit;transition:border-color .12s,box-shadow .12s}.rowitem--link:hover{border-color:var(--brand);box-shadow:var(--shadow)}.rowitem-avatar{flex-shrink:0}.avatar--photo{object-fit:cover}.muted-sm{color:var(--muted);font-size:var(--fs-sm);font-weight:600}.profile-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-4);flex-wrap:wrap;margin-bottom:var(--sp-4)}.profile-head-id{display:flex;align-items:center;gap:var(--sp-4)}.avatar--lg{width:72px;height:72px;border-radius:50%}.profile-name{font-size:var(--fs-2xl);font-weight:900;margin:0}.profile-nick{color:var(--muted);font-weight:700}.profile-sub{margin-top:4px}.profile-head-actions,.profile-sub{display:flex;align-items:center;gap:var(--sp-2)}.status-select{max-width:160px}.ptabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:var(--sp-4);overflow-x:auto}.ptab{display:inline-flex;align-items:center;gap:6px;font-family:var(--font);font-size:var(--fs-sm);font-weight:800;color:var(--muted);background:none;border:0;border-bottom:2px solid transparent;padding:10px 14px;cursor:pointer;white-space:nowrap}.ptab.on,.ptab:hover{color:var(--brand)}.ptab.on{border-bottom-color:var(--brand)}.ptab svg{width:16px;height:16px}.infocard{background:var(--white);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm);overflow:hidden}.inforow{display:flex;justify-content:space-between;gap:var(--sp-4);padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--line)}.inforow:last-child{border-bottom:0}.inforow-label{color:var(--muted);font-size:var(--fs-sm);font-weight:700}.inforow-value{font-weight:700;text-align:right}.inforow-warn{color:var(--bad)}.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:var(--sp-3);gap:var(--sp-3)}.kpi{background:var(--white);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm);padding:var(--sp-4);text-align:center}.kpi-value{font-size:var(--fs-2xl);font-weight:900;color:var(--brand)}.kpi-label{font-size:var(--fs-sm);color:var(--muted);font-weight:700;margin-top:2px}.section-actions{display:flex;justify-content:flex-end;margin-bottom:var(--sp-3)}.siblings{margin-top:var(--sp-4);font-size:var(--fs-sm)}.siblings a{color:var(--brand);font-weight:700}.form-full{grid-column:1/-1}.form-section-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);margin-top:var(--sp-4);font-weight:800;color:var(--brand);text-transform:uppercase;font-size:var(--fs-sm);letter-spacing:.04em}.seg{display:inline-flex;background:var(--soft);border-radius:var(--r-pill);padding:2px}.seg button{border:0;background:none;font-family:var(--font);font-size:var(--fs-xs);font-weight:800;color:var(--muted);padding:5px 10px;border-radius:var(--r-pill);cursor:pointer}.seg button.on{background:var(--white);color:var(--brand);box-shadow:var(--shadow-sm)}@media (max-width:560px){.kpi-grid{grid-template-columns:repeat(2,1fr)}.status-select{max-width:130px}}.invite-link{margin:-6px 0 var(--sp-2);padding:var(--sp-3) var(--sp-4);background:var(--brand-soft);border-radius:var(--r);border:1px solid var(--line);border-top:0;border-top-left-radius:0;border-top-right-radius:0}.invite-link-row{display:flex;gap:var(--sp-2);margin-top:6px}.invite-link-row input{flex:1 1;font-size:var(--fs-sm);font-family:var(--font)}.code-area{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:12.5px;line-height:1.5;width:100%;resize:vertical}.placeholders-help{margin-top:var(--sp-2)}.ph-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.ph-chip{font-family:ui-monospace,Menlo,monospace;font-size:11px;background:var(--soft);border:1px solid var(--line);border-radius:var(--r-sm);padding:3px 7px;cursor:pointer;color:var(--ink)}.ph-chip:hover{border-color:var(--brand);color:var(--brand)}.contract-topbar{justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-4)}.contract-topbar,.contract-topbar-actions{display:flex;align-items:center;flex-wrap:wrap}.contract-topbar-actions{gap:var(--sp-2)}.contract-doc{background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm);padding:40px 48px;max-width:780px;margin:0 auto;color:#16233b;line-height:1.6}.contract-doc-head{text-align:right;color:var(--brand);font-size:var(--fs-lg);border-bottom:2px solid var(--brand);padding-bottom:10px;margin-bottom:20px}.contract-body h2{font-size:1.35rem;margin:0 0 4px}.contract-body h3{font-size:1.02rem;margin:18px 0 4px}.contract-body p{margin:6px 0}.contract-signs{display:grid;grid-template-columns:1fr 1fr;grid-gap:32px;gap:32px;margin-top:48px}.contract-sign-role{font-weight:800;color:var(--muted);font-size:var(--fs-sm)}.contract-sign-name{font-weight:700;margin-top:2px}.contract-sign-title{color:var(--muted);font-size:var(--fs-sm)}.contract-sign-img{margin-top:8px;min-height:70px;border-bottom:1px solid var(--line);display:flex;align-items:flex-end;gap:12px}.sig-img{max-height:70px;max-width:200px}.stamp-img{max-height:80px;max-width:120px;opacity:.95}.contract-sign-date{margin-top:6px}.sigpad{border:1px dashed var(--line);border-radius:var(--r);background:#fff;overflow:hidden}.sigpad-canvas{width:100%;height:180px;touch-action:none;display:block;cursor:crosshair}.sigpad-actions{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;border-top:1px solid var(--line);background:var(--soft)}.sign-page{min-height:100vh;background:var(--bg,#f4f7fb);padding:var(--sp-4) var(--sp-3)}.sign-wrap{max-width:820px;margin:0 auto}.sign-form{background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:var(--sp-3)}.sign-done,.sign-form{max-width:780px;margin:var(--sp-4) auto 0;padding:var(--sp-5)}.sign-done{text-align:center}.sign-done-badge{width:56px;height:56px;margin:0 auto var(--sp-2);display:grid;place-items:center;border-radius:50%;background:var(--ok-soft);color:var(--ok);font-size:28px;font-weight:900}@media (max-width:560px){.contract-doc{padding:24px 20px}.contract-signs{grid-template-columns:1fr;gap:24px}}@media print{.app-sidebar,.app-topbar,.no-print,.tabbar{display:none!important}.contract-doc{border:0;box-shadow:none;max-width:100%;padding:0}.sign-page{padding:0}.sign-page,body{background:#fff}}.install-banner{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);background:var(--brand-grad);color:#fff;border-radius:var(--r);padding:var(--sp-3) var(--sp-4);margin-bottom:var(--sp-4);box-shadow:var(--shadow-brand)}.install-banner-text{display:flex;flex-direction:column;gap:2px;font-size:var(--fs-sm)}.install-banner-text strong{font-size:var(--fs-md)}.install-banner-text svg{width:14px;height:14px;vertical-align:-2px}.install-banner-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.install-banner .btn--ghost{color:#fff}.notif-card{display:flex;align-items:center;gap:var(--sp-3);background:var(--white);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm);padding:var(--sp-3) var(--sp-4);margin-bottom:var(--sp-4)}.notif-card-icon{width:40px;height:40px;flex-shrink:0;display:grid;place-items:center;border-radius:50%;background:var(--brand-soft);color:var(--brand)}.notif-card-body{flex:1 1;display:flex;flex-direction:column;gap:2px}.notif-card-body svg{width:13px;height:13px;vertical-align:-2px}.notif-err{color:var(--bad);font-size:var(--fs-sm)}.composer{background:var(--white);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm);padding:var(--sp-4);margin:var(--sp-3) 0 var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-3)}.composer textarea{width:100%;border:1px solid var(--line);border-radius:var(--r-sm);padding:var(--sp-3);font-family:var(--font);font-size:var(--fs-md);resize:vertical}.composer-actions{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap}.media-grid{display:flex;flex-wrap:wrap;gap:var(--sp-2)}.media-thumb{position:relative;width:84px;height:84px;border-radius:var(--r-sm);overflow:hidden;border:1px solid var(--line);background:var(--soft);flex-shrink:0}.media-thumb img,.media-thumb video{width:100%;height:100%;object-fit:cover;display:block}.media-thumb--loading{display:grid;place-items:center}.media-badge{inset:0;place-items:center;background:rgba(0,0,0,.25);color:#fff;pointer-events:none}.media-badge,.media-remove{position:absolute;display:grid}.media-remove{top:3px;right:3px;width:22px;height:22px;place-items:center;border:0;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;cursor:pointer}.media-remove svg{width:13px;height:13px}.media-add{width:84px;height:84px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;border:1px dashed var(--line);border-radius:var(--r-sm);background:var(--soft);color:var(--muted);font-family:var(--font);font-size:var(--fs-xs);font-weight:700;cursor:pointer;flex-shrink:0}.media-add:hover{border-color:var(--brand);color:var(--brand)}.spinner-sm{width:22px;height:22px;border:2.5px solid var(--line);border-top-color:var(--brand);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.post-card{background:var(--white);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm);padding:var(--sp-4);margin-bottom:var(--sp-3)}.post-card-head{display:flex;align-items:center;justify-content:space-between}.post-card-author{display:flex;align-items:center;gap:var(--sp-2)}.post-card-name{font-weight:800}.post-card-body{margin:var(--sp-3) 0;white-space:pre-wrap;line-height:1.5}.post-gallery{display:grid;grid-gap:4px;gap:4px;margin-top:var(--sp-2)}.post-gallery--1{grid-template-columns:1fr}.post-gallery--2{grid-template-columns:1fr 1fr}.post-gallery--3{grid-template-columns:repeat(3,1fr)}.post-media{width:100%;border-radius:var(--r-sm);display:block;background:#000}.post-gallery--1 .post-media{max-height:460px;object-fit:contain}.post-gallery--2 .post-media,.post-gallery--3 .post-media{aspect-ratio:1;object-fit:cover}.stack-1{gap:var(--sp-1)}.stack-1,.stack-2{display:flex;flex-direction:column}.stack-2{gap:var(--sp-2)}.stack-3{gap:var(--sp-3)}.stack-3,.stack-4{display:flex;flex-direction:column}.stack-4{gap:var(--sp-4)}.row,.wrap-row{display:flex;align-items:center;gap:var(--sp-2)}.wrap-row{flex-wrap:wrap}.grow{flex:1 1;min-width:0}.muted{color:var(--muted)}.small{font-size:var(--fs-sm)}.center-text{text-align:center}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.hide-mobile{display:none}@media (min-width:900px){.hide-mobile{display:revert}.hide-desktop{display:none}}.form-grid{display:grid;grid-template-columns:1fr;grid-gap:var(--sp-3);gap:var(--sp-3)}@media (min-width:560px){.form-grid{grid-template-columns:1fr 1fr}.form-grid .field--full{grid-column:1/-1}}:root{--primary:var(--ec-blue);--primary-2:var(--ec-purple);--sky:var(--ec-blue);--coral:var(--ec-red);--amber:var(--ec-yellow);--violet:var(--ec-purple);--green:var(--ec-green);--card:#ffffff}main{width:100%;margin:0 auto}.subtitle{color:var(--muted);font-size:1.02rem;margin-bottom:1.5rem}.grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:.7rem;gap:.7rem}@media (min-width:620px){.grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}}.module{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:1rem;font-size:.92rem;font-weight:600;box-shadow:var(--shadow-sm)}.module span{display:block;font-size:1.6rem;margin-bottom:.35rem}.nav-link{display:inline-block;margin-top:1.2rem;color:var(--primary);font-weight:700}.nav-link:hover{text-decoration:underline}.course-list{display:flex;flex-direction:column;gap:.6rem}.course{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--sky);border-radius:14px;padding:.85rem 1rem;box-shadow:var(--shadow-sm);display:flex;align-items:center;justify-content:space-between;gap:.8rem;flex-wrap:wrap}.course-name{font-weight:700;font-size:1.02rem;color:var(--ink)}.course-meta{display:flex;align-items:center;gap:.45rem;flex-wrap:wrap}.cefr{background:var(--brand-soft);color:var(--brand-d);border:1px solid var(--brand-soft);padding:.22rem .6rem;border-radius:999px;font-size:.78rem;font-weight:700}.age{font-size:.85rem}.age,.code{color:var(--muted)}.code{font-size:.72rem;font-family:ui-monospace,monospace;opacity:.7}.cap{background:var(--info-soft);color:var(--info);border:1px solid var(--info-soft);padding:.22rem .6rem;border-radius:999px;font-size:.8rem;font-weight:700}.child-form,.course-form,.group-form,.login-form{display:flex;gap:.55rem;flex-wrap:wrap;margin-bottom:1.4rem}.course-form input,.group-form input,.group-form select{flex:1 1 140px}.course-form button,.gen-btn,.group-form button,.save-btn{background:var(--brand);color:#fff;border:none;border-radius:999px;padding:.7rem 1.25rem;font-weight:800;font-size:.95rem;cursor:pointer;min-height:44px;box-shadow:var(--shadow-brand);transition:transform .1s ease}.course-form button:hover,.gen-btn:hover,.group-form button:hover,.save-btn:hover{transform:translateY(-1px)}button:disabled{opacity:.55;cursor:default;box-shadow:none;transform:none}.child-form input{flex:1 1 120px}.child-form button{background:var(--brand-soft);color:var(--brand-d);border:none;border-radius:999px;padding:.55rem .9rem;min-height:44px}.child-form button,.del{font-weight:700;cursor:pointer}.del{background:#fff;border:1.5px solid var(--bad-soft);color:var(--bad);border-radius:10px;min-width:34px;min-height:34px;font-size:.85rem}.del:hover{background:var(--bad-soft)}.del-inline{background:transparent;border:none;color:var(--bad);cursor:pointer;margin-left:.35rem;font-weight:700}.err{color:var(--bad);font-size:.88rem;margin-bottom:1rem;font-weight:600}code{background:var(--soft2);padding:.12rem .4rem;border-radius:6px;font-size:.85em}.family-list{display:flex;flex-direction:column;gap:.8rem}.family-card{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--coral);border-radius:16px;padding:1rem 1.1rem;box-shadow:var(--shadow-sm)}.family-head{display:flex;align-items:baseline;gap:.6rem;flex-wrap:wrap;padding-bottom:.6rem;margin-bottom:.5rem;border-bottom:1px solid var(--line)}.family-head strong{font-size:1.08rem}.student-row{display:flex;align-items:center;justify-content:space-between;gap:.8rem;padding:.5rem 0;flex-wrap:wrap}.timetable{display:flex;gap:.6rem;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:.5rem}.ttcol{min-width:150px;flex:1 0 150px}.ttday{font-weight:800;padding:.5rem;color:var(--brand);font-size:.85rem;border-bottom:3px solid var(--brand-soft);margin-bottom:.6rem}.ttday,.ttempty{text-align:center}.ttempty{color:var(--muted);opacity:.5}.ttcard{background:#fff;border:1px solid var(--line);border-left:3px solid var(--amber);border-radius:12px;padding:.6rem;margin-bottom:.5rem;box-shadow:var(--shadow-sm)}.tttime{font-weight:800;color:var(--brand)}.ttname,.tttime{font-size:.85rem}.ttname{font-weight:700;margin:.15rem 0;color:var(--ink)}.ttcourse{font-size:.76rem}.ttcourse,.ttmeta{color:var(--muted)}.ttmeta{display:flex;flex-direction:column;gap:.1rem;font-size:.72rem;margin-top:.3rem}.big-select{width:100%;max-width:420px;margin-bottom:1rem;font-weight:600}.sessions-bar{display:flex;flex-wrap:wrap;gap:.45rem;margin-bottom:1.2rem}.session-chip{background:#fff;border:1.5px solid var(--line);color:var(--ink);border-radius:999px;padding:.5rem .9rem;font-size:.82rem;cursor:pointer;font-weight:600;min-height:40px}.session-chip.active,.session-chip:hover{border-color:var(--brand)}.session-chip.active{background:var(--brand-soft);color:var(--brand-d)}.session-chip.done{border-color:var(--ok-soft)}.roster-title{font-size:1.15rem;margin:1rem 0 .6rem}.roster-row{align-items:center;justify-content:space-between;gap:.8rem;padding:.6rem 0;border-bottom:1px solid var(--line)}.roster-row,.status-btns{display:flex;flex-wrap:wrap}.status-btns{gap:.35rem}.stbtn{background:#fff;border:1.5px solid var(--line);color:var(--muted);border-radius:10px;padding:.45rem .7rem;font-size:.8rem;cursor:pointer;font-weight:700;min-height:40px}.stbtn.on.st-present{background:var(--ok-soft);color:#1e7a52;border-color:var(--ok)}.stbtn.on.st-absent{background:var(--bad-soft);color:var(--bad);border-color:var(--bad)}.stbtn.on.st-late{background:var(--warn-soft);color:#b07508;border-color:var(--warn)}.stbtn.on.st-excused{background:var(--info-soft);color:var(--info);border-color:var(--info)}.save-row{display:flex;align-items:center;gap:1rem;margin-top:1.2rem;flex-wrap:wrap}.ok-msg{color:#1e7a52;font-weight:700}.post-list{display:flex;flex-direction:column;gap:.6rem;margin-top:.4rem}.post{background:#fff;border:1px solid var(--line);border-left:4px solid var(--violet);border-radius:14px;padding:.85rem 1rem;box-shadow:var(--shadow-sm);position:relative}.post-head{display:flex;justify-content:space-between;align-items:baseline;gap:.6rem;margin-bottom:.35rem}.post-author{font-weight:700;font-size:.9rem;color:var(--ink)}.post-body{font-size:.95rem;line-height:1.55}.post .del-inline{position:absolute;top:.6rem;right:.8rem;font-size:.75rem}.brand-pill{font-weight:900;font-size:1.05rem;background:var(--grad-cool);-webkit-background-clip:text;background-clip:text;color:transparent}.portal-child{margin-bottom:1.6rem}.portal-name{font-size:1.25rem;margin:0}.portal-group{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:1rem 1.1rem;box-shadow:var(--shadow-sm);margin-bottom:.8rem}.portal-group-head{display:flex;align-items:center;justify-content:space-between;gap:.8rem;flex-wrap:wrap;padding-bottom:.7rem;margin-bottom:.5rem;border-bottom:1px solid var(--line)}.post-form{display:flex;flex-direction:column;gap:.6rem;margin-bottom:1.4rem}.post-form-actions{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap}.file-btn{display:inline-flex;align-items:center;gap:.4rem;background:var(--brand-soft);color:var(--brand-d);padding:.6rem .9rem;font-weight:700;font-size:.88rem}.file-btn,.post-form-actions button{cursor:pointer;border:none;border-radius:999px;min-height:44px}.post-form-actions button{background:var(--brand);color:#fff;padding:.6rem 1.2rem;font-weight:800;box-shadow:var(--shadow-brand)}.post-form-actions button:disabled{opacity:.55;box-shadow:none}.post-img{margin-top:.6rem;width:100%;border-radius:12px;display:block}.edit-banner{background:var(--warn-soft);color:#b07508;border:1px solid var(--warn-soft);border-radius:12px;padding:.55rem .9rem;margin-bottom:.9rem;font-weight:600;font-size:.9rem}.edit-btn{background:#fff;border:1.5px solid var(--line);border-radius:10px;min-width:34px;min-height:34px;cursor:pointer;font-size:.85rem}.edit-btn:hover{border-color:var(--brand)}.ghost-btn{background:#fff;border:1.5px solid var(--line);color:var(--muted);border-radius:999px;padding:.6rem 1rem;font-weight:600;cursor:pointer;min-height:44px}.group-link{color:var(--brand);cursor:pointer}.group-link:hover{text-decoration:underline}.detail-meta{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-bottom:1.4rem}.announce{background:#fff;border:1px solid var(--line);border-left:4px solid var(--amber);border-radius:14px;padding:.85rem 1rem;box-shadow:var(--shadow-sm);position:relative}.announce .del-inline{position:absolute;top:.6rem;right:.8rem;font-size:.75rem}.announce-strip{display:flex;flex-direction:column;gap:.6rem;margin-bottom:1.6rem}.announce-item{background:var(--warn-soft);border:1px solid var(--warn-soft);border-radius:14px;padding:.8rem 1rem}.announce-item strong{color:#b07508}.child-header{display:flex;align-items:center;gap:.7rem;margin-bottom:.7rem}.avatar{width:44px;height:44px;font-size:1rem}.practice-tip{background:var(--soft2);border:1px solid var(--line);color:var(--brand-d);border-radius:10px;padding:.55rem .75rem;font-size:.85rem;margin-bottom:.7rem}.portal-messages{margin-top:2rem}.chat{display:flex;flex-direction:column;gap:.45rem;margin:.6rem 0;padding:.9rem;background:var(--soft2);border-radius:16px;min-height:80px}.bubble{max-width:80%;padding:.55rem .8rem;border-radius:14px;font-size:.92rem;position:relative;line-height:1.4}.bubble.mine{align-self:flex-end;background:var(--brand);color:#fff;border-bottom-right-radius:4px}.bubble.theirs{align-self:flex-start;background:#fff;border:1px solid var(--line);border-bottom-left-radius:4px;color:var(--ink)}.bubble-time{display:block;font-size:.65rem;opacity:.7;margin-top:.2rem}.chat-form{display:flex;gap:.5rem}.chat-form input{flex:1 1}.chat-form button{background:var(--brand);color:#fff;border:none;border-radius:999px;padding:0 1.1rem;font-weight:800;cursor:pointer;min-height:44px}.chat-form button:disabled{opacity:.55}.msg-layout{display:grid;grid-template-columns:1fr;grid-gap:1rem;gap:1rem}@media (min-width:700px){.msg-layout{grid-template-columns:260px 1fr}}.thread-list{gap:.4rem}.thread,.thread-list{display:flex;flex-direction:column}.thread{text-align:left;background:#fff;border:1px solid var(--line);border-radius:12px;padding:.6rem .8rem;cursor:pointer;gap:.2rem;font-family:var(--font)}.thread.active{border-color:var(--brand);background:var(--brand-soft)}.thread-last{font-size:.8rem;color:var(--muted)}.thread-view{background:#fff;border:1px solid var(--line);border-radius:16px;padding:1rem;min-height:200px}