:root{--bg-primary:#ffffff;--bg-secondary:#f8f9fa;--bg-tertiary:#f1f3f5;--bg-hover:#e9ecef;--border-color:#dee2e6;--text-primary:#212529;--text-secondary:#495057;--text-muted:#868e96;--accent:#228be6;--accent-hover:#1c7ed6;--accent-light:#e7f5ff;--success:#40c057;--warning:#fab005;--error:#fa5252;--sidebar-bg:#f8f9fa;--card-shadow:0 1px 3px rgba(0,0,0,0.08)}*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:Pretendard Variable,Pretendard,-apple-system,BlinkMacSystemFont,system-ui,Roboto,Helvetica Neue,Segoe UI,Apple SD Gothic Neo,Noto Sans KR,Malgun Gothic,sans-serif;background:var(--bg-primary);color:var(--text-primary);min-height:100vh;line-height:1.6}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#ced4da;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#adb5bd}.main-layout{display:flex;min-height:100vh}.sidebar{width:280px;background:var(--sidebar-bg);border-right:1px solid var(--border-color);position:fixed;top:0;left:0;height:100vh;overflow-y:auto;z-index:40;transition:transform .3s ease}.sidebar-hidden{transform:translateX(-100%)}.main-content{flex:1 1;margin-left:280px;min-height:100vh;display:flex;flex-direction:column;background:var(--bg-primary)}@media (max-width:1024px){.sidebar{transform:translateX(-100%)}.sidebar.sidebar-open{transform:translateX(0)}.main-content{margin-left:0}.sidebar-overlay{position:fixed;inset:0;background:rgba(0,0,0,.3);z-index:35}#mobile-menu-btn{display:flex!important}.header-icons{display:none!important}}.card{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;padding:20px;transition:all .2s ease;box-shadow:var(--card-shadow)}.card:hover{border-color:var(--accent);box-shadow:0 4px 12px rgba(0,0,0,.1)}.card-flat{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;padding:24px;box-shadow:var(--card-shadow)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 20px;font-size:14px;font-weight:600;border-radius:8px;border:none;cursor:pointer;transition:all .2s ease;text-decoration:none}.btn-primary{background:var(--accent);color:white}.btn-primary:hover{background:var(--accent-hover)}.btn-secondary{background:var(--bg-secondary);color:var(--text-primary);border:1px solid var(--border-color)}.btn-secondary:hover{background:var(--bg-tertiary);border-color:var(--text-muted)}.btn-ghost{background:transparent;color:var(--text-secondary)}.btn-ghost:hover{background:var(--bg-secondary);color:var(--text-primary)}.btn-danger{background:var(--error);color:white}.btn-danger:hover{background:#e03131}.btn-sm{padding:6px 14px;font-size:13px}.btn-lg{padding:14px 28px;font-size:16px}.input{width:100%;padding:12px 16px;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:8px;color:var(--text-primary);font-size:15px;transition:all .2s ease}.input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-light)}.input::placeholder{color:var(--text-muted)}.textarea{min-height:120px;resize:vertical}.label{display:block;font-size:14px;font-weight:500;margin-bottom:8px}.badge,.label{color:var(--text-secondary)}.badge{display:inline-flex;align-items:center;padding:4px 10px;font-size:12px;font-weight:600;border-radius:20px;background:var(--bg-tertiary)}.badge-primary{background:var(--accent-light);color:var(--accent)}.badge-success{background:#d3f9d8;color:#2f9e44}.badge-warning{background:#fff3bf;color:#f08c00}.badge-error{background:#ffe3e3;color:#e03131}.nav-item{display:flex;align-items:center;gap:10px;padding:12px 16px;color:var(--text-secondary);text-decoration:none;border-radius:8px;transition:all .2s ease;font-size:15px;font-weight:500}.nav-item:hover{background:var(--bg-hover);color:var(--text-primary)}.nav-item.active{background:var(--accent-light);color:var(--accent);font-weight:600}.app-group{margin-bottom:8px}.app-group-header{display:flex;align-items:center;gap:10px;padding:14px 16px;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:10px;margin-bottom:4px;cursor:pointer;transition:all .2s ease}.app-group-header:hover{background:var(--bg-hover)}.app-group-header.expanded{border-radius:10px 10px 0 0;margin-bottom:0;border-bottom:none}.app-group-icon{width:36px;height:36px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:20px}.app-group-name{flex:1 1;font-size:16px;font-weight:700;color:var(--text-primary)}.app-group-toggle{color:var(--text-muted);transition:transform .2s ease}.app-group-toggle.expanded{transform:rotate(180deg)}.app-group-boards{background:var(--bg-primary);border:1px solid var(--border-color);border-top:none;border-radius:0 0 10px 10px;padding:8px;margin-bottom:8px}.app-group-boards .nav-item{padding:10px 14px;font-size:14px;margin-left:8px}.profile-card{gap:12px;padding:16px;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;margin:16px}.profile-avatar,.profile-card{display:flex;align-items:center}.profile-avatar{width:48px;height:48px;border-radius:50%;background:var(--accent);justify-content:center;color:white;font-size:20px;font-weight:700}.profile-info{flex:1 1}.profile-name{font-size:16px;font-weight:700;color:var(--text-primary)}.profile-email{font-size:13px;color:var(--text-muted)}.banner{position:relative;width:100%;height:200px;border-radius:16px;overflow:hidden;margin-bottom:32px;background:linear-gradient(135deg,#667eea,#764ba2)}.banner-content{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;padding:32px;background:linear-gradient(90deg,rgba(0,0,0,.6),rgba(0,0,0,.2) 50%,transparent)}.banner-title{font-size:28px;font-weight:800;color:white;margin-bottom:8px}.banner-subtitle{font-size:16px;color:rgba(255,255,255,.9)}.banner-decoration{position:absolute;right:40px;top:50%;transform:translateY(-50%);display:flex;gap:20px;opacity:.9}.banner-icon{font-size:64px;filter:drop-shadow(0 4px 8px rgba(0,0,0,.3))}.table-container{overflow-x:auto}.table{width:100%;border-collapse:collapse}.table td,.table th{padding:14px 16px;text-align:left;border-bottom:1px solid var(--border-color)}.table th{font-size:13px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.table th,.table tr:hover td{background:var(--bg-secondary)}.post-item{display:block;padding:18px 24px;border-bottom:1px solid var(--border-color);transition:background .2s ease;text-decoration:none;color:inherit}.post-item:hover{background:var(--bg-secondary)}.post-item:last-child{border-bottom:none}.app-card{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:16px;padding:24px;transition:all .3s ease;cursor:pointer;box-shadow:var(--card-shadow)}.app-card:hover{border-color:var(--accent);transform:translateY(-4px);box-shadow:0 12px 40px rgba(0,0,0,.12)}.app-icon{width:64px;height:64px;border-radius:16px;justify-content:center;font-size:32px;margin-bottom:16px}.app-icon,.header{display:flex;align-items:center}.header{height:72px;justify-content:space-between;padding:0 32px;position:-webkit-sticky;position:sticky;top:0;z-index:30}.alert{padding:14px 18px;border-radius:8px;font-size:14px;margin-bottom:16px}.alert-error{background:#ffe3e3;border:1px solid #ffa8a8;color:#c92a2a}.alert-success{background:#d3f9d8;border:1px solid #8ce99a;color:#2b8a3e}.alert-warning{background:#fff3bf;border:1px solid #ffe066;color:#e67700}.spinner{width:24px;height:24px;border:3px solid var(--border-color);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.pagination{gap:8px;margin-top:24px}.page-btn,.pagination{display:flex;align-items:center;justify-content:center}.page-btn{width:40px;height:40px;border-radius:8px;border:1px solid var(--border-color);background:var(--bg-primary);color:var(--text-secondary);cursor:pointer;transition:all .2s ease;font-size:14px;font-weight:500}.page-btn:hover{background:var(--bg-secondary);color:var(--text-primary)}.page-btn.active{background:var(--accent);border-color:var(--accent);color:white}.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;z-index:50;padding:20px}.modal{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:16px;max-width:480px;width:100%;max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.2)}.modal-header{padding:20px 24px;border-bottom:1px solid var(--border-color);display:flex;align-items:center;justify-content:space-between}.modal-body{padding:24px}.modal-footer{padding:16px 24px;border-top:1px solid var(--border-color);display:flex;justify-content:flex-end;gap:12px}.text-muted{color:var(--text-muted)}.text-secondary{color:var(--text-secondary)}.text-accent{color:var(--accent)}.text-sm{font-size:13px}.text-xs{font-size:12px}.font-medium{font-weight:500}.font-semibold{font-weight:600}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prose{line-height:1.8;color:var(--text-primary)}.prose p{margin-bottom:16px}.prose img,.prose video{max-width:100%;border-radius:8px;margin:16px 0}.prose a{color:var(--accent);text-decoration:underline}.prose ol,.prose ul{margin:16px 0;padding-left:24px}.prose li{margin-bottom:8px}.prose blockquote{border-left:4px solid var(--accent);padding-left:16px;margin:16px 0;color:var(--text-secondary)}.prose code{padding:2px 6px;border-radius:4px;font-size:.9em}.prose code,.prose pre{background:var(--bg-tertiary)}.prose pre{padding:16px;border-radius:8px;overflow-x:auto}.notice-row{background:var(--accent-light)}.notice-row:hover{background:#d0ebff}.file-drop-zone{border:2px dashed var(--border-color);border-radius:12px;padding:32px;text-align:center;cursor:pointer;transition:all .2s ease;background:var(--bg-secondary)}.file-drop-zone.dragging,.file-drop-zone:hover{border-color:var(--accent);background:var(--accent-light)}.file-preview{display:flex;align-items:center;gap:12px;padding:12px;background:var(--bg-secondary);border-radius:8px;margin-top:12px}.file-preview-image{width:48px;height:48px;object-fit:cover;border-radius:6px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn{animation:fadeIn .3s ease}.animate-slideUp{animation:slideUp .3s ease}