cryman38 commited on
Commit
fd37a06
ยท
verified ยท
1 Parent(s): a3c4da0

Upload 18 files

Browse files
interface/retirement_planning_interface.py CHANGED
@@ -3,34 +3,34 @@ from modules.retirement_planning import retirement_planning
3
 
4
  # Define examples for retirement planning
5
  examples = [
6
- [38, 55, 85, 2000000, 3.0, 10000000, 500000, 0, True, 8, 8, 3.3, 3.3]
7
  ]
8
 
9
  # Define the input components
10
- title = gr.Markdown("<h2 style='margin: 5px'>Retirement Planning</h2>")
11
- title_profile = gr.Markdown("<h3 class='h3_title'>PROFILE</h3>")
12
  current_age = gr.Slider(label="Current Age (15-60 Years)", value=38, minimum=15, maximum=60, step=1)
13
  retirement_age = gr.Slider(label="Retirement Age (Upto 70 Years)", value=55, minimum=15, maximum=70, step=1)
14
  life_expectancy = gr.Slider(label="Life Expectancy (Upto 100 Years)", value=80, minimum=30, maximum=100, step=1)
15
- title_savings = gr.Markdown("<h3 class='h3_title'>SAVINGS</h3>")
16
- monthly_income_required = gr.Number(label="Monthly Income Required (CPP)", value=2000000)
17
  inflation_rate = gr.Number(label="Inflation Rate (%)", value=3)
18
- current_investment = gr.Number(label="Current Investment", value=10000000)
19
- monthly_investment = gr.Number(label="Monthly Investment", value=1000000)
20
- annual_increase_in_monthly_investment = gr.Number(label="Annual Increase in Monthly Investment", value=0) # ์ถ”๊ฐ€๋œ ์ž…๋ ฅ
21
  reinvest_dividends = gr.Checkbox(label="Reinvest Dividends", value=True)
22
- title_growth = gr.Markdown("<h3 class='h3_title'>GROWTH</h3>")
23
- pre_retirement_roi = gr.Number(label="Return On Investment (Pre-retirement) (%)", value=8)
24
- post_retirement_roi = gr.Number(label="Return On Investment (Post-retirement) (%)", value=8)
25
  pre_retirement_dividend_yield = gr.Number(label="Dividend Yield (Pre-retirement) (%)", value=3.3)
26
  post_retirement_dividend_yield = gr.Number(label="Dividend Yield (Post-retirement) (%)", value=3.3)
27
 
28
- input = [current_age, retirement_age, life_expectancy, monthly_income_required, inflation_rate, current_investment, monthly_investment, annual_increase_in_monthly_investment, reinvest_dividends, pre_retirement_roi, post_retirement_roi, pre_retirement_dividend_yield, post_retirement_dividend_yield]
29
  output = gr.HTML()
30
- component_rows = [
31
- [current_age, retirement_age, life_expectancy],[monthly_income_required, inflation_rate],
32
- [current_investment, monthly_investment, annual_increase_in_monthly_investment], [reinvest_dividends],
33
- [pre_retirement_roi, post_retirement_roi], [pre_retirement_dividend_yield, post_retirement_dividend_yield]
34
  ]
35
 
36
  # Define the update function
 
3
 
4
  # Define examples for retirement planning
5
  examples = [
6
+ [38, 55, 85, 2000000, 3.0, 10000000, 1500000, 0, True, 8, 8, 3.3, 3.3]
7
  ]
8
 
9
  # Define the input components
10
+ title = gr.Markdown("<h2 style='margin: 5px'>Dividend-Based Retirement Planning Calculator</h2>")
11
+ title_1 = gr.Markdown("<h3 class='h3_title'>Profile</h3>")
12
  current_age = gr.Slider(label="Current Age (15-60 Years)", value=38, minimum=15, maximum=60, step=1)
13
  retirement_age = gr.Slider(label="Retirement Age (Upto 70 Years)", value=55, minimum=15, maximum=70, step=1)
14
  life_expectancy = gr.Slider(label="Life Expectancy (Upto 100 Years)", value=80, minimum=30, maximum=100, step=1)
15
+ title_2 = gr.Markdown("<h3 class='h3_title'>Contribution</h3>")
16
+ monthly_income_required = gr.Number(label="Current Monthly Expense", value=2000000)
17
  inflation_rate = gr.Number(label="Inflation Rate (%)", value=3)
18
+ initial_investment = gr.Number(label="Initial Investment", value=10000000)
19
+ monthly_contribution = gr.Number(label="Monthly Contribution", value=1000000)
20
+ annual_increase_in_monthly_contribution = gr.Number(label="Annual Increase in Monthly Contribution", value=0) # ์ถ”๊ฐ€๋œ ์ž…๋ ฅ
21
  reinvest_dividends = gr.Checkbox(label="Reinvest Dividends", value=True)
22
+ title_3 = gr.Markdown("<h3 class='h3_title'>Performance</h3>")
23
+ pre_retirement_dividend_growth = gr.Number(label="Dividend Growth (Pre-retirement) (%)", value=8)
24
+ post_retirement_dividend_growth = gr.Number(label="Dividend Growth (Post-retirement) (%)", value=8)
25
  pre_retirement_dividend_yield = gr.Number(label="Dividend Yield (Pre-retirement) (%)", value=3.3)
26
  post_retirement_dividend_yield = gr.Number(label="Dividend Yield (Post-retirement) (%)", value=3.3)
27
 
28
+ input = [current_age, retirement_age, life_expectancy, monthly_income_required, inflation_rate, initial_investment, monthly_contribution, annual_increase_in_monthly_contribution, reinvest_dividends, pre_retirement_dividend_growth, post_retirement_dividend_growth, pre_retirement_dividend_yield, post_retirement_dividend_yield]
29
  output = gr.HTML()
30
+ component_rows = [title,
31
+ title_1, [current_age, retirement_age, life_expectancy],[monthly_income_required, inflation_rate],
32
+ title_2, [initial_investment, monthly_contribution, annual_increase_in_monthly_contribution], [reinvest_dividends],
33
+ title_3, [pre_retirement_dividend_growth, post_retirement_dividend_growth], [pre_retirement_dividend_yield, post_retirement_dividend_yield]
34
  ]
35
 
36
  # Define the update function
modules/rebalancing.py CHANGED
@@ -199,22 +199,22 @@ def generate_rebalancing_analysis(portfolio, target_ratios, total_value, main_cu
199
  <thead>
200
  <tr>
201
  <th colspan="1"></th>
202
- <th colspan="2" class="header-bg-before">Your Current Portfolio (Before Trades)</th>
203
  <th colspan="1"></th>
204
  <th colspan="4" style='text-align: center'>Trades to Re-Balance Your Portfolio</th>
205
- <th colspan="2" class="header-bg-after">Your Adjusted Portfolio (After Trades)</th>
206
  </tr>
207
  <tr>
208
  <th>Stock Code</th>
209
- <th class="header-bg-before">Total Value - {main_currency} {currency_symbol}</th>
210
- <th class="header-bg-before">% Asset Allocation</th>
211
  <th style='text-align: center !important;'>Your Target Asset Allocation %</th>
212
  <th>Buy or Sell?</th>
213
  <th>Trade Amount - {main_currency} {currency_symbol}</th>
214
  <th>Current Price per Share - {main_currency} {currency_symbol}</th>
215
  <th>Estimated # of Shares to Buy or Sell</th>
216
- <th class="header-bg-after">Total Value - {main_currency} {currency_symbol}</th>
217
- <th class="header-bg-after">% Asset Allocation</th>
218
  </tr>
219
  <tr style="font-weight: bold;">
220
  <td>Total</td>
 
199
  <thead>
200
  <tr>
201
  <th colspan="1"></th>
202
+ <th colspan="2" class="table-header-bg-before">Your Current Portfolio (Before Trades)</th>
203
  <th colspan="1"></th>
204
  <th colspan="4" style='text-align: center'>Trades to Re-Balance Your Portfolio</th>
205
+ <th colspan="2" class="table-header-bg-after">Your Adjusted Portfolio (After Trades)</th>
206
  </tr>
207
  <tr>
208
  <th>Stock Code</th>
209
+ <th class="table-header-bg-before">Total Value - {main_currency} {currency_symbol}</th>
210
+ <th class="table-header-bg-before">% Asset Allocation</th>
211
  <th style='text-align: center !important;'>Your Target Asset Allocation %</th>
212
  <th>Buy or Sell?</th>
213
  <th>Trade Amount - {main_currency} {currency_symbol}</th>
214
  <th>Current Price per Share - {main_currency} {currency_symbol}</th>
215
  <th>Estimated # of Shares to Buy or Sell</th>
216
+ <th class="table-header-bg-after">Total Value - {main_currency} {currency_symbol}</th>
217
+ <th class="table-header-bg-after">% Asset Allocation</th>
218
  </tr>
219
  <tr style="font-weight: bold;">
220
  <td>Total</td>
modules/retirement_planning.py CHANGED
@@ -69,17 +69,17 @@ def create_retirement_table(post_retirement_investments, monthly_income_required
69
  <tr>
70
  <th colspan="1"></th>
71
  <th colspan="1"></th>
72
- <th colspan="2" class="header-bg-required">Income Required</th>
73
- <th colspan="2" class="header-bg-divdend">Dividend Income</th>
74
  <th colspan="1">Shortfall</th>
75
  </tr>
76
  <tr>
77
  <th>Age</th>
78
- <th>Investment</th>
79
- <th class="header-bg-required">Annual</th>
80
- <th class="header-bg-required">Monthly <br>(CPP {monthly_income_required:,.0f})</th>
81
- <th class="header-bg-divdend">Annual</th>
82
- <th class="header-bg-divdend">Monthly</th>
83
  <th>{format_value(additional_cash_total)}</th>
84
  </tr>
85
  </thead>
@@ -98,7 +98,7 @@ def create_csv_file(post_retirement_investments, monthly_income_required):
98
  'Age',
99
  'Investment',
100
  'Annual Income Required',
101
- f'Monthly Income Required (CPP {monthly_income_required:,.0f})',
102
  'Annual Dividend Income',
103
  'Monthly Dividend Income',
104
  'Shortfall'
@@ -125,23 +125,23 @@ def retirement_planning(
125
  life_expectancy=None,
126
  monthly_income_required=None,
127
  inflation_rate=None,
128
- current_investment=None,
129
- monthly_investment=None,
130
- annual_increase_in_monthly_investment=None,
131
  reinvest_dividends=None,
132
- pre_retirement_roi=None,
133
- post_retirement_roi=None,
134
  pre_retirement_dividend_yield=None,
135
  post_retirement_dividend_yield=None
136
  ):
137
  # NoneType์ผ ๋•Œ 0์œผ๋กœ ์ฒ˜๋ฆฌ
138
  current_age = current_age if current_age is not None else 0
139
  retirement_age = retirement_age if retirement_age is not None else 0
140
- current_investment = current_investment if current_investment is not None else 0
141
- monthly_investment = monthly_investment if monthly_investment is not None else 0
142
- annual_increase_in_monthly_investment = annual_increase_in_monthly_investment if annual_increase_in_monthly_investment is not None else 0
143
- pre_retirement_roi = pre_retirement_roi if pre_retirement_roi is not None else 0
144
- post_retirement_roi = post_retirement_roi if post_retirement_roi is not None else 0
145
  pre_retirement_dividend_yield = pre_retirement_dividend_yield if pre_retirement_dividend_yield is not None else 0
146
  post_retirement_dividend_yield = post_retirement_dividend_yield if post_retirement_dividend_yield is not None else 0
147
  life_expectancy = life_expectancy if life_expectancy is not None else 0
@@ -159,21 +159,21 @@ def retirement_planning(
159
  post_retirement_years = life_expectancy - retirement_age
160
 
161
  # ํ˜„์žฌ ํˆฌ์ž์•ก์œผ๋กœ ์ดˆ๊ธฐ ํˆฌ์ž ์„ค์ •
162
- total_investment = current_investment
163
 
164
  # ์€ํ‡ด ์ „ ์›”๊ฐ„ ์ด์ž์œจ ๊ณ„์‚ฐ
165
- monthly_return_pre = (1 + pre_retirement_roi / 100) ** (1 / 12) - 1
166
 
167
  # ์€ํ‡ด ์‹œ์ ์˜ ํˆฌ์ž ๊ณ„์‚ฐ
168
  for year in range(years_to_retirement):
169
  for month in range(12):
170
  # ์›”๊ฐ„ ํˆฌ์ž์•ก๊ณผ ์ด์ž์œจ์„ ์ ์šฉํ•˜์—ฌ ์ด ํˆฌ์ž์•ก ๊ฐฑ์‹ 
171
- total_investment = (total_investment + monthly_investment) * (1 + monthly_return_pre)
172
  # ๋ฐฐ๋‹น๊ธˆ์„ ์žฌํˆฌ์žํ•  ๊ฒฝ์šฐ ๋ฐฐ๋‹น๊ธˆ ์ถ”๊ฐ€
173
  if reinvest_dividends:
174
  total_investment += total_investment * (pre_retirement_dividend_yield / 100 / 12)
175
  # ์—ฐ๊ฐ„ ์ฆ๊ฐ€์•ก์„ ์›” ํˆฌ์ž์•ก์— ์ถ”๊ฐ€
176
- monthly_investment += annual_increase_in_monthly_investment
177
 
178
  # ์€ํ‡ด ์‹œ์ž‘ ์‹œ์ ์˜ ์ด ํˆฌ์ž์•ก๊ณผ ์—ฐ๊ฐ„ ๋ฐฐ๋‹น ์ˆ˜์ต ์ €์žฅ
179
  investment_at_retirement = total_investment
@@ -181,7 +181,7 @@ def retirement_planning(
181
  monthly_dividend_at_retirement = annual_dividend_at_retirement / 12
182
 
183
  # ์€ํ‡ด ํ›„ ์›”๊ฐ„ ์ด์ž์œจ ๊ณ„์‚ฐ
184
- monthly_return_post = (1 + post_retirement_roi / 100) ** (1 / 12) - 1
185
 
186
  # ์—ฐ๊ฐ„ ๋ฌผ๊ฐ€์ƒ์Šน๋ฅ ์„ ๋ฐ˜์˜ํ•œ ์›” ์ƒํ™œ๋น„ ๊ณ„์‚ฐ
187
  monthly_income_required_inflated = monthly_income_required
@@ -200,7 +200,7 @@ def retirement_planning(
200
  # ์€ํ‡ด ํ›„ ๊ฐ ๋…„๋„์˜ ํˆฌ์ž ๋ฐ ๋ฐฐ๋‹น ์ˆ˜์ต ๊ณ„์‚ฐ
201
  for year in range(1, post_retirement_years + 1):
202
  # ์€ํ‡ด ํ›„ ์ˆ˜์ต๋ฅ ์„ ์ ์šฉํ•˜์—ฌ ์ด ํˆฌ์ž์•ก ๊ฐฑ์‹ 
203
- total_investment *= (1 + post_retirement_roi / 100)
204
  # ์—ฐ๊ฐ„ ๋ฐฐ๋‹น ์ˆ˜์ต ๊ณ„์‚ฐ
205
  annual_dividend_income = total_investment * (post_retirement_dividend_yield / 100)
206
  # ์›”๊ฐ„ ๋ฐฐ๋‹น ์ˆ˜์ต ๊ณ„์‚ฐ
 
69
  <tr>
70
  <th colspan="1"></th>
71
  <th colspan="1"></th>
72
+ <th colspan="2" class="table-header-bg-required">Income Required</th>
73
+ <th colspan="2" class="table-header-bg-dividend">Dividend Income</th>
74
  <th colspan="1">Shortfall</th>
75
  </tr>
76
  <tr>
77
  <th>Age</th>
78
+ <th>Investment Returns</th>
79
+ <th class="table-header-bg-required">Annual</th>
80
+ <th class="table-header-bg-required">Monthly <br>(Current {monthly_income_required:,.0f})</th>
81
+ <th class="table-header-bg-dividend">Annual</th>
82
+ <th class="table-header-bg-dividend">Monthly</th>
83
  <th>{format_value(additional_cash_total)}</th>
84
  </tr>
85
  </thead>
 
98
  'Age',
99
  'Investment',
100
  'Annual Income Required',
101
+ f'Monthly Income Required (Current {monthly_income_required:,.0f})',
102
  'Annual Dividend Income',
103
  'Monthly Dividend Income',
104
  'Shortfall'
 
125
  life_expectancy=None,
126
  monthly_income_required=None,
127
  inflation_rate=None,
128
+ initial_investment=None,
129
+ monthly_contribution=None,
130
+ annual_increase_in_monthly_contribution=None,
131
  reinvest_dividends=None,
132
+ pre_retirement_dividend_growth=None,
133
+ post_retirement_dividend_growth=None,
134
  pre_retirement_dividend_yield=None,
135
  post_retirement_dividend_yield=None
136
  ):
137
  # NoneType์ผ ๋•Œ 0์œผ๋กœ ์ฒ˜๋ฆฌ
138
  current_age = current_age if current_age is not None else 0
139
  retirement_age = retirement_age if retirement_age is not None else 0
140
+ initial_investment = initial_investment if initial_investment is not None else 0
141
+ monthly_contribution = monthly_contribution if monthly_contribution is not None else 0
142
+ annual_increase_in_monthly_contribution = annual_increase_in_monthly_contribution if annual_increase_in_monthly_contribution is not None else 0
143
+ pre_retirement_dividend_growth = pre_retirement_dividend_growth if pre_retirement_dividend_growth is not None else 0
144
+ post_retirement_dividend_growth = post_retirement_dividend_growth if post_retirement_dividend_growth is not None else 0
145
  pre_retirement_dividend_yield = pre_retirement_dividend_yield if pre_retirement_dividend_yield is not None else 0
146
  post_retirement_dividend_yield = post_retirement_dividend_yield if post_retirement_dividend_yield is not None else 0
147
  life_expectancy = life_expectancy if life_expectancy is not None else 0
 
159
  post_retirement_years = life_expectancy - retirement_age
160
 
161
  # ํ˜„์žฌ ํˆฌ์ž์•ก์œผ๋กœ ์ดˆ๊ธฐ ํˆฌ์ž ์„ค์ •
162
+ total_investment = initial_investment
163
 
164
  # ์€ํ‡ด ์ „ ์›”๊ฐ„ ์ด์ž์œจ ๊ณ„์‚ฐ
165
+ monthly_return_pre = (1 + pre_retirement_dividend_growth / 100) ** (1 / 12) - 1
166
 
167
  # ์€ํ‡ด ์‹œ์ ์˜ ํˆฌ์ž ๊ณ„์‚ฐ
168
  for year in range(years_to_retirement):
169
  for month in range(12):
170
  # ์›”๊ฐ„ ํˆฌ์ž์•ก๊ณผ ์ด์ž์œจ์„ ์ ์šฉํ•˜์—ฌ ์ด ํˆฌ์ž์•ก ๊ฐฑ์‹ 
171
+ total_investment = (total_investment + monthly_contribution) * (1 + monthly_return_pre)
172
  # ๋ฐฐ๋‹น๊ธˆ์„ ์žฌํˆฌ์žํ•  ๊ฒฝ์šฐ ๋ฐฐ๋‹น๊ธˆ ์ถ”๊ฐ€
173
  if reinvest_dividends:
174
  total_investment += total_investment * (pre_retirement_dividend_yield / 100 / 12)
175
  # ์—ฐ๊ฐ„ ์ฆ๊ฐ€์•ก์„ ์›” ํˆฌ์ž์•ก์— ์ถ”๊ฐ€
176
+ monthly_contribution += annual_increase_in_monthly_contribution
177
 
178
  # ์€ํ‡ด ์‹œ์ž‘ ์‹œ์ ์˜ ์ด ํˆฌ์ž์•ก๊ณผ ์—ฐ๊ฐ„ ๋ฐฐ๋‹น ์ˆ˜์ต ์ €์žฅ
179
  investment_at_retirement = total_investment
 
181
  monthly_dividend_at_retirement = annual_dividend_at_retirement / 12
182
 
183
  # ์€ํ‡ด ํ›„ ์›”๊ฐ„ ์ด์ž์œจ ๊ณ„์‚ฐ
184
+ monthly_return_post = (1 + post_retirement_dividend_growth / 100) ** (1 / 12) - 1
185
 
186
  # ์—ฐ๊ฐ„ ๋ฌผ๊ฐ€์ƒ์Šน๋ฅ ์„ ๋ฐ˜์˜ํ•œ ์›” ์ƒํ™œ๋น„ ๊ณ„์‚ฐ
187
  monthly_income_required_inflated = monthly_income_required
 
200
  # ์€ํ‡ด ํ›„ ๊ฐ ๋…„๋„์˜ ํˆฌ์ž ๋ฐ ๋ฐฐ๋‹น ์ˆ˜์ต ๊ณ„์‚ฐ
201
  for year in range(1, post_retirement_years + 1):
202
  # ์€ํ‡ด ํ›„ ์ˆ˜์ต๋ฅ ์„ ์ ์šฉํ•˜์—ฌ ์ด ํˆฌ์ž์•ก ๊ฐฑ์‹ 
203
+ total_investment *= (1 + post_retirement_dividend_growth / 100)
204
  # ์—ฐ๊ฐ„ ๋ฐฐ๋‹น ์ˆ˜์ต ๊ณ„์‚ฐ
205
  annual_dividend_income = total_investment * (post_retirement_dividend_yield / 100)
206
  # ์›”๊ฐ„ ๋ฐฐ๋‹น ์ˆ˜์ต ๊ณ„์‚ฐ
style.css CHANGED
@@ -19,47 +19,6 @@
19
  @import url('https://fonts.googleapis.com/css2?family=Quicksand:wght@300;400;500;700&display=swap');
20
  @import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&display=swap');
21
  @import url('https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@400;600;700&display=swap');
22
- @import url('https://fonts.googleapis.com/css2?family=Paperlogy&display=swap');
23
-
24
-
25
- #col-container {
26
- margin: 0 auto;
27
- max-width: 100%;
28
- /* font-family: 'Paperlogy', 'ui-sans-serif', 'system-ui', 'sans-serif'; */
29
- /* text-transform: uppercase; */
30
-
31
- }
32
-
33
- .h3_title {
34
- padding: .75rem;
35
- font-weight: 700;
36
- border-bottom: 1px solid rgb(229, 231, 235);
37
- /* box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); */
38
- }
39
-
40
- .content {
41
- -webkit-text-size-adjust: 100%;
42
- tab-size: 4;
43
- font-size: 1.125rem;
44
- line-height: 1.75rem;
45
- box-sizing: border-box;
46
- border-width: 0;
47
- border-style: solid;
48
- border-color: #e5e7eb;
49
- margin: 0;
50
- margin-top: 1.25em;
51
- margin-bottom: 1.25em;
52
- }
53
-
54
- .code {
55
- font-family: 'IBM Plex Mono', 'ui-monospace', 'Consolas', 'monospace';
56
- }
57
-
58
- .wrap-text {
59
- word-wrap: break-word;
60
- overflow-wrap: break-word;
61
- white-space: normal;
62
- }
63
 
64
  :root {
65
  --background-color-light: #ffffff;
@@ -90,32 +49,52 @@
90
  --total-value-color-dark: #ffeb3b;
91
  }
92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  .buy-sell {
94
- /* padding: 5px 10px;
95
- border-radius: 5px; */
96
  font-weight: bold;
97
- /* display: inline-block;
98
- margin: 2px;
99
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); */
100
  }
101
 
102
  .buy {
103
- /* background-color: var(--buy-color);
104
- color: white !important; */
105
  color: var(--buy-color);
106
-
107
  }
108
 
109
  .sell {
110
- /* background-color: var(--sell-color);
111
- color: white !important; */
112
  color: var(--sell-color);
113
-
114
  }
115
 
116
  .highlight-edit {
117
  background-color: var(--highlight-edit-bg-color-light);
118
- color: var(--highlight-edit-text-color-light) !important;
119
  padding: 5px 10px;
120
  font-weight: bold;
121
  border-radius: 5px;
@@ -125,7 +104,7 @@
125
 
126
  .highlight-black {
127
  background-color: var(--highlight-black-light);
128
- color: var(--text-color-dark) !important;
129
  padding: 5px 10px;
130
  font-weight: bold;
131
  border-radius: 5px;
@@ -135,7 +114,7 @@
135
 
136
  .highlight-yellow {
137
  background-color: var(--highlight-yellow-bg-color-light);
138
- color: var(--highlight-yellow-text-color-light) !important;
139
  padding: 5px 10px;
140
  font-weight: bold;
141
  border-radius: 5px;
@@ -145,7 +124,7 @@
145
 
146
  .highlight-sky {
147
  background-color: var(--highlight-sky-bg-color-light);
148
- color: var(--highlight-sky-text-color-light) !important;
149
  padding: 5px 10px;
150
  font-weight: bold;
151
  border-radius: 5px;
@@ -153,60 +132,32 @@
153
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
154
  }
155
 
156
- @media (prefers-color-scheme: dark) {
157
- .highlight-yellow {
158
- background-color: var(--highlight-yellow-bg-color-dark);
159
- color: var(--highlight-yellow-text-color-dark) !important;
160
- }
161
-
162
- .highlight-black {
163
- background-color: var(--highlight-black-dark);
164
- color: var(--text-color-light) !important;
165
- }
166
 
167
- .highlight-sky {
168
- background-color: var(--highlight-sky-bg-color-dark);
169
- color: var(--highlight-sky-text-color-dark) !important;
170
- }
171
 
172
- .highlight-edit {
173
- background-color: var(--highlight-edit-bg-color-dark);
174
- color: var(--highlight-edit-text-color-dark) !important;
175
- }
176
 
177
- .buy-sell, .highlight-black, .highlight-yellow, .highlight-sky, .highlight-edit {
178
- box-shadow: 0 2px 4px rgba(255, 255, 255, 0.1);
179
- }
180
  }
181
 
182
- /* ๊ธฐ๋ณธ ํ…Œ์ด๋ธ” ์Šคํƒ€์ผ */
183
  .table-container {
184
  width: 100%;
185
  overflow: auto;
186
  margin-bottom: 20px;
187
  position: relative;
188
  max-height: 100%;
189
- /* box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); */
190
- }
191
-
192
- .header-bg-before {
193
- background-color: #e7f9ef !important; /* ์›ํ•˜๋Š” ์ƒ‰์ƒ์œผ๋กœ ๋ณ€๊ฒฝ */
194
- color: #000; /* ํ…์ŠคํŠธ ์ƒ‰์ƒ */
195
- }
196
-
197
- .header-bg-divdend {
198
- background-color: #89c9e6 !important;
199
- color: #000; /* ํ…์ŠคํŠธ ์ƒ‰์ƒ */
200
- }
201
-
202
- .header-bg-required {
203
- background-color: #ffca28 !important;
204
- color: #000; /* ํ…์ŠคํŠธ ์ƒ‰์ƒ */
205
- }
206
-
207
- .header-bg-after {
208
- background-color: #d9d2e9 !important;/* ์›ํ•˜๋Š” ์ƒ‰์ƒ์œผ๋กœ ๋ณ€๊ฒฝ */
209
- color: #000; /* ํ…์ŠคํŠธ ์ƒ‰์ƒ */
210
  }
211
 
212
  .table-container table {
@@ -214,14 +165,6 @@
214
  border-collapse: collapse;
215
  }
216
 
217
- .table-container td {
218
- text-align: right;
219
- }
220
-
221
- .table-container td:first-child {
222
- text-align: left;
223
- }
224
-
225
  .table-container th, .table-container td {
226
  border: 1px solid #ddd;
227
  padding: 8px;
@@ -230,7 +173,7 @@
230
 
231
  .table-container th {
232
  background-color: var(--highlight-color-light);
233
- color: var(--header-color-light); /* ๋ผ์ดํŠธ ๋ชจ๋“œ์—์„œ ํƒ€์ดํ‹€ ์ƒ‰์ƒ์„ ์„ค์ • */
234
  position: sticky;
235
  top: 0;
236
  z-index: 2;
@@ -240,44 +183,49 @@
240
  position: sticky;
241
  left: 0;
242
  z-index: 1;
243
- /* background-color: var(--highlight-color-light); */
244
  }
245
 
246
  .table-container th:first-child {
247
  position: sticky;
248
  left: 0;
249
- z-index: 1;
250
- background-color: var(--highlight-color-light);
251
- }
252
-
253
- .table-container th:first-child {
254
  z-index: 3;
 
255
  }
256
 
257
- /* ๋งˆ์šฐ์Šค์˜ค๋ฒ„ ํšจ๊ณผ */
258
  .table-container tr:hover td {
259
  background: #e7f9ef;
260
  color: #000;
261
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
262
- cursor: pointer;
263
- /* border: 1px solid #4caf50;
264
- transform: scale(1.02);*/
265
- transition: all 0.3s ease;
266
  }
267
 
268
- /* ์–ด๋‘์šด ํ…Œ๋งˆ ์ ์šฉ */
269
  @media (prefers-color-scheme: dark) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
270
  .table-container {
271
  border: 1px solid #444;
272
  }
273
- .header-bg-before,
274
- .header-bg-after,
275
- .header-bg-divdend,
276
- .header-bg-required {
277
- color: #000 !important;
278
- }
279
- .table-container th,
280
- .table-container td {
281
  border: 1px solid #444;
282
  background: #333;
283
  color: #ccc;
@@ -287,16 +235,32 @@
287
  background: #444;
288
  }
289
 
290
- .table-container th:first-child,
291
- .table-container td:first-child {
292
  background: #444;
293
  }
294
 
295
  .table-container tr:hover td {
296
  background: #e7f9ef;
297
  color: #000;
298
- /* border: 1px solid #4caf50;
299
- transform: scale(1.02);
300
- transition: all 0.3s ease; */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
301
  }
302
  }
 
19
  @import url('https://fonts.googleapis.com/css2?family=Quicksand:wght@300;400;500;700&display=swap');
20
  @import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&display=swap');
21
  @import url('https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@400;600;700&display=swap');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
  :root {
24
  --background-color-light: #ffffff;
 
49
  --total-value-color-dark: #ffeb3b;
50
  }
51
 
52
+ #col-container {
53
+ margin: 0 auto;
54
+ max-width: 100%;
55
+ /* font-family: 'Quicksand', 'ui-sans-serif', 'system-ui', 'sans-serif'; */
56
+ }
57
+
58
+ .h3_title {
59
+ padding: .75rem;
60
+ font-weight: 700;
61
+ border-bottom: 1px solid rgb(229, 231, 235);
62
+ }
63
+
64
+ .content {
65
+ -webkit-text-size-adjust: 100%;
66
+ tab-size: 4;
67
+ font-size: 1.125rem;
68
+ line-height: 1.75rem;
69
+ margin: 1.25em 0;
70
+ border: 0 solid #e5e7eb;
71
+ }
72
+
73
+ .code {
74
+ font-family: 'IBM Plex Mono', monospace;
75
+ }
76
+
77
+ .wrap-text {
78
+ word-wrap: break-word;
79
+ overflow-wrap: break-word;
80
+ white-space: normal;
81
+ }
82
+
83
  .buy-sell {
 
 
84
  font-weight: bold;
 
 
 
85
  }
86
 
87
  .buy {
 
 
88
  color: var(--buy-color);
 
89
  }
90
 
91
  .sell {
 
 
92
  color: var(--sell-color);
 
93
  }
94
 
95
  .highlight-edit {
96
  background-color: var(--highlight-edit-bg-color-light);
97
+ color: var(--highlight-edit-text-color-light);
98
  padding: 5px 10px;
99
  font-weight: bold;
100
  border-radius: 5px;
 
104
 
105
  .highlight-black {
106
  background-color: var(--highlight-black-light);
107
+ color: var(--text-color-dark);
108
  padding: 5px 10px;
109
  font-weight: bold;
110
  border-radius: 5px;
 
114
 
115
  .highlight-yellow {
116
  background-color: var(--highlight-yellow-bg-color-light);
117
+ color: var(--highlight-yellow-text-color-light);
118
  padding: 5px 10px;
119
  font-weight: bold;
120
  border-radius: 5px;
 
124
 
125
  .highlight-sky {
126
  background-color: var(--highlight-sky-bg-color-light);
127
+ color: var(--highlight-sky-text-color-light);
128
  padding: 5px 10px;
129
  font-weight: bold;
130
  border-radius: 5px;
 
132
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
133
  }
134
 
135
+ .table-header-bg-before {
136
+ background-color: #e7f9ef !important;
137
+ color: #000;
138
+ }
 
 
 
 
 
 
139
 
140
+ .table-header-bg-dividend {
141
+ background-color: #89c9e6 !important;
142
+ color: #000;
143
+ }
144
 
145
+ .table-header-bg-required {
146
+ background-color: #ffca28 !important;
147
+ color: #000;
148
+ }
149
 
150
+ .table-header-bg-after {
151
+ background-color: #d9d2e9 !important;
152
+ color: #000;
153
  }
154
 
 
155
  .table-container {
156
  width: 100%;
157
  overflow: auto;
158
  margin-bottom: 20px;
159
  position: relative;
160
  max-height: 100%;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  }
162
 
163
  .table-container table {
 
165
  border-collapse: collapse;
166
  }
167
 
 
 
 
 
 
 
 
 
168
  .table-container th, .table-container td {
169
  border: 1px solid #ddd;
170
  padding: 8px;
 
173
 
174
  .table-container th {
175
  background-color: var(--highlight-color-light);
176
+ color: var(--header-color-light);
177
  position: sticky;
178
  top: 0;
179
  z-index: 2;
 
183
  position: sticky;
184
  left: 0;
185
  z-index: 1;
 
186
  }
187
 
188
  .table-container th:first-child {
189
  position: sticky;
190
  left: 0;
 
 
 
 
 
191
  z-index: 3;
192
+ background-color: var(--highlight-color-light);
193
  }
194
 
 
195
  .table-container tr:hover td {
196
  background: #e7f9ef;
197
  color: #000;
198
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
199
+ cursor: pointer;
200
+ transition: all 0.3s ease;
 
 
201
  }
202
 
 
203
  @media (prefers-color-scheme: dark) {
204
+ .highlight-yellow {
205
+ background-color: var(--highlight-yellow-bg-color-dark);
206
+ color: var(--highlight-yellow-text-color-dark);
207
+ }
208
+
209
+ .highlight-black {
210
+ background-color: var(--highlight-black-dark);
211
+ color: var(--text-color-light);
212
+ }
213
+
214
+ .highlight-sky {
215
+ background-color: var(--highlight-sky-bg-color-dark);
216
+ color: var(--highlight-sky-text-color-dark);
217
+ }
218
+
219
+ .highlight-edit {
220
+ background-color: var(--highlight-edit-bg-color-dark);
221
+ color: var(--highlight-edit-text-color-dark);
222
+ }
223
+
224
  .table-container {
225
  border: 1px solid #444;
226
  }
227
+
228
+ .table-container th, .table-container td {
 
 
 
 
 
 
229
  border: 1px solid #444;
230
  background: #333;
231
  color: #ccc;
 
235
  background: #444;
236
  }
237
 
238
+ .table-container th:first-child, .table-container td:first-child {
 
239
  background: #444;
240
  }
241
 
242
  .table-container tr:hover td {
243
  background: #e7f9ef;
244
  color: #000;
245
+ }
246
+
247
+ .table-header-bg-before {
248
+ background-color: hsl(120, 60%, 80%) !important;
249
+ color: #000;
250
+ }
251
+
252
+ .table-header-bg-dividend {
253
+ background-color: hsl(200, 60%, 70%) !important;
254
+ color: #000;
255
+ }
256
+
257
+ .table-header-bg-required {
258
+ background-color: hsl(45, 100%, 70%) !important;
259
+ color: #000;
260
+ }
261
+
262
+ .table-header-bg-after {
263
+ background-color: hsl(270, 30%, 80%) !important;
264
+ color: #000;
265
  }
266
  }