:root{--c-primary: #1b2d4f;--c-primary-light: #2a4170;--c-primary-lighter: #3d5a8a;--c-accent: #c53d43;--c-accent-light: #e85b61;--c-accent-muted: rgba(197, 61, 67, .08);--c-bg: #f7f5f2;--c-bg-warm: #faf8f5;--c-surface: #ffffff;--c-surface-hover: #fefdfb;--c-border: #e8e4df;--c-border-light: #f0ece7;--c-text: #2c2420;--c-text-secondary: #6b6058;--c-text-muted: #9c9488;--c-text-faint: #bfb9b2;--c-success: #3d8b6e;--c-success-bg: rgba(61, 139, 110, .08);--c-warning: #c48b2c;--c-warning-bg: rgba(196, 139, 44, .08);--c-danger: #c53d43;--c-danger-bg: rgba(197, 61, 67, .06);--c-info: #3a7bbf;--c-info-bg: rgba(58, 123, 191, .06);--font-display: "DM Sans", sans-serif;--font-body: "Zen Kaku Gothic New", "Hiragino Sans", sans-serif;--fs-xs: .6875rem;--fs-sm: .8125rem;--fs-base: .9375rem;--fs-md: 1.0625rem;--fs-lg: 1.25rem;--fs-xl: 1.625rem;--fs-2xl: 2.125rem;--fs-3xl: 2.75rem;--lh-tight: 1.25;--lh-normal: 1.6;--lh-relaxed: 1.8;--fw-regular: 400;--fw-medium: 500;--fw-bold: 700;--sp-1: .25rem;--sp-2: .5rem;--sp-3: .75rem;--sp-4: 1rem;--sp-5: 1.25rem;--sp-6: 1.5rem;--sp-8: 2rem;--sp-10: 2.5rem;--sp-12: 3rem;--sp-16: 4rem;--sp-20: 5rem;--r-sm: 6px;--r-md: 10px;--r-lg: 14px;--r-xl: 20px;--r-full: 9999px;--shadow-xs: 0 1px 2px rgba(44, 36, 32, .04);--shadow-sm: 0 1px 3px rgba(44, 36, 32, .06), 0 1px 2px rgba(44, 36, 32, .04);--shadow-md: 0 4px 12px rgba(44, 36, 32, .06), 0 1px 4px rgba(44, 36, 32, .04);--shadow-lg: 0 8px 24px rgba(44, 36, 32, .08), 0 2px 8px rgba(44, 36, 32, .04);--shadow-xl: 0 16px 48px rgba(44, 36, 32, .1), 0 4px 12px rgba(44, 36, 32, .04);--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--dur-fast: .15s;--dur-normal: .25s;--dur-slow: .4s;--sidebar-w: 272px;--topbar-h: 0px}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{font-family:var(--font-body);font-size:var(--fs-base);font-weight:var(--fw-regular);line-height:var(--lh-normal);color:var(--c-text);background-color:var(--c-bg)}a{text-decoration:none;color:inherit}button{font-family:var(--font-body)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-16px)}to{opacity:1;transform:translate(0)}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes scaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.animate-in{animation:fadeInUp var(--dur-slow) var(--ease-out) both}.stagger-1{animation-delay:60ms}.stagger-2{animation-delay:.12s}.stagger-3{animation-delay:.18s}.stagger-4{animation-delay:.24s}.stagger-5{animation-delay:.3s}.stagger-6{animation-delay:.36s}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--c-border);border-radius:var(--r-full)}::-webkit-scrollbar-thumb:hover{background:var(--c-text-muted)}.app-layout{display:flex;min-height:100vh}.sidebar{width:var(--sidebar-w);background:var(--c-primary);color:#fff;display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;z-index:100;overflow-y:auto;overflow-x:hidden}.sidebar:before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at 20% 80%,rgba(197,61,67,.06) 0%,transparent 60%),radial-gradient(ellipse at 80% 20%,rgba(58,123,191,.04) 0%,transparent 50%);pointer-events:none}.sidebar-brand{padding:var(--sp-8) var(--sp-6) var(--sp-6);position:relative}.sidebar-brand h1{font-family:var(--font-display);font-size:var(--fs-md);font-weight:var(--fw-bold);letter-spacing:.02em;opacity:.95}.sidebar-brand .brand-sub{font-size:var(--fs-xs);opacity:.4;margin-top:var(--sp-1);font-family:var(--font-display);letter-spacing:.08em;text-transform:uppercase}.sidebar-nav{flex:1;padding:var(--sp-2) var(--sp-3);position:relative}.sidebar-nav a{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);color:#ffffff8c;font-size:var(--fs-sm);font-weight:var(--fw-medium);transition:all var(--dur-normal) var(--ease-out);position:relative}.sidebar-nav a:hover{color:#ffffffe6;background:#ffffff12}.sidebar-nav a.active{color:#fff;background:#ffffff1a}.sidebar-nav a.active:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:20px;background:var(--c-accent);border-radius:0 var(--r-sm) var(--r-sm) 0}.nav-icon{width:18px;height:18px;opacity:.7;flex-shrink:0}.sidebar-footer{padding:var(--sp-5) var(--sp-6);border-top:1px solid rgba(255,255,255,.08);position:relative}.sidebar-footer .user-name{font-size:var(--fs-sm);font-weight:var(--fw-medium);opacity:.8;margin-bottom:var(--sp-1)}.sidebar-footer .user-role{font-size:var(--fs-xs);opacity:.35;text-transform:uppercase;letter-spacing:.06em;font-family:var(--font-display)}.logout-btn{margin-top:var(--sp-3);padding:var(--sp-2) var(--sp-4);border-radius:var(--r-sm);border:1px solid rgba(255,255,255,.12);background:transparent;color:#ffffff80;font-size:var(--fs-xs);cursor:pointer;transition:all var(--dur-normal) var(--ease-out)}.logout-btn:hover{border-color:#ffffff40;color:#fffc;background:#ffffff0d}.main-content{flex:1;margin-left:var(--sidebar-w);padding:var(--sp-10) var(--sp-12);max-width:calc(100vw - var(--sidebar-w));min-height:100vh}.page-header{margin-bottom:var(--sp-8);animation:fadeInUp var(--dur-slow) var(--ease-out) both}.page-title{font-family:var(--font-display);font-size:var(--fs-xl);font-weight:var(--fw-bold);color:var(--c-text);letter-spacing:-.01em;line-height:var(--lh-tight)}.page-subtitle{font-size:var(--fs-sm);color:var(--c-text-muted);margin-top:var(--sp-1)}.card{background:var(--c-surface);border:1px solid var(--c-border-light);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);transition:all var(--dur-normal) var(--ease-out)}.card:hover{box-shadow:var(--shadow-md)}.card-body{padding:var(--sp-6)}.stat-card{padding:var(--sp-6);position:relative;overflow:hidden}.stat-card:after{content:"";position:absolute;top:-30%;right:-20%;width:120px;height:120px;border-radius:50%;opacity:.04;background:currentColor}.stat-label{font-size:var(--fs-xs);font-weight:var(--fw-medium);color:var(--c-text-muted);text-transform:uppercase;letter-spacing:.06em;font-family:var(--font-display)}.stat-value{font-family:var(--font-display);font-size:var(--fs-2xl);font-weight:var(--fw-bold);line-height:var(--lh-tight);margin-top:var(--sp-2)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-5);border-radius:var(--r-md);font-size:var(--fs-sm);font-weight:var(--fw-medium);border:none;cursor:pointer;transition:all var(--dur-normal) var(--ease-out);white-space:nowrap;line-height:1.5}.btn:active{transform:scale(.97)}.btn-primary{background:var(--c-primary);color:#fff}.btn-primary:hover{background:var(--c-primary-light);box-shadow:0 2px 8px #1b2d4f33}.btn-accent{background:var(--c-accent);color:#fff}.btn-accent:hover{background:var(--c-accent-light);box-shadow:0 2px 8px #c53d4333}.btn-ghost{background:transparent;color:var(--c-text-secondary);border:1px solid var(--c-border)}.btn-ghost:hover{background:var(--c-bg);border-color:var(--c-text-muted)}.btn-danger{background:var(--c-danger-bg);color:var(--c-danger);border:1px solid rgba(197,61,67,.15)}.btn-danger:hover{background:#c53d431f}.btn-sm{padding:var(--sp-1) var(--sp-3);font-size:var(--fs-xs);border-radius:var(--r-sm)}.btn-warn{background:var(--c-warning-bg);color:var(--c-warning);border:1px solid rgba(196,139,44,.15)}.btn-warn:hover{background:#c48b2c1f}.input{width:100%;padding:var(--sp-3) var(--sp-4);border:1px solid var(--c-border);border-radius:var(--r-md);font-family:var(--font-body);font-size:var(--fs-sm);color:var(--c-text);background:var(--c-surface);transition:all var(--dur-fast);outline:none}.input:focus{border-color:var(--c-primary-lighter);box-shadow:0 0 0 3px #1b2d4f14}.input::placeholder{color:var(--c-text-faint)}textarea.input{resize:vertical;min-height:100px;line-height:var(--lh-relaxed)}.select{appearance:none;width:100%;padding:var(--sp-3) var(--sp-4);padding-right:var(--sp-10);border:1px solid var(--c-border);border-radius:var(--r-md);font-family:var(--font-body);font-size:var(--fs-sm);color:var(--c-text);background:var(--c-surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%239c9488' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right var(--sp-4) center;cursor:pointer;outline:none;transition:all var(--dur-fast)}.select:focus{border-color:var(--c-primary-lighter);box-shadow:0 0 0 3px #1b2d4f14}.label{display:block;font-size:var(--fs-xs);font-weight:var(--fw-medium);color:var(--c-text-secondary);margin-bottom:var(--sp-2);letter-spacing:.01em}.checkbox-label{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-sm);color:var(--c-text-secondary);cursor:pointer}.table-wrap{overflow-x:auto;border-radius:var(--r-lg);border:1px solid var(--c-border-light);background:var(--c-surface);box-shadow:var(--shadow-xs)}.table{width:100%;border-collapse:collapse}.table th{padding:var(--sp-3) var(--sp-5);text-align:left;font-size:var(--fs-xs);font-weight:var(--fw-medium);color:var(--c-text-muted);text-transform:uppercase;letter-spacing:.05em;font-family:var(--font-display);background:var(--c-bg-warm);border-bottom:1px solid var(--c-border-light)}.table td{padding:var(--sp-4) var(--sp-5);font-size:var(--fs-sm);border-bottom:1px solid var(--c-border-light);color:var(--c-text)}.table tr:last-child td{border-bottom:none}.table tbody tr{transition:background var(--dur-fast)}.table tbody tr:hover{background:var(--c-bg-warm)}.badge{display:inline-flex;align-items:center;padding:var(--sp-1) var(--sp-3);border-radius:var(--r-full);font-size:var(--fs-xs);font-weight:var(--fw-medium);letter-spacing:.01em}.badge-default{background:var(--c-bg);color:var(--c-text-secondary)}.badge-accent{background:var(--c-accent-muted);color:var(--c-accent)}.badge-success{background:var(--c-success-bg);color:var(--c-success)}.badge-info{background:var(--c-info-bg);color:var(--c-info)}.form-panel{background:var(--c-surface);border:1px solid var(--c-border-light);border-radius:var(--r-lg);padding:var(--sp-6);margin-bottom:var(--sp-6);animation:scaleIn var(--dur-slow) var(--ease-out) both}.form-panel h3{font-family:var(--font-display);font-size:var(--fs-md);font-weight:var(--fw-bold);margin-bottom:var(--sp-5);color:var(--c-text)}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--sp-4)}.form-actions{display:flex;gap:var(--sp-3);margin-top:var(--sp-5)}.alert{padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);font-size:var(--fs-sm);margin-bottom:var(--sp-4);animation:fadeIn var(--dur-normal) var(--ease-out)}.alert-error{background:var(--c-danger-bg);color:var(--c-danger);border:1px solid rgba(197,61,67,.12)}.alert-success{background:var(--c-success-bg);color:var(--c-success);border:1px solid rgba(61,139,110,.12)}.empty-state{text-align:center;padding:var(--sp-12) var(--sp-6);color:var(--c-text-muted);font-size:var(--fs-sm)}.overlay{position:fixed;inset:0;background:#2c242066;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn var(--dur-normal) var(--ease-out)}.modal{background:var(--c-surface);border-radius:var(--r-xl);padding:var(--sp-8);max-width:480px;width:90%;box-shadow:var(--shadow-xl);animation:scaleIn var(--dur-slow) var(--ease-spring) both}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse at 30% 20%,rgba(27,45,79,.03) 0%,transparent 50%),radial-gradient(ellipse at 70% 80%,rgba(197,61,67,.02) 0%,transparent 50%),var(--c-bg);position:relative}.login-page:before{content:"";position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--c-primary),var(--c-accent),var(--c-primary))}.login-card{background:var(--c-surface);border-radius:var(--r-xl);box-shadow:var(--shadow-lg);padding:var(--sp-12) var(--sp-10);width:400px;max-width:90vw;animation:fadeInUp .6s var(--ease-out) both;border:1px solid var(--c-border-light)}.login-brand{text-align:center;margin-bottom:var(--sp-10)}.login-brand h1{font-family:var(--font-display);font-size:var(--fs-xl);font-weight:var(--fw-bold);color:var(--c-primary);letter-spacing:-.01em}.login-brand p{font-size:var(--fs-xs);color:var(--c-text-muted);margin-top:var(--sp-2);letter-spacing:.08em;text-transform:uppercase;font-family:var(--font-display)}.login-field{margin-bottom:var(--sp-5)}.login-submit{width:100%;padding:var(--sp-3) var(--sp-6);border-radius:var(--r-md);border:none;background:var(--c-primary);color:#fff;font-size:var(--fs-base);font-weight:var(--fw-medium);font-family:var(--font-body);cursor:pointer;transition:all var(--dur-normal) var(--ease-out);margin-top:var(--sp-3)}.login-submit:hover{background:var(--c-primary-light);box-shadow:0 4px 16px #1b2d4f40;transform:translateY(-1px)}.login-submit:active{transform:translateY(0)}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-5)}.grid-auto{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--sp-5)}.toolbar{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-6);flex-wrap:wrap}.pagination{display:flex;justify-content:center;align-items:center;gap:var(--sp-2);margin-top:var(--sp-8)}.page-btn{min-width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r-md);border:1px solid var(--c-border);background:var(--c-surface);color:var(--c-text-secondary);font-size:var(--fs-sm);font-family:var(--font-display);cursor:pointer;transition:all var(--dur-fast)}.page-btn:hover{border-color:var(--c-primary-lighter);color:var(--c-primary)}.page-btn.active{background:var(--c-primary);color:#fff;border-color:var(--c-primary)}.breadcrumb{display:flex;align-items:center;gap:var(--sp-1);font-size:var(--fs-sm);margin-bottom:var(--sp-5);color:var(--c-text-muted)}.breadcrumb button{background:none;border:none;font-family:var(--font-body);font-size:var(--fs-sm);color:var(--c-info);cursor:pointer;padding:0;transition:color var(--dur-fast)}.breadcrumb button:hover{color:var(--c-primary)}.breadcrumb .separator{color:var(--c-text-faint);margin:0 var(--sp-1)}.breadcrumb .current{color:var(--c-text);font-weight:var(--fw-medium)}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);background:var(--c-surface);border-radius:var(--r-lg);border:1px solid var(--c-border-light);overflow:hidden;box-shadow:var(--shadow-xs)}.calendar-header-cell{padding:var(--sp-3);text-align:center;font-size:var(--fs-xs);font-weight:var(--fw-medium);color:var(--c-text-muted);background:var(--c-bg-warm);border-bottom:1px solid var(--c-border-light);font-family:var(--font-display);text-transform:uppercase;letter-spacing:.04em}.calendar-cell{min-height:96px;padding:var(--sp-1);border-bottom:1px solid var(--c-border-light);border-right:1px solid var(--c-border-light);transition:background var(--dur-fast)}.calendar-cell:hover{background:var(--c-bg-warm)}.calendar-day-num{font-size:var(--fs-xs);font-family:var(--font-display);font-weight:var(--fw-medium);width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:50%;margin:var(--sp-1)}.calendar-day-num.today{background:var(--c-primary);color:#fff}.calendar-event{font-size:10px;padding:1px 6px;margin:1px 2px;background:var(--c-info-bg);color:var(--c-info);border-radius:var(--r-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;transition:background var(--dur-fast);border-left:2px solid var(--c-info)}.calendar-event:hover{background:#3a7bbf1f}.pill-filter{display:flex;gap:var(--sp-2);flex-wrap:wrap}.pill{padding:var(--sp-2) var(--sp-4);border-radius:var(--r-full);border:1px solid var(--c-border);background:var(--c-surface);color:var(--c-text-secondary);font-size:var(--fs-xs);font-weight:var(--fw-medium);cursor:pointer;transition:all var(--dur-normal) var(--ease-out)}.pill:hover{border-color:var(--c-primary-lighter);color:var(--c-primary)}.pill.active{background:var(--c-primary);color:#fff;border-color:var(--c-primary)}.link-card{position:relative;display:block;padding:var(--sp-5) var(--sp-6);background:var(--c-surface);border:1px solid var(--c-border-light);border-radius:var(--r-lg);transition:all var(--dur-normal) var(--ease-out);text-decoration:none;color:var(--c-text)}.link-card:hover{border-color:var(--c-primary-lighter);box-shadow:var(--shadow-md);transform:translateY(-2px)}.link-card-title{font-family:var(--font-display);font-size:var(--fs-sm);font-weight:var(--fw-bold);color:var(--c-primary);margin-bottom:var(--sp-1)}.link-card-desc{font-size:var(--fs-xs);color:var(--c-text-muted);line-height:var(--lh-relaxed)}.announcement-item{display:flex;align-items:center;padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--c-border-light);transition:background var(--dur-fast);text-decoration:none;color:var(--c-text)}.announcement-item:hover{background:var(--c-bg-warm)}.announcement-item:last-child{border-bottom:none}.file-item{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-5);border-bottom:1px solid var(--c-border-light);transition:background var(--dur-fast)}.file-item:hover{background:var(--c-bg-warm)}.file-item:last-child{border-bottom:none}.file-icon{font-size:20px;width:36px;height:36px;display:flex;align-items:center;justify-content:center;border-radius:var(--r-md);flex-shrink:0}.file-icon.folder{background:var(--c-warning-bg)}.file-icon.doc{background:var(--c-info-bg)}.section-title{font-family:var(--font-display);font-size:var(--fs-sm);font-weight:var(--fw-bold);color:var(--c-text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--sp-4);padding-bottom:var(--sp-2);border-bottom:2px solid var(--c-border-light)}.flex{display:flex}.flex-1{flex:1}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-2{gap:var(--sp-2)}.gap-3{gap:var(--sp-3)}.gap-4{gap:var(--sp-4)}.mt-4{margin-top:var(--sp-4)}.mt-6{margin-top:var(--sp-6)}.mb-4{margin-bottom:var(--sp-4)}.mb-6{margin-bottom:var(--sp-6)}.text-muted{color:var(--c-text-muted)}.text-sm{font-size:var(--fs-sm)}.text-xs{font-size:var(--fs-xs)}.font-display{font-family:var(--font-display)}@media(prefers-reduced-motion:reduce){.animate-in,[class*=stagger-]{animation:none!important}}
