@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&family=Noto+Sans+JP:wght@400;500;700&display=swap";:root{--bg-primary: #0a0a0f;--bg-secondary: #12121a;--bg-tertiary: #1a1a24;--text-primary: #e0e0e0;--text-secondary: #9e9e9e;--text-muted: #616161;--border-color: #2a2a3a;--signal-strong-buy: #00e676;--signal-buy: #4fc3f7;--signal-wait: #ffca28;--signal-sell: #ef5350;--signal-insufficient: #757575;--accent-glow: rgba(0, 230, 118, .15);--font-display: "JetBrains Mono", monospace;--font-body: "Noto Sans JP", sans-serif;--space-xs: .25rem;--space-sm: .5rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2rem;--space-2xl: 3rem;--transition-fast: .15s ease;--transition-normal: .25s ease}*{margin:0;padding:0;box-sizing:border-box}html{font-size:16px}body{font-family:var(--font-body);background-color:var(--bg-primary);color:var(--text-primary);line-height:1.6;min-height:100vh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#root{min-height:100vh}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-secondary)}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}::selection{background:var(--signal-strong-buy);color:var(--bg-primary)}.dashboard{min-height:100vh;padding:var(--space-xl);background:radial-gradient(ellipse at top left,rgba(0,230,118,.03) 0%,transparent 50%),radial-gradient(ellipse at bottom right,rgba(79,195,247,.03) 0%,transparent 50%),var(--bg-primary)}.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-lg);padding-bottom:var(--space-sm);border-bottom:1px solid var(--border-color);flex-wrap:wrap;gap:var(--space-md)}.header__left-group{display:flex;align-items:center;gap:var(--space-xl);flex-wrap:wrap}.header__title{font-family:var(--font-display);font-size:1.5rem;font-weight:700;letter-spacing:-.02em;margin-bottom:2px;white-space:nowrap}.header__title-accent{color:var(--signal-strong-buy)}.header__subtitle{font-size:.8rem;color:var(--text-secondary)}.header__perf{display:flex;align-items:center;gap:12px}.perf-card{background:#ffffff08;border:1px solid var(--border-color);border-radius:8px;padding:6px 12px;display:flex;align-items:center;gap:12px;box-shadow:0 4px 15px #0000001a}.perf-card__label{font-size:.65rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;display:flex;align-items:center;white-space:nowrap}.perf-card__value{font-size:1.1rem;font-weight:800;font-family:var(--font-display)}.perf-card__value.plus{color:var(--signal-strong-buy)}.perf-card__value.minus{color:var(--signal-sell)}.perf-card__holdings{display:flex;gap:4px;margin-top:0}.perf-card__ticker{font-size:.6rem;background:var(--bg-tertiary);padding:1px 5px;border-radius:3px;color:var(--text-secondary);font-weight:600}.perf-card__ticker.sold{opacity:.6;text-decoration:line-through}.header__meta{display:flex;gap:var(--space-lg);margin-top:var(--space-md);font-family:var(--font-display);font-size:.75rem;color:var(--text-muted)}.header__meta-item{display:flex;align-items:center;gap:var(--space-xs)}.header__meta-dot{width:6px;height:6px;border-radius:50%;background:var(--signal-strong-buy);animation:pulse 2s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.header__filter{display:flex;align-items:center;gap:var(--space-sm)}.filter-label{font-family:var(--font-display);font-size:.75rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.filter-select{font-family:var(--font-display);font-size:.875rem;padding:4px 8px;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:4px;color:var(--text-primary);cursor:pointer;transition:border-color var(--transition-fast)}.filter-select:hover{border-color:var(--signal-buy)}.filter-select:focus{outline:none;border-color:var(--signal-strong-buy)}.table-container{overflow-x:auto;border-radius:8px;border:1px solid var(--border-color);background:var(--bg-secondary)}.signal-table{width:100%;border-collapse:collapse;font-family:var(--font-body)}.signal-table thead{background:var(--bg-tertiary);border-bottom:1px solid var(--border-color)}.signal-table th{font-family:var(--font-display);font-size:.625rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--text-muted);padding:var(--space-md) var(--space-lg);text-align:left;white-space:nowrap}.help-tooltip{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;background-color:#71717a;color:#fff;border-radius:50%;font-size:10px;font-weight:700;margin-left:12px;cursor:default;opacity:.8;vertical-align:middle;transform:translateY(-1px);transition:all .2s ease}.help-tooltip:hover{opacity:1;background-color:#a1a1aa;transform:translateY(-1px) scale(1.1)}.favorite-btn{background:none;border:none;cursor:pointer;font-size:1.2rem;padding:0;color:var(--text-muted);opacity:.3;transition:all .2s ease;line-height:1}.favorite-btn:hover{opacity:.7;transform:scale(1.2)}.favorite-btn.active{opacity:1;color:gold;text-shadow:0 0 10px rgba(255,215,0,.5)}.signal-table th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none;transition:color var(--transition-fast)}.signal-table th.sortable:hover{color:var(--signal-buy)}.signal-table tbody tr{border-bottom:1px solid var(--border-color);transition:background var(--transition-fast);animation:fadeInRow .4s ease forwards;opacity:0}.signal-table tbody tr.clickable-row{cursor:pointer}.signal-table tbody tr.clickable-row:hover{background:var(--bg-tertiary)}.signal-table tbody tr:last-child{border-bottom:none}.signal-table tbody tr:hover{background:var(--bg-tertiary)}@keyframes fadeInRow{0%{opacity:0;transform:translate(-10px)}to{opacity:1;transform:translate(0)}}.signal-table td{padding:var(--space-md) var(--space-lg);vertical-align:middle}.cell-fav{width:40px;text-align:center;cursor:pointer;font-size:1.2rem;color:var(--text-muted);transition:all .2s ease;-webkit-user-select:none;user-select:none}.cell-fav:hover{transform:scale(1.2);color:gold}.ticker-cell{width:80px}.ticker-symbol{font-family:var(--font-display);font-size:1rem;font-weight:700;letter-spacing:.05em;color:var(--text-primary)}.name-cell{font-size:.875rem;color:var(--text-secondary);min-width:160px}.signal-badge{display:inline-flex;align-items:center;gap:var(--space-xs);font-family:var(--font-display);font-size:.6875rem;font-weight:700;padding:var(--space-xs) var(--space-sm);border-radius:4px;letter-spacing:.03em;white-space:nowrap}.signal--strong-buy{background:#00e67626;color:var(--signal-strong-buy);border:1px solid rgba(0,230,118,.3)}.signal--buy{background:#4fc3f726;color:var(--signal-buy);border:1px solid rgba(79,195,247,.3)}.signal--wait{background:#ffca2826;color:var(--signal-wait);border:1px solid rgba(255,202,40,.3)}.signal--sell{background:#ef535026;color:var(--signal-sell);border:1px solid rgba(239,83,80,.3)}.signal--insufficient{background:#75757526;color:var(--signal-insufficient);border:1px solid rgba(117,117,117,.3)}.price-cell{font-family:var(--font-display);font-size:.9375rem;font-weight:500;color:var(--text-primary)}.indicator-cell{font-family:var(--font-display);font-size:.8125rem;color:var(--text-secondary)}.indicator--positive{color:var(--signal-strong-buy)}.indicator--negative{color:var(--signal-sell)}.date-cell{font-family:var(--font-display);font-size:.75rem;color:var(--text-muted)}.loading{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:var(--space-md)}.loading__spinner{width:40px;height:40px;border:3px solid var(--border-color);border-top-color:var(--signal-strong-buy);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading__text{font-family:var(--font-display);font-size:.875rem;color:var(--text-muted)}.error{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:var(--space-md);text-align:center}.error__icon{font-size:3rem}.error__message{color:var(--signal-sell);font-family:var(--font-display)}.error__retry{font-family:var(--font-display);font-size:.875rem;padding:var(--space-sm) var(--space-lg);background:transparent;border:1px solid var(--signal-buy);color:var(--signal-buy);border-radius:4px;cursor:pointer;transition:all var(--transition-fast)}.error__retry:hover{background:var(--signal-buy);color:var(--bg-primary)}.cell-content{display:flex;align-items:center;gap:var(--space-sm)}.cell-value{font-family:var(--font-display);font-weight:500}.text-positive{color:var(--signal-strong-buy)}.text-negative{color:var(--signal-sell)}.text-neutral{color:var(--text-muted)}.footer{margin-top:var(--space-2xl);padding-top:var(--space-lg);border-top:1px solid var(--border-color);text-align:center;font-size:.75rem;color:var(--text-muted)}@media(max-width:768px){.dashboard{padding:var(--space-md)}.header__title{font-size:1.25rem}.header__meta{flex-wrap:wrap;gap:var(--space-sm)}.filter-bar{flex-wrap:wrap}.signal-table th,.signal-table td{padding:var(--space-sm);font-size:.75rem}.ticker-symbol{font-size:.875rem}.name-cell{min-width:100px;font-size:.75rem}.signal-badge{font-size:.5625rem;padding:2px 6px}}.chart-modal{position:fixed;inset:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.chart-modal__content{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:8px;width:90%;max-width:800px;padding:var(--space-lg);animation:slideUp .3s ease}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.chart-modal__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-lg);padding-bottom:var(--space-md);border-bottom:1px solid var(--border-color)}.chart-modal__header h2{font-family:var(--font-display);font-size:1.25rem;font-weight:600;color:var(--text-primary)}.chart-modal__close{background:transparent;border:none;color:var(--text-muted);font-size:1.5rem;cursor:pointer;padding:var(--space-xs);transition:color var(--transition-fast)}.chart-modal__close:hover{color:var(--text-primary)}.chart-container{background:var(--bg-tertiary);border-radius:4px;padding:var(--space-md)}.chart-loading,.chart-error{display:flex;align-items:center;justify-content:center;height:200px;color:var(--text-muted);font-family:var(--font-display)}.chart-error{color:var(--signal-sell)}.market-risk-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;background:linear-gradient(135deg,#1a1a2e,#16213e);border-radius:8px;padding:12px 20px;margin-bottom:16px;border:1px solid rgba(255,255,255,.1);font-size:.875rem}.market-risk-bar.safe{border-color:#22c55e4d}.market-risk-bar.caution{border-color:#fbbf244d}.market-risk-bar.danger{border-color:#ef44444d}.market-risk-bar.loading,.market-risk-bar.error{justify-content:center;color:#94a3b8}.risk-section{display:flex;align-items:center;gap:12px}.risk-badge{padding:4px 12px;border-radius:12px;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.risk-badge.safe{background:#22c55e33;color:#22c55e}.risk-badge.caution{background:#fbbf2433;color:#fbbf24}.risk-badge.danger{background:#ef444433;color:#ef4444}.cash-label{color:#94a3b8}.cash-label strong{color:#f1f5f9}.signals-section{display:flex;align-items:center;gap:12px;color:#94a3b8;margin-left:auto}.separator{color:#fff3}.signal-item{white-space:nowrap}.signal-item.safe{color:#22c55e}.signal-item.danger{color:#ef4444}.date-section{display:flex;flex-direction:column;align-items:flex-end;gap:4px}.update-date{color:#64748b;font-size:.7rem}.perf-section{display:flex;align-items:center;gap:6px;font-size:.8rem;background:#ffffff0d;padding:4px 10px;border-radius:4px}.perf-label{color:#94a3b8}.perf-value{font-weight:700}.perf-value.plus{color:#10b981}.perf-value.minus{color:#ef4444}.perf-holdings{color:#64748b;font-size:.75rem}.help-tooltip{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;background-color:#fff3;color:#f1f5f9;border-radius:50%;font-size:9px;font-weight:700;margin-left:6px;cursor:default;vertical-align:middle;transition:all .2s ease}.help-tooltip:hover{background-color:#fff6;transform:scale(1.1)}@media(max-width:900px){.market-risk-bar{flex-wrap:wrap;gap:12px}.signals-section{flex-wrap:wrap}}
