/* 奧比懷登內網 — 全站樣式
   2026-09-10：從 index.html 抽出來（原本 9027 行的單一檔案，樣式佔 662 行）。
   注意：server.js 的 express.static 已把 .css 加進「不要快取」名單，
   否則部署後同事會看到舊樣式。 */

  :root {
    --teal:#4a7c8e;--teal-dark:#2d5a6b;--teal-light:#6b9aaa;--teal-pale:#e8f2f5;
    --gold:#c9a84c;--gold-light:#e0c070;--gold-pale:#fdf8ee;
    --slate:#2c3e50;--slate-mid:#4a5568;--slate-light:#718096;
    --cream:#fafaf8;--border:#d4e4ea;
    --success:#2ecc71;--warning:#f39c12;--danger:#e74c3c;
    --shadow:0 4px 24px rgba(44,90,107,0.10);--shadow-lg:0 8px 48px rgba(44,90,107,0.15);
  }
  *{margin:0;padding:0;box-sizing:border-box}
  body{font-family:'Noto Serif TC',serif;background:var(--cream);color:var(--slate);min-height:100vh;overflow-x:hidden}

  #loginScreen{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--teal-dark);background-image:radial-gradient(ellipse at 20% 50%,rgba(201,168,76,0.08) 0%,transparent 60%),radial-gradient(ellipse at 80% 20%,rgba(255,255,255,0.04) 0%,transparent 50%),repeating-linear-gradient(-45deg,transparent,transparent 40px,rgba(255,255,255,0.01) 40px,rgba(255,255,255,0.01) 41px)}
  .login-card{background:rgba(255,255,255,0.05);backdrop-filter:blur(20px);border:1px solid rgba(201,168,76,0.25);border-radius:2px;padding:56px 52px;width:420px;box-shadow:0 24px 80px rgba(0,0,0,0.3);animation:fadeUp 0.6s ease forwards}
  @keyframes fadeUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
  .login-logo{text-align:center;margin-bottom:36px}
  .login-logo img{width:200px;filter:none}
  .login-divider{display:flex;align-items:center;gap:12px;margin-bottom:32px}
  .login-divider::before,.login-divider::after{content:'';flex:1;height:1px;background:rgba(201,168,76,0.3)}
  .login-divider span{font-family:'DM Mono',monospace;font-size:10px;color:rgba(201,168,76,0.6);letter-spacing:3px;text-transform:uppercase}
  .form-group{margin-bottom:20px}
  .form-label{display:block;font-size:11px;letter-spacing:2px;color:rgba(201,168,76,0.7);margin-bottom:8px;font-family:'DM Mono',monospace;text-transform:uppercase}
  .form-input{width:100%;padding:12px 16px;background:rgba(255,255,255,0.06);border:1px solid rgba(201,168,76,0.2);border-radius:2px;color:white;font-family:'Noto Serif TC',serif;font-size:14px;transition:all 0.3s;outline:none}
  .form-input:focus{border-color:rgba(201,168,76,0.6);background:rgba(255,255,255,0.09)}
  .form-input::placeholder{color:rgba(255,255,255,0.3)}
  .btn-primary{width:100%;padding:14px;background:linear-gradient(135deg,var(--gold),var(--gold-light));border:none;border-radius:2px;color:var(--teal-dark);font-family:'Noto Serif TC',serif;font-size:14px;font-weight:600;letter-spacing:3px;cursor:pointer;transition:all 0.3s;margin-top:8px}
  .btn-primary:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(201,168,76,0.3)}
  .login-error{margin-top:14px;text-align:center;font-size:12px;color:#ff8a8a;font-family:'DM Mono',monospace;min-height:18px}
  .login-hint{margin-top:16px;text-align:center;font-family:'DM Mono',monospace;font-size:10px;color:rgba(255,255,255,0.2);letter-spacing:1px}

  #app{display:none;min-height:100vh}
  .topnav{background:var(--teal-dark);border-bottom:1px solid rgba(201,168,76,0.2);padding:0 32px;height:64px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100;box-shadow:0 2px 20px rgba(0,0,0,0.15)}
  .nav-brand{display:flex;align-items:center;gap:16px}
  .nav-brand img{height:52px;filter:none}
  .nav-brand-text{font-family:'DM Mono',monospace;font-size:10px;color:rgba(201,168,76,0.6);letter-spacing:3px;text-transform:uppercase}
  .nav-right{display:flex;align-items:center;gap:20px}
  .nav-role-badge{padding:4px 14px;background:rgba(201,168,76,0.15);border:1px solid rgba(201,168,76,0.3);border-radius:20px;font-family:'DM Mono',monospace;font-size:10px;color:var(--gold);letter-spacing:2px;text-transform:uppercase}
  .nav-user{font-size:13px;color:rgba(255,255,255,0.7)}
  .btn-logout{padding:7px 18px;background:transparent;border:1px solid rgba(255,255,255,0.2);border-radius:2px;color:rgba(255,255,255,0.5);font-family:'DM Mono',monospace;font-size:10px;letter-spacing:2px;cursor:pointer;transition:all 0.2s}
  .btn-logout:hover{border-color:rgba(255,255,255,0.4);color:rgba(255,255,255,0.8)}
  .btn-privacy{padding:6px 10px;background:transparent;border:1px solid rgba(255,255,255,0.2);border-radius:2px;color:rgba(255,255,255,0.6);cursor:pointer;transition:all 0.2s;font-size:14px;line-height:1;display:inline-flex;align-items:center;gap:6px}
  .btn-privacy:hover{border-color:rgba(255,255,255,0.45);color:rgba(255,255,255,0.95)}
  body.privacy-mode .btn-privacy{background:rgba(201,168,76,0.18);border-color:var(--gold);color:var(--gold)}
  .btn-privacy .privacy-label{font-family:'DM Mono',monospace;font-size:10px;letter-spacing:2px}
  .sensitive{transition:filter 0.2s ease, background 0.2s ease}
  body.privacy-mode .sensitive{filter:blur(7px);user-select:none;cursor:not-allowed}
  body.privacy-mode .sensitive:hover{filter:blur(7px)}
  @media print { body.privacy-mode .sensitive{filter:blur(7px) !important} }

  .main-layout{display:flex;min-height:calc(100vh - 64px)}
  .sidebar{width:220px;background:white;border-right:1px solid var(--border);padding:28px 0;flex-shrink:0}
  .sidebar-label{font-family:'DM Mono',monospace;font-size:9px;letter-spacing:3px;text-transform:uppercase;color:var(--slate-light);padding:12px 24px 8px}
  .sidebar-item{display:flex;align-items:center;gap:10px;padding:10px 24px;cursor:pointer;font-size:13px;color:var(--slate-mid);transition:all 0.2s;border:none;background:none;width:100%;text-align:left;border-left:3px solid transparent}
  .sidebar-item:hover{background:var(--teal-pale);color:var(--teal-dark)}
  .sidebar-item.active{background:linear-gradient(135deg,var(--teal-pale),rgba(201,168,76,0.08));color:var(--teal-dark);font-weight:600;border-left-color:var(--gold)}
  .sidebar-count{position:absolute;top:-7px;right:-9px;min-width:16px;height:16px;padding:0 4px;display:flex;align-items:center;justify-content:center;background:var(--danger);color:#fff;border-radius:8px;font-family:'DM Mono',monospace;font-size:9px;font-weight:700;line-height:1;border:2px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,0.25);box-sizing:border-box}
  @keyframes badgePop{0%{transform:scale(0)}70%{transform:scale(1.15)}100%{transform:scale(1)}}
  .sidebar-count{animation:badgePop 0.25s ease-out}
  .sidebar-icon{width:18px;text-align:center;font-size:14px;line-height:1;position:relative;display:inline-block}
  .sidebar-icon i{font-size:15px;vertical-align:middle}
  .sidebar-group{margin-bottom:4px}
  .sidebar-group-toggle{display:flex;align-items:center;justify-content:space-between;padding:10px 24px 6px;cursor:pointer;user-select:none;border:none;background:none;width:100%;text-align:left}
  .sidebar-group-toggle:hover{background:rgba(74,124,142,0.03)}
  .sidebar-group-name{font-family:'DM Mono',monospace;font-size:9px;letter-spacing:3px;text-transform:uppercase;color:var(--slate-light)}
  .sidebar-group-arrow{font-size:10px;color:var(--slate-light);transition:transform 0.2s}
  .sidebar-group.open .sidebar-group-arrow{transform:rotate(90deg)}
  .sidebar-group-items{overflow:hidden;max-height:0;transition:max-height 0.25s ease}
  .sidebar-group.open .sidebar-group-items{max-height:600px}
  .content{flex:1;padding:36px 40px;overflow-y:auto;background:var(--cream)}

  .page-header{margin-bottom:32px;padding-bottom:20px;border-bottom:1px solid var(--border)}
  .page-title{font-family:'Cormorant Garamond',serif;font-size:32px;font-weight:500;color:var(--teal-dark);letter-spacing:1px;margin-bottom:6px}
  .page-subtitle{font-size:13px;color:var(--slate-light);font-family:'DM Mono',monospace;letter-spacing:1px}
  .card{background:white;border:1px solid var(--border);border-radius:4px;padding:28px;margin-bottom:24px;box-shadow:var(--shadow)}
  .card-title{font-family:'Cormorant Garamond',serif;font-size:20px;font-weight:500;color:var(--teal-dark);margin-bottom:20px;display:flex;align-items:center;gap:10px}
  .card-title::after{content:'';flex:1;height:1px;background:var(--border)}
  .grid-2{display:grid;grid-template-columns:1fr 1fr;gap:20px}
  .grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px}
  .grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}

  .stat-card{background:white;border:1px solid var(--border);border-radius:4px;padding:22px 24px;box-shadow:var(--shadow);position:relative;overflow:hidden}
  .stat-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--teal),var(--gold))}
  .stat-label{font-family:'DM Mono',monospace;font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--slate-light);margin-bottom:8px}
  .stat-value{font-family:'Cormorant Garamond',serif;font-size:28px;font-weight:600;color:var(--teal-dark)}
  .stat-sub{font-size:12px;color:var(--slate-light);margin-top:4px}
  .claims-tabs{display:flex;gap:4px;border-bottom:2px solid var(--border);margin-bottom:22px}
  .claims-tab{padding:10px 24px;background:none;border:none;border-bottom:3px solid transparent;margin-bottom:-2px;cursor:pointer;font-family:'Noto Serif TC',serif;font-size:15px;color:var(--slate-light);font-weight:500;transition:all 0.2s}
  .claims-tab:hover{color:var(--teal-dark)}
  .claims-tab.active{color:var(--teal-dark);border-bottom-color:var(--gold);font-weight:600}
  /* 全站搜尋 */
  .nav-search{position:relative;display:flex;align-items:center;gap:6px;background:rgba(255,255,255,0.12);border:1px solid rgba(255,255,255,0.18);border-radius:20px;padding:6px 14px;width:220px;transition:width .2s}
  .nav-search i{color:rgba(255,255,255,0.6);font-size:13px}
  .nav-search input{background:none;border:none;outline:none;color:#fff;font-size:13px;width:100%;font-family:'Noto Serif TC',serif}
  .nav-search input::placeholder{color:rgba(255,255,255,0.5)}
  .nav-search:focus-within{width:280px;background:rgba(255,255,255,0.18)}
  .nav-search-results{position:absolute;top:42px;right:0;width:340px;max-height:62vh;overflow-y:auto;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 32px rgba(0,0,0,0.18);display:none;z-index:300}
  .nav-search-results.show{display:block}
  .nsr-group-title{font-family:'DM Mono',monospace;font-size:10px;letter-spacing:2px;color:var(--slate-light);padding:10px 14px 4px;text-transform:uppercase}
  .nsr-item{padding:8px 14px;cursor:pointer;border-bottom:1px solid var(--border)}
  .nsr-item:hover{background:var(--teal-pale)}
  .nsr-item .t{font-size:13px;color:var(--slate);font-weight:600}
  .nsr-item .s{font-size:11px;color:var(--slate-light)}
  .nsr-empty{padding:16px;text-align:center;font-size:13px;color:var(--slate-light)}
  @media (max-width:768px){.nav-search{display:none}}
  /* 目標進度條（含跑者動畫與里程碑旗標） */
  .gb-wrap{position:relative;padding:34px 0 26px}
  .gb-track{position:relative;height:14px;background:rgba(0,0,0,0.07);border-radius:7px}
  .gb-fill{height:100%;background:linear-gradient(90deg,var(--teal),var(--gold));border-radius:7px;animation:gbGrow 1.6s cubic-bezier(.25,.8,.35,1)}
  .gb-fill.done{background:var(--success)}
  @keyframes gbGrow{from{width:0}}
  .gb-runner{position:absolute;top:-32px;z-index:3;transform:translateX(-50%);animation:gbRun 1.6s cubic-bezier(.25,.8,.35,1),gbBob .3s ease-in-out infinite alternate}
  @keyframes gbRun{from{left:0%}}
  @keyframes gbBob{from{transform:translateX(-50%) translateY(0)}to{transform:translateX(-50%) translateY(-3px)}}
  .gb-runner svg{display:block;overflow:visible}
  .gb-runner svg line{stroke:var(--teal-dark);stroke-width:2.6;stroke-linecap:round}
  .gb-runner svg circle{fill:var(--teal-dark)}
  .gb-runner .r-limb{transform-box:view-box}
  /* 跑步（進度後段） */
  .gb-runner .r-leg1{transform-origin:11px 18px;animation:rSwing .3s ease-in-out infinite alternate}
  .gb-runner .r-leg2{transform-origin:11px 18px;animation:rSwing .3s ease-in-out infinite alternate-reverse}
  .gb-runner .r-arm1{transform-origin:14px 10px;animation:rSwingArm .3s ease-in-out infinite alternate-reverse}
  .gb-runner .r-arm2{transform-origin:14px 10px;animation:rSwingArm .3s ease-in-out infinite alternate}
  @keyframes rSwing{from{transform:rotate(-34deg)}to{transform:rotate(34deg)}}
  @keyframes rSwingArm{from{transform:rotate(-28deg)}to{transform:rotate(28deg)}}
  /* 爬行（進度前段） */
  .gb-runner .c-arm{transform-origin:21px 13px;animation:cCrawl .55s ease-in-out infinite alternate}
  .gb-runner .c-arm2{animation-direction:alternate-reverse}
  .gb-runner .c-leg{transform-origin:9px 13px;animation:cCrawl .55s ease-in-out infinite alternate-reverse}
  .gb-runner .c-leg2{animation-direction:alternate}
  @keyframes cCrawl{from{transform:rotate(-14deg)}to{transform:rotate(14deg)}}
  /* 彎腰走（進度中段） */
  .gb-runner .w-leg1{transform-origin:11px 17px;animation:wWalk .45s ease-in-out infinite alternate}
  .gb-runner .w-leg2{transform-origin:11px 17px;animation:wWalk .45s ease-in-out infinite alternate-reverse}
  .gb-runner .w-arm1{transform-origin:13px 10px;animation:wWalkArm .45s ease-in-out infinite alternate-reverse}
  .gb-runner .w-arm2{transform-origin:13px 10px;animation:wWalkArm .45s ease-in-out infinite alternate}
  @keyframes wWalk{from{transform:rotate(-18deg)}to{transform:rotate(18deg)}}
  @keyframes wWalkArm{from{transform:rotate(-13deg)}to{transform:rotate(13deg)}}
  /* 站立慶祝（100%） */
  .gb-runner.gb-stand{animation:gbRun 1.6s cubic-bezier(.25,.8,.35,1),gbJump .55s ease-in-out infinite alternate}
  @keyframes gbJump{from{transform:translateX(-50%) translateY(0)}to{transform:translateX(-50%) translateY(-6px)}}
  .gb-runner .s-arm1{transform-origin:13px 10px;animation:sWave .55s ease-in-out infinite alternate}
  .gb-runner .s-arm2{transform-origin:13px 10px;animation:sWave .55s ease-in-out infinite alternate-reverse}
  @keyframes sWave{from{transform:rotate(-10deg)}to{transform:rotate(10deg)}}
  .gb-flag{position:absolute;top:-30px;transform:translateX(-50%);font-size:22px;line-height:1;z-index:2;cursor:default}
  .gb-flag.pending{animation:gbWave 1.6s ease-in-out infinite}
  @keyframes gbWave{0%,100%{transform:translateX(-50%) rotate(0deg)}50%{transform:translateX(-50%) rotate(-8deg)}}
  .gb-flag-label{position:absolute;top:20px;transform:translateX(-50%);font-size:11px;color:var(--slate-light);white-space:nowrap;max-width:110px;overflow:hidden;text-overflow:ellipsis;text-align:center}
  .gb-flag-label.reached{color:var(--success);font-weight:700}

  .input-group{margin-bottom:18px}
  .input-label{display:block;font-size:12px;font-family:'DM Mono',monospace;letter-spacing:1px;color:var(--slate-mid);margin-bottom:7px;text-transform:uppercase}
  .input-field{width:100%;padding:11px 14px;border:1px solid var(--border);border-radius:3px;font-family:'Noto Serif TC',serif;font-size:14px;color:var(--slate);background:white;transition:all 0.2s;outline:none}
  .input-field:focus{border-color:var(--teal);box-shadow:0 0 0 3px rgba(74,124,142,0.1)}
  .input-prefix{display:flex;align-items:center;border:1px solid var(--border);border-radius:3px;overflow:hidden}
  .input-prefix span{padding:11px 14px;background:var(--teal-pale);color:var(--teal);font-family:'DM Mono',monospace;font-size:13px;border-right:1px solid var(--border);white-space:nowrap}
  .input-prefix input{flex:1;padding:11px 14px;border:none;outline:none;font-family:'Noto Serif TC',serif;font-size:14px;color:var(--slate)}

  .btn{padding:10px 22px;border-radius:3px;font-family:'Noto Serif TC',serif;font-size:13px;cursor:pointer;transition:all 0.2s;border:none;letter-spacing:1px}
  .btn-teal{background:var(--teal);color:white}.btn-teal:hover{background:var(--teal-dark);transform:translateY(-1px)}
  .btn-gold{background:linear-gradient(135deg,var(--gold),var(--gold-light));color:var(--teal-dark);font-weight:600}.btn-gold:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(201,168,76,0.3)}
  .btn-outline{background:transparent;border:1px solid var(--teal);color:var(--teal)}.btn-outline:hover{background:var(--teal-pale)}
  .btn-danger{background:var(--danger);color:white}.btn-danger:hover{background:#c0392b}
  .btn-ghost{background:transparent;border:1px solid var(--border);color:var(--slate-mid)}.btn-ghost:hover{border-color:var(--teal);color:var(--teal)}
  .btn-sm{padding:6px 14px;font-size:12px}.btn-xs{padding:4px 10px;font-size:11px}
  .btn:disabled{opacity:0.5;cursor:not-allowed;transform:none!important}

  .badge{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:20px;font-family:'DM Mono',monospace;font-size:10px;letter-spacing:1px;font-weight:500}
  .badge-pending{background:#fff3cd;color:#856404}.badge-reviewing{background:#cff4fc;color:#0c6073}
  .badge-confirmed{background:#d1ecf1;color:#0c5460}.badge-approved{background:#d4edda;color:#155724}
  .badge-rejected{background:#f8d7da;color:#721c24}.badge-paid{background:rgba(201,168,76,0.15);color:#856404;border:1px solid rgba(201,168,76,0.3)}
  .badge-inactive{background:#e2e8f0;color:#4a5568}
  .badge::before{font-size:8px}
  .badge-pending::before,.badge-reviewing::before{content:'●';color:#ffc107}
  .badge-confirmed::before{content:'●';color:#20c997}.badge-approved::before{content:'●';color:#28a745}
  .badge-rejected::before{content:'●';color:#dc3545}.badge-paid::before{content:'●';color:var(--gold)}
  .badge-inactive::before{content:'●';color:#a0aec0}

  .table{width:100%;border-collapse:collapse;font-size:13px}
  .table th{padding:11px 16px;text-align:left;font-family:'DM Mono',monospace;font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--slate-light);border-bottom:2px solid var(--border);background:var(--cream)}
  .table td{padding:14px 16px;border-bottom:1px solid var(--border);color:var(--slate)}
  .table tr:hover td{background:var(--teal-pale)}

  .my-bonus-hero{background:linear-gradient(135deg,var(--teal-dark) 0%,#1a4a5a 100%);border-radius:6px;padding:40px;color:white;text-align:center;margin-bottom:24px;position:relative;overflow:hidden}
  .my-bonus-hero::before{content:'';position:absolute;top:-40px;right:-40px;width:200px;height:200px;border-radius:50%;background:rgba(201,168,76,0.06)}
  .hero-label{font-family:'DM Mono',monospace;font-size:11px;letter-spacing:4px;text-transform:uppercase;color:rgba(255,255,255,0.5);margin-bottom:12px}
  .hero-project{font-size:15px;color:rgba(255,255,255,0.7);margin-bottom:8px}
  .hero-amount{font-family:'Cormorant Garamond',serif;font-size:64px;font-weight:600;color:var(--gold-light);line-height:1;margin-bottom:8px}
  .hero-sub{font-family:'DM Mono',monospace;font-size:11px;color:rgba(255,255,255,0.4);letter-spacing:2px}

  .confirm-block{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border:1px solid var(--border);border-radius:4px;margin-bottom:12px;background:white;transition:all 0.2s}
  .confirm-block.confirmed{border-color:var(--success);background:rgba(46,204,113,0.04)}
  .confirm-block.clickable{cursor:pointer;border-left:4px solid var(--gold)}
  .confirm-block.clickable:hover{border-color:var(--gold);background:var(--gold-pale);box-shadow:0 2px 12px rgba(201,168,76,0.15);transform:translateY(-1px)}
  .confirm-block.clickable:active{transform:translateY(0);box-shadow:none}
  .confirm-name{font-size:14px;font-weight:600;color:var(--slate);margin-bottom:2px}
  .confirm-role{font-family:'DM Mono',monospace;font-size:10px;letter-spacing:1px;color:var(--slate-light)}

  .workflow-steps{display:flex;align-items:center;margin-bottom:28px}
  .workflow-step{display:flex;align-items:center;flex-direction:column;flex:1;position:relative}
  .workflow-step:not(:last-child)::after{content:'';position:absolute;top:18px;left:50%;width:100%;height:2px;background:var(--border);z-index:0}
  .workflow-step.done:not(:last-child)::after{background:var(--teal)}
  .step-dot{width:36px;border-radius:50%;background:white;border:2px solid var(--border);display:flex;align-items:center;justify-content:center;font-family:'DM Mono',monospace;font-size:12px;color:var(--slate-light);position:relative;z-index:1;font-weight:600}
  .workflow-step.done .step-dot{background:var(--teal);border-color:var(--teal);color:white}
  .workflow-step.active .step-dot{background:var(--gold);border-color:var(--gold);color:var(--teal-dark)}
  .step-label{font-size:11px;color:var(--slate-light);margin-top:6px;text-align:center;font-family:'DM Mono',monospace}
  .workflow-step.done .step-label{color:var(--teal)}.workflow-step.active .step-label{color:var(--gold);font-weight:600}

  .modal-overlay{position:fixed;inset:0;background:rgba(44,62,80,0.6);backdrop-filter:blur(4px);z-index:1000;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity 0.3s}
  .modal-overlay.show{opacity:1;pointer-events:all}
  .modal{background:white;border-radius:6px;width:560px;max-width:95vw;max-height:85vh;overflow-y:auto;box-shadow:var(--shadow-lg);transform:translateY(20px);transition:transform 0.3s}
  .modal-overlay.show .modal{transform:translateY(0)}
  .modal-header{padding:24px 28px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;background:var(--teal-dark);color:white;border-radius:6px 6px 0 0}
  .modal-title{font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:500}
  .modal-close{background:none;border:none;color:rgba(255,255,255,0.6);font-size:20px;cursor:pointer;padding:4px;line-height:1}
  .modal-body{padding:28px}.modal-footer{padding:20px 28px;border-top:1px solid var(--border);display:flex;gap:10px;justify-content:flex-end}

  .email-preview{background:#f5f5f5;border:1px solid #ddd;border-radius:4px;overflow:hidden;margin-top:16px}
  .email-preview-header{background:var(--teal-dark);color:white;padding:16px 20px;font-size:13px}
  .email-preview-body{padding:24px;background:white;font-size:13px;line-height:1.8}

  .report-header{display:flex;align-items:center;justify-content:space-between;padding:24px 28px;background:linear-gradient(135deg,var(--teal-dark),var(--teal));color:white;border-radius:4px;margin-bottom:20px}
  .report-logo{font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:500}

  .highlight-box{border-left:3px solid var(--gold);padding:14px 18px;background:var(--gold-pale);border-radius:0 4px 4px 0;margin-bottom:16px;font-size:13px}
  .info-box{border-left:3px solid var(--teal);padding:14px 18px;background:var(--teal-pale);border-radius:0 4px 4px 0;margin-bottom:16px;font-size:13px}

  .tag{display:inline-block;padding:3px 10px;border-radius:3px;font-family:'DM Mono',monospace;font-size:10px;letter-spacing:1px}
  .tag-sales{background:rgba(74,124,142,0.15);color:var(--teal-dark)}.tag-pm{background:rgba(201,168,76,0.15);color:#856404}
  .tag-ops{background:rgba(46,204,113,0.15);color:#155724}.tag-admin{background:rgba(231,76,60,0.1);color:#721c24}.tag-specialist{background:rgba(155,89,182,0.15);color:#6c3483}
  /* 2026-08-04 賺價差專用（原本沒有這個 class，徽章會變沒樣式）*/
  .tag-gold{background:rgba(230,126,34,0.15);color:#8a4b08}

  .hidden{display:none!important}

  /* ── Privacy / Stealth Mode ── */
  .privacy-toggle{background:rgba(255,255,255,0.08);border:1px solid rgba(201,168,76,0.3);color:rgba(255,255,255,0.75);width:34px;height:34px;border-radius:50%;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:15px;transition:all .2s}
  .privacy-toggle:hover{background:rgba(201,168,76,0.2);color:var(--gold-light);border-color:var(--gold)}
  body.privacy-mode .privacy-toggle{background:var(--gold);color:var(--teal-dark);border-color:var(--gold)}
  body.privacy-mode .priv{filter:blur(7px);transition:filter .15s;cursor:help;user-select:none;border-radius:3px;background:rgba(120,120,120,0.06)}
  body.privacy-mode .priv:hover{filter:blur(0);background:rgba(201,168,76,0.12)}
  body.privacy-mode .priv *{pointer-events:none}
  /* 2026-10-05 嵌入模式（EIP 用 iframe 放「報帳 / 請款」）：
     藏掉自己的頂欄與側欄，導覽交給 EIP 的側欄，避免畫面出現兩層側欄。
     .content 自己就會撐滿，因為 .main-layout 是 flex 而側欄不見了。 */
  html.embedded .topnav,
  html.embedded .sidebar,
  html.embedded .sidebar-overlay{display:none!important}
  html.embedded .content{padding:28px 32px}

  /* 換 SSO token 的那一兩秒：先別讓內網的登入表單出現在 EIP 裡面 */
  #ssoLoading{display:none}
  html.sso-trying #loginScreen{display:none!important}
  html.sso-trying #ssoLoading{
    display:flex;align-items:center;justify-content:center;gap:10px;
    min-height:60vh;color:var(--slate-mid,#64748b);font-size:14px;
  }
  @media (max-width:768px){html.embedded .content{padding:16px 14px}}

  @media print{body.privacy-mode .priv{filter:blur(10px)!important}}

  .divider{border:none;border-top:1px solid var(--border);margin:24px 0}
  .text-gold{color:var(--gold)}.text-teal{color:var(--teal)}
  .text-muted{color:var(--slate-light);font-size:12px}
  /* 表格裡可以點進專案明細的專案名（收款/付款管理用） */
  .proj-link{color:var(--teal-dark);border-bottom:1px solid rgba(0,0,0,0.18);cursor:pointer}
  .proj-link:hover{color:var(--gold);border-bottom-color:var(--gold)}
  .flex-between{display:flex;justify-content:space-between;align-items:center}
  .flex-end{display:flex;justify-content:flex-end}
  .gap-8{gap:8px}.mt-16{margin-top:16px}

  .locked-view{text-align:center;padding:60px 40px}
  .locked-icon{font-size:48px;margin-bottom:16px}
  .locked-title{font-family:'Cormorant Garamond',serif;font-size:24px;color:var(--teal-dark);margin-bottom:8px}
  .locked-sub{color:var(--slate-light);font-size:14px}

  /* Loading spinner */
  .spinner{display:inline-block;width:20px;height:20px;border:2px solid rgba(255,255,255,0.3);border-top-color:white;border-radius:50%;animation:spin 0.7s linear infinite;vertical-align:middle;margin-right:6px}
  @keyframes spin{to{transform:rotate(360deg)}}
  .page-loading{display:flex;align-items:center;justify-content:center;padding:80px;color:var(--slate-light);font-family:'DM Mono',monospace;font-size:13px}

  .toast-container{position:fixed;top:80px;right:24px;z-index:9999;display:flex;flex-direction:column;gap:10px}
  .toast{padding:14px 20px;border-radius:4px;background:white;border-left:4px solid var(--teal);box-shadow:var(--shadow-lg);font-size:13px;color:var(--slate);max-width:320px;animation:slideIn 0.3s ease;display:flex;align-items:flex-start;gap:10px}
  .toast.success{border-left-color:var(--success)}.toast.warning{border-left-color:var(--warning)}
  .toast.error{border-left-color:var(--danger)}.toast.gold{border-left-color:var(--gold)}
  @keyframes slideIn{from{transform:translateX(100%);opacity:0}to{transform:translateX(0);opacity:1}}

  /* Upload zone */
  .upload-zone{border:2px dashed var(--border);border-radius:6px;padding:40px;text-align:center;cursor:pointer;transition:all 0.2s}
  .upload-zone:hover{border-color:var(--teal);background:var(--teal-pale)}
  .upload-zone.dragging{border-color:var(--gold);background:var(--gold-pale)}
  .upload-zone input[type=file]{display:none}

  /* Milestone */
  .ms-item{display:flex;align-items:center;gap:16px;padding:14px 0;border-bottom:1px solid var(--border)}
  .ms-dot{width:12px;height:12px;border-radius:50%;background:var(--border);flex-shrink:0}
  .ms-dot.received{background:var(--success)}.ms-dot.invoiced{background:var(--warning)}.ms-dot.overdue{background:var(--danger)}.ms-dot.pending{background:var(--slate-light)}
  .ms-info{flex:1}.ms-name{font-weight:600;font-size:14px;margin-bottom:2px}.ms-sub{font-size:12px;color:var(--slate-light)}

  /* Expense category tags */
  .cat-tag{display:inline-block;padding:3px 10px;border-radius:3px;font-family:'DM Mono',monospace;font-size:10px;letter-spacing:1px}
  .cat-travel{background:rgba(52,152,219,0.15);color:#2471a3}.cat-materials{background:rgba(155,89,182,0.15);color:#7d3c98}
  .cat-subcontractor{background:rgba(230,126,34,0.15);color:#ca6f1e}.cat-entertainment{background:rgba(241,196,15,0.15);color:#9a7d0a}
  .cat-office{background:rgba(46,204,113,0.15);color:#155724}.cat-other{background:rgba(149,165,166,0.15);color:#566573}

  /* Cashflow bar */
  .cf-bar-wrap{display:flex;gap:4px;align-items:center;height:22px}
  .cf-bar{height:18px;border-radius:3px;min-width:2px;transition:width 0.3s}
  .cf-income{background:var(--teal)}.cf-expense{background:var(--danger)}

  /* Progress bar */
  .progress{height:8px;background:var(--border);border-radius:4px;overflow:hidden;margin-top:6px}
  .progress-fill{height:100%;background:linear-gradient(90deg,var(--teal),var(--gold));border-radius:4px;transition:width 0.3s}

  /* Parsed result card */
  .parsed-field{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid rgba(0,0,0,0.05);font-size:13px}
  .parsed-label{color:var(--slate-light);font-family:'DM Mono',monospace;font-size:11px}
  .parsed-value{font-weight:600;color:var(--teal-dark)}

  .grid-5{display:grid;grid-template-columns:repeat(5,1fr);gap:16px}

  @media print{.topnav,.sidebar,.btn,.modal-overlay,.toast-container{display:none!important}.content{padding:0}}

  /* ── Mobile Responsive ── */
  .mobile-menu-btn{display:none;background:none;border:none;color:rgba(255,255,255,0.7);font-size:24px;cursor:pointer;padding:4px 8px;line-height:1}
  .sidebar-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.4);z-index:199}

  @media(max-width:768px){
    /* Top nav */
    .topnav{padding:0 12px;height:56px}
    .nav-brand img{height:40px}
    .nav-brand-text{display:none}
    .nav-brand>div>div:first-child{font-size:14px}
    .nav-right{gap:8px}
    .nav-role-badge{padding:3px 8px;font-size:8px;letter-spacing:1px}
    .nav-user{display:none}
    .btn-logout{padding:5px 10px;font-size:9px;letter-spacing:1px}
    .mobile-menu-btn{display:block}

    /* Sidebar as overlay drawer */
    .main-layout{display:block}
    .sidebar{position:fixed;top:56px;left:-260px;width:260px;height:calc(100vh - 56px);z-index:200;transition:left 0.3s ease;overflow-y:auto;box-shadow:4px 0 20px rgba(0,0,0,0.15)}
    .sidebar.open{left:0}
    .sidebar-overlay.show{display:block}

    /* Content */
    .content{padding:16px 14px;min-height:calc(100vh - 56px)}
    .page-header{margin-bottom:16px;padding-bottom:12px}
    .page-title{font-size:22px}
    .page-subtitle{font-size:11px}

    /* Cards */
    .card{padding:16px;margin-bottom:16px}
    .card-title{font-size:17px;margin-bottom:14px}

    /* Grids → single column */
    .grid-2,.grid-3,.grid-4,.grid-5{grid-template-columns:1fr;gap:12px}

    /* Stat cards */
    .stat-card{padding:14px 16px}
    .stat-value{font-size:22px}

    /* Tables — card-style on mobile */
    .table{display:block;overflow-x:visible;white-space:normal;-webkit-overflow-scrolling:touch}
    .table thead{display:none}
    .table tbody,.table tr,.table td{display:block;width:100%}
    .table tr{background:white;border:1px solid var(--border);border-radius:6px;padding:12px;margin-bottom:10px;position:relative}
    .table tr:hover td{background:transparent}
    .table td{padding:4px 0;border:none;font-size:13px;display:flex;justify-content:space-between;align-items:center}
    .table td::before{content:attr(data-label);font-family:'DM Mono',monospace;font-size:10px;letter-spacing:1px;color:var(--slate-light);text-transform:uppercase;flex-shrink:0;margin-right:12px}
    .table td:last-child{justify-content:flex-end;flex-wrap:wrap;gap:6px;padding-top:8px;border-top:1px solid var(--border);margin-top:4px}

    /* Fallback: tables that don't use data-label — horizontal scroll */
    .table-scroll{display:block;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}
    .table-scroll thead{display:table-header-group}
    .table-scroll tbody,.table-scroll tr,.table-scroll td{display:table-row}
    .table-scroll td{display:table-cell}
    .table-scroll td::before{content:none}

    /* Modals full screen */
    .modal{width:100vw!important;max-width:100vw!important;max-height:100vh!important;border-radius:0!important;height:100vh;overflow-y:auto}
    .modal-overlay{align-items:flex-start}
    .modal-header{border-radius:0!important;padding:16px 20px}
    .modal-title{font-size:18px}
    .modal-body{padding:16px}
    .modal-footer{padding:12px 16px;flex-wrap:wrap}

    /* Buttons */
    .btn{padding:8px 16px;font-size:12px}
    .btn-sm{padding:6px 12px;font-size:11px}
    .btn-xs{padding:5px 10px;font-size:11px}
    .flex-between{flex-wrap:wrap;gap:8px}
    .flex-end{flex-wrap:wrap;gap:8px}

    /* Mobile button groups in table cells */
    td .btn{margin:0!important}

    /* Login */
    .login-card{width:calc(100vw - 32px);padding:32px 24px}
    .login-logo img{width:140px}

    /* Input */
    .input-field{font-size:16px;padding:10px 12px}
    .input-prefix input{font-size:16px}
    .input-prefix{flex-direction:column}
    .input-prefix span{border-right:none;border-bottom:1px solid var(--border);text-align:center;padding:8px}

    /* Upload zone */
    .upload-zone{padding:24px 16px}

    /* Toast */
    .toast-container{right:8px;left:8px;top:64px}
    .toast{max-width:100%}

    /* Bonus hero */
    .my-bonus-hero{padding:24px 16px}
    .hero-amount{font-size:36px;word-break:break-all}
    .hero-label{font-size:10px;letter-spacing:2px}

    /* Workflow steps — vertical on mobile */
    .workflow-steps{flex-direction:column;align-items:flex-start;gap:4px}
    .workflow-step{flex-direction:row;gap:8px}
    .workflow-step:not(:last-child)::after{display:none}
    .step-dot{width:28px;height:28px;font-size:10px}
    .step-label{margin-top:0;font-size:10px}

    /* Email preview */
    .email-preview-body{padding:16px;font-size:12px}

    /* Highlight / info box */
    .highlight-box,.info-box{font-size:12px;padding:10px 14px}

    /* Parsed fields */
    .parsed-field{flex-direction:column;gap:2px}

    /* Confirm block */
    .confirm-block{flex-direction:column;align-items:flex-start;gap:8px}

    /* Report header */
    .report-header{flex-direction:column;gap:8px;text-align:center;padding:16px}
    .report-logo{font-size:18px}

    /* Flow steps */
    .flow{flex-direction:column;align-items:flex-start}
    .flow-arrow{transform:rotate(90deg)}

    /* Cashflow bar */
    .cf-bar-wrap{height:16px}

    /* Numbers should not overflow */
    .stat-value{font-size:20px;word-break:break-all}
    .stat-sub{font-size:11px}

    /* All inline display:flex inside content should wrap */
    .content div[style*="display:flex"]{flex-wrap:wrap!important}
    .content div[style*="justify-content:space-between"]{flex-wrap:wrap!important;gap:4px!important}

    /* Any inline width > 400px override */
    .content div[style*="width:640"]{width:100%!important}
    .content div[style*="width:560"]{width:100%!important}
    .content div[style*="width:500"]{width:100%!important}

    /* Page header with button flex */
    .page-header .flex-between,.page-header>div[style*="display:flex"]{flex-direction:column;align-items:flex-start!important;gap:12px}

    /* Milestone / expense inline items */
    .ms-item{flex-wrap:wrap}

    /* Inline grid overrides */
    div[style*="grid-template-columns:1fr 1fr"]{grid-template-columns:1fr!important}
    div[style*="grid-template-columns:100px"]{grid-template-columns:1fr!important}
    div[style*="column-count:2"]{column-count:1!important}

    /* Force all modals to full width regardless of inline style */
    .modal-overlay .modal{width:100vw!important;max-width:100vw!important}

    /* Cashflow table fixed width */
    td[style*="width:180"]{width:auto!important}

    /* Parsed field summary */
    .parsed-value{max-width:100%!important;text-align:left!important;word-break:break-word}

    /* Settings max-width cards */
    .card[style*="max-width"]{max-width:100%!important}

    /* Prevent any horizontal scroll on body */
    html,body{overflow-x:hidden!important;max-width:100vw}
    .content{overflow-x:hidden;max-width:100vw;word-break:break-word}

    /* Catch all tables including inline styled ones */
    table{width:100%!important;table-layout:auto!important}
    table[style*="width"]{width:100%!important}

    /* Cashflow bar legend */
    .content span[style*="display:inline-block;width:12px"]{width:10px!important;height:10px!important}

    /* Email preview overflow */
    .email-preview{overflow-x:hidden}
    .email-preview-header{font-size:12px;padding:12px 14px}
  }

  @media(max-width:380px){
    .topnav{padding:0 8px}
    .content{padding:12px 10px}
    .card{padding:12px}
    .page-title{font-size:20px}
    .stat-value{font-size:20px}
    .login-card{padding:24px 16px}
  }

/* ══════════════════════════════════════
   FINNER PLATFORM — complete redesign
   ══════════════════════════════════════ */
#finnerPlatform{display:none;min-height:100vh;background:#f1f5f9;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}

/* Topbar */
.fn-topbar{height:64px;background:var(--teal-dark);display:flex;align-items:center;justify-content:space-between;padding:0 32px;position:sticky;top:0;z-index:200;border-bottom:1px solid rgba(201,168,76,0.2);box-shadow:0 2px 20px rgba(0,0,0,0.15)}
.fn-logo{display:flex;align-items:center;gap:14px;text-decoration:none}
.fn-logo-mark{font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:600;color:white;letter-spacing:1px}
.fn-logo-name{display:none}
.fn-logo-tag{font-family:'DM Mono',monospace;font-size:10px;color:rgba(201,168,76,0.6);letter-spacing:3px;text-transform:uppercase}
.fn-topbar-right{display:flex;align-items:center;gap:20px}
.fn-admin-pill{display:flex;align-items:center;gap:8px}
.fn-admin-avatar{width:28px;height:28px;background:rgba(201,168,76,0.2);border:1px solid rgba(201,168,76,0.4);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:var(--gold);font-family:'DM Mono',monospace}
.fn-admin-name{font-size:13px;color:rgba(255,255,255,0.7);font-family:'Noto Serif TC',serif}
.fn-logout-btn{padding:7px 18px;background:transparent;border:1px solid rgba(255,255,255,0.2);border-radius:2px;color:rgba(255,255,255,0.5);font-family:'DM Mono',monospace;font-size:10px;letter-spacing:2px;cursor:pointer;transition:all 0.2s}
.fn-logout-btn:hover{border-color:rgba(255,255,255,0.4);color:rgba(255,255,255,0.8)}

/* Layout */
.fn-layout{display:flex;min-height:calc(100vh - 64px)}

/* Sidebar */
.fn-sidebar{width:220px;background:white;border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;position:sticky;top:64px;height:calc(100vh - 64px);padding:28px 0}
.fn-sidebar-nav{flex:1}
.fn-nav-label{font-family:'DM Mono',monospace;font-size:9px;letter-spacing:3px;text-transform:uppercase;color:var(--slate-light);padding:12px 24px 8px}
.fn-nav-item{display:flex;align-items:center;gap:10px;padding:10px 24px;cursor:pointer;font-size:13px;color:var(--slate-mid);transition:all 0.2s;border:none;background:none;width:100%;text-align:left;border-left:3px solid transparent;font-family:'Noto Serif TC',serif}
.fn-nav-item i{font-size:15px;width:18px;text-align:center;flex-shrink:0;vertical-align:middle}
.fn-nav-item:hover{background:var(--teal-pale);color:var(--teal-dark)}
.fn-nav-item.active{background:linear-gradient(135deg,var(--teal-pale),rgba(201,168,76,0.08));color:var(--teal-dark);font-weight:600;border-left-color:var(--gold)}
.fn-sidebar-footer{padding:16px 24px;border-top:1px solid var(--border)}
.fn-version{font-size:10px;color:var(--slate-light);font-family:'DM Mono',monospace;letter-spacing:1px}

/* Content */
.fn-content{flex:1;padding:36px 40px;overflow-y:auto;min-width:0;background:var(--cream)}
.fn-page{display:none}
.fn-page.active{display:block}
.fn-page-header{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:32px;padding-bottom:20px;border-bottom:1px solid var(--border)}
.fn-page-title{font-family:'Cormorant Garamond',serif;font-size:32px;font-weight:500;color:var(--teal-dark);letter-spacing:1px;margin-bottom:6px}
.fn-page-sub{font-size:13px;color:var(--slate-light);font-family:'DM Mono',monospace;letter-spacing:1px}

/* KPI cards */
.fn-kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:24px}
.fn-kpi{background:white;border:1px solid var(--border);border-radius:4px;padding:22px 24px;position:relative;overflow:hidden;box-shadow:var(--shadow)}
.fn-kpi::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--teal),var(--gold))}
.fn-kpi-icon{width:34px;height:34px;border-radius:3px;display:flex;align-items:center;justify-content:center;font-size:15px;margin-bottom:12px}
.fn-kpi-icon.indigo{background:var(--teal-pale);color:var(--teal)}
.fn-kpi-icon.green{background:rgba(46,204,113,0.1);color:#27ae60}
.fn-kpi-icon.amber{background:var(--gold-pale);color:var(--gold)}
.fn-kpi-icon.red{background:rgba(231,76,60,0.08);color:#e74c3c}
.fn-kpi-icon.slate{background:var(--teal-pale);color:var(--slate-light)}
.fn-kpi-num{font-size:32px;font-weight:500;color:var(--teal-dark);line-height:1;font-family:'DM Mono',monospace}
.fn-kpi-label{font-size:11px;color:var(--slate-light);margin-top:6px;font-family:'DM Mono',monospace;letter-spacing:1px;text-transform:uppercase}
.fn-kpi-badge{display:inline-flex;align-items:center;gap:3px;font-size:10px;font-family:'DM Mono',monospace;padding:2px 8px;border-radius:2px;margin-top:6px;letter-spacing:1px}
.fn-kpi-badge.up{background:rgba(46,204,113,0.1);color:#27ae60}
.fn-kpi-badge.new{background:var(--teal-pale);color:var(--teal)}
.fn-kpi-badge.zero{background:var(--teal-pale);color:var(--slate-light)}

/* Cards */
.fn-card{background:white;border:1px solid var(--border);border-radius:4px;overflow:hidden;margin-bottom:24px;box-shadow:var(--shadow)}
.fn-card-header{padding:20px 28px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.fn-card-title{font-family:'Cormorant Garamond',serif;font-size:18px;font-weight:500;color:var(--teal-dark)}
.fn-card-count{font-size:11px;color:var(--slate-light);font-family:'DM Mono',monospace;letter-spacing:1px}
.fn-card-body{padding:0}

/* Table */
.fn-table{width:100%;border-collapse:collapse}
.fn-table th{text-align:left;font-size:10px;font-family:'DM Mono',monospace;letter-spacing:2px;text-transform:uppercase;color:var(--slate-light);padding:12px 24px;border-bottom:2px solid var(--border);background:var(--cream)}
.fn-table td{padding:14px 24px;border-bottom:1px solid var(--border);font-size:13px;color:var(--slate);vertical-align:middle}
.fn-table tr:last-child td{border-bottom:none}
.fn-table tbody tr:hover td{background:var(--teal-pale)}
.fn-client-cell{display:flex;align-items:center;gap:12px}
.fn-avatar{width:32px;height:32px;border-radius:3px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:#fff;flex-shrink:0;letter-spacing:0.5px;font-family:'DM Mono',monospace}
.fn-client-name{font-weight:600;color:var(--teal-dark);font-size:13px;font-family:'Noto Serif TC',serif}
.fn-client-slug{font-size:11px;color:var(--slate-light);font-family:'DM Mono',monospace;margin-top:2px;letter-spacing:1px}

/* Badges */
.fn-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:2px;font-size:10px;font-family:'DM Mono',monospace;letter-spacing:1px}
.fn-badge::before{content:'';width:5px;height:5px;border-radius:50%;flex-shrink:0}
.fn-badge.active{background:rgba(46,204,113,0.1);color:#27ae60}.fn-badge.active::before{background:#2ecc71}
.fn-badge.suspended{background:rgba(231,76,60,0.08);color:#e74c3c}.fn-badge.suspended::before{background:#e74c3c}

/* Toolbar */
.fn-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px;flex-wrap:wrap}
.fn-search-wrap{position:relative;flex:1;max-width:280px}
.fn-search-wrap i{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--slate-light);font-size:13px;pointer-events:none}
.fn-search{width:100%;padding:9px 10px 9px 32px;border:1px solid var(--border);border-radius:2px;font-size:13px;outline:none;background:#fff;transition:border 0.2s;color:var(--slate);font-family:'Noto Serif TC',serif}
.fn-search:focus{border-color:var(--teal);box-shadow:0 0 0 3px rgba(74,124,142,0.1)}
.fn-filter-tabs{display:flex;gap:2px;background:var(--teal-pale);border-radius:2px;padding:3px}
.fn-filter-tab{padding:5px 14px;border-radius:2px;border:none;font-size:11px;font-family:'DM Mono',monospace;letter-spacing:1px;cursor:pointer;transition:all 0.15s;color:var(--slate-light);background:transparent}
.fn-filter-tab.active{background:#fff;color:var(--teal-dark);font-weight:600;box-shadow:0 1px 4px rgba(44,90,107,0.12)}
.fn-toolbar-right{display:flex;align-items:center;gap:8px}

/* Buttons */
.fn-btn-primary{display:inline-flex;align-items:center;gap:6px;padding:10px 20px;background:linear-gradient(135deg,var(--teal),var(--teal-light));border:none;border-radius:2px;color:#fff;font-size:13px;font-family:'Noto Serif TC',serif;cursor:pointer;transition:all 0.2s;white-space:nowrap;letter-spacing:1px}
.fn-btn-primary:hover{background:linear-gradient(135deg,var(--teal-dark),var(--teal));box-shadow:var(--shadow)}
.fn-btn-primary:disabled{opacity:0.5;cursor:not-allowed}
.fn-btn-secondary{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;background:#fff;border:1px solid var(--border);border-radius:2px;color:var(--slate-mid);font-size:12px;font-family:'DM Mono',monospace;letter-spacing:1px;cursor:pointer;transition:all 0.15s}
.fn-btn-secondary:hover{border-color:var(--teal);color:var(--teal-dark)}
.fn-btn-danger{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;background:#fff;border:1px solid rgba(231,76,60,0.3);border-radius:2px;color:#e74c3c;font-size:12px;font-family:'DM Mono',monospace;letter-spacing:1px;cursor:pointer;transition:all 0.15s}
.fn-btn-danger:hover{background:rgba(231,76,60,0.05);border-color:#e74c3c}
.fn-icon-btn{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border-radius:2px;border:1px solid var(--border);background:#fff;color:var(--slate-mid);cursor:pointer;font-size:13px;transition:all 0.15s}
.fn-icon-btn:hover{border-color:var(--teal);color:var(--teal)}

/* Empty state */
.fn-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--slate-light);text-align:center}
.fn-empty-icon{font-size:36px;margin-bottom:12px;opacity:0.3}
.fn-empty-title{font-family:'Cormorant Garamond',serif;font-size:18px;color:var(--slate-mid);margin-bottom:6px}
.fn-empty-sub{font-size:12px;font-family:'DM Mono',monospace;letter-spacing:1px}

/* Modal */
.fn-modal-overlay{position:fixed;inset:0;background:rgba(44,62,80,0.6);display:flex;align-items:center;justify-content:center;z-index:1000;backdrop-filter:blur(4px);animation:fnFadeIn 0.15s ease}
@keyframes fnFadeIn{from{opacity:0}to{opacity:1}}
.fn-modal{background:#fff;border-radius:4px;width:560px;max-width:calc(100vw - 32px);box-shadow:var(--shadow-lg);animation:fnSlideUp 0.2s ease}
@keyframes fnSlideUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
.fn-modal-header{padding:28px 28px 0;display:flex;align-items:flex-start;justify-content:space-between;border-bottom:1px solid var(--border);padding-bottom:16px}
.fn-modal-title{font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:500;color:var(--teal-dark)}
.fn-modal-sub{font-size:12px;color:var(--slate-light);margin-top:3px;font-family:'DM Mono',monospace;letter-spacing:1px}
.fn-modal-close{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:2px;border:none;background:none;color:var(--slate-light);font-size:18px;cursor:pointer;transition:all 0.15s;flex-shrink:0;line-height:1}
.fn-modal-close:hover{background:var(--teal-pale);color:var(--teal-dark)}
.fn-modal-body{padding:24px 28px}
.fn-modal-footer{padding:16px 28px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:10px}
.fn-modal-2col{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}
.fn-modal-divider{grid-column:1/-1;border:none;border-top:1px solid var(--border);margin:12px 0 16px}
.fn-modal-section-label{grid-column:1/-1;font-family:'DM Mono',monospace;font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--slate-light);margin-bottom:8px}
.fn-form-group{margin-bottom:16px}
.fn-form-group label{display:block;font-size:11px;font-family:'DM Mono',monospace;letter-spacing:1px;text-transform:uppercase;color:var(--slate-mid);margin-bottom:7px}
.fn-input{width:100%;padding:10px 14px;border:1px solid var(--border);border-radius:2px;font-size:13px;outline:none;transition:border 0.2s;color:var(--slate);background:#fff;font-family:'Noto Serif TC',serif}
.fn-input:focus{border-color:var(--teal);box-shadow:0 0 0 3px rgba(74,124,142,0.1)}
.fn-input:disabled{background:var(--cream);color:var(--slate-light);cursor:not-allowed}
.fn-input.error{border-color:var(--danger);box-shadow:0 0 0 3px rgba(231,76,60,0.1)}
.fn-input-hint{font-size:11px;color:var(--slate-light);margin-top:4px;display:block;font-family:'DM Mono',monospace;letter-spacing:0.5px}
.fn-input-error{font-size:11px;color:var(--danger);margin-top:4px;display:none;font-family:'DM Mono',monospace}
.fn-input-error.show{display:block}

/* Confirm modal */
.fn-confirm-modal{width:420px}
.fn-confirm-icon{width:44px;height:44px;border-radius:3px;display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:14px}
.fn-confirm-icon.danger{background:rgba(231,76,60,0.08);color:#e74c3c}
.fn-confirm-icon.warning{background:var(--gold-pale);color:var(--gold)}
.fn-confirm-message{font-size:13px;color:var(--slate-mid);line-height:1.7;margin-top:6px;font-family:'Noto Serif TC',serif}

/* Drawer */
.fn-drawer-overlay{position:fixed;inset:0;background:rgba(44,62,80,0.4);z-index:500;backdrop-filter:blur(2px);animation:fnFadeIn 0.15s ease}
.fn-drawer{position:fixed;top:0;right:0;bottom:0;width:420px;background:#fff;box-shadow:-8px 0 40px rgba(44,90,107,0.15);z-index:501;display:flex;flex-direction:column;animation:fnDrawerIn 0.25s ease}
@keyframes fnDrawerIn{from{transform:translateX(100%)}to{transform:translateX(0)}}
.fn-drawer-header{padding:24px 28px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:14px;background:var(--teal-dark)}
.fn-drawer-avatar{width:40px;height:40px;border-radius:3px;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;color:#fff;flex-shrink:0;font-family:'DM Mono',monospace;border:1px solid rgba(255,255,255,0.2)}
.fn-drawer-title{font-family:'Cormorant Garamond',serif;font-size:18px;font-weight:500;color:#fff}
.fn-drawer-slug{font-size:11px;color:rgba(201,168,76,0.7);font-family:'DM Mono',monospace;margin-top:2px;letter-spacing:1px}
.fn-drawer-close{margin-left:auto;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:2px;border:1px solid rgba(255,255,255,0.2);background:transparent;color:rgba(255,255,255,0.6);font-size:17px;cursor:pointer;transition:all 0.15s;line-height:1}
.fn-drawer-close:hover{background:rgba(255,255,255,0.1);color:#fff}
.fn-drawer-body{flex:1;padding:24px 28px;overflow-y:auto}
.fn-drawer-footer{padding:16px 28px;border-top:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;gap:8px}
.fn-drawer-section{margin-bottom:24px}
.fn-drawer-section-title{font-family:'DM Mono',monospace;font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--slate-light);margin-bottom:14px}
.fn-detail-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--border)}
.fn-detail-row:last-child{border-bottom:none}
.fn-detail-key{font-size:12px;color:var(--slate-light);font-family:'DM Mono',monospace;letter-spacing:1px}
.fn-detail-val{font-size:12px;color:var(--slate);font-family:'DM Mono',monospace}

/* Loading spinner */
.fn-spin{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,0.4);border-top-color:#fff;border-radius:50%;animation:spin 0.6s linear infinite;vertical-align:middle;margin-right:4px}

/* Recent client rows */
.fn-client-row{display:flex;align-items:center;gap:14px;padding:14px 0;border-bottom:1px solid var(--border)}
.fn-client-row:last-child{border-bottom:none}
.fn-client-row-info{flex:1;min-width:0}
.fn-client-row-name{font-size:13px;font-weight:600;color:var(--teal-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:'Noto Serif TC',serif}
.fn-client-row-meta{font-size:11px;color:var(--slate-light);font-family:'DM Mono',monospace;margin-top:2px;letter-spacing:0.5px}
.fn-client-row-date{font-size:11px;color:var(--slate-light);font-family:'DM Mono',monospace;flex-shrink:0}
