:host { /* Theme variables */ --bg: #0b1020; --card: #121a2f; --soft: #182445; --text: #e6ecff; --muted: #9fb0d9; --up: #12c48b; --down: #ff5b6b; --accent: #6ea8fe; --border: #243156; display: block; background: var(--bg); color: var(--text); font: 14px/1.45 system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, "Helvetica Neue", Arial; } * { box-sizing: border-box; } a { color: inherit; text-decoration: none; } .wrap { padding: 3vw; padding-top: 8vw; } /* Header */ .header { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; margin-bottom: 14px; background: var(--card); border: 1px solid var(--border); border-radius: 12px; } .brand { font-weight: 700; letter-spacing: 0.3px; } .tag { padding: 4px 10px; border-radius: 999px; background: var(--soft); color: var(--muted); font-size: 12px; } /* Section titles */ h2 { font-size: 18px; margin: 18px 0 10px; } .section { background: var(--card); border: 1px solid var(--border); border-radius: 14px; padding: 14px; margin: 16px 0; } /* Ensure market overview ticker is clipped inside the rounded card */ .section.market-overview { overflow: hidden; /* clip animated content to card */ position: relative; /* establish containing block for absolute/animated children */ } /* Ticker container should also hide overflow so animation doesn't escape */ .ticker { width: 100%; overflow: hidden; position: relative; } /* Index cards */ .indices { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; } @media (max-width: 1100px) { .indices { grid-template-columns: repeat(3, 1fr); } } @media (max-width: 700px) { .indices { grid-template-columns: repeat(2, 1fr); } } /* compact .idx used for the small preview cards (top row) */ .idx { background: linear-gradient(180deg, rgba(255, 255, 255, 0.02), rgba(0, 0, 0, 0)); border: 1px solid var(--border); border-radius: 10px; padding: 8px; /* reduced */ min-height: 70px; } .idx .name { font-weight: 600; font-size: 13px; } .idx .row { display: flex; align-items: baseline; gap: 8px; margin-top: 6px; } .idx .price { font-size: 16px; font-weight: 700; } .idx .chg { font-size: 12px; padding: 2px 8px; border-radius: 999px; background: var(--soft); } .idx .mini { margin-top: 8px; height: 22px; /* smaller sparkline */ width: 100%; } .idx .mini svg { height: 100%; width: 100%; } /* Make the detailed indices grid use compact cards as well */ .indices-grid { display: flex; flex-wrap: wrap; gap: 12px; } @media (max-width: 1100px) { .indices-grid { grid-template-columns: repeat(3, 1fr); } } @media (max-width: 700px) { .indices-grid { grid-template-columns: repeat(2, 1fr); } } /* Ensure index-card component inside indices-grid stays compact */ .indices-grid .index-card { padding: 8px; border-radius: 10px; min-height: 80px; } .indices-grid .index-card .name { font-size: 13px; } .indices-grid .index-card .price { font-size: 16px; } .indices-grid .index-card .mini { height: 22px; } /* Tabs (indices -> companies) */ .tabs { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 10px; } .tab { background: var(--soft); color: var(--text); padding: 8px 12px; border-radius: 999px; border: 1px solid var(--border); cursor: pointer; } .tab.active { background: var(--accent); color: #0b1020; border-color: transparent; } /* Country buttons styled like tabs/pills */ .country-list { display: flex; gap: 8px; align-items: center; } .country { background: var(--soft); color: var(--text); padding: 6px 10px; border-radius: 999px; border: 1px solid var(--border); cursor: pointer; font-size: 13px; line-height: 1; } .country.active { background: var(--accent); color: #0b1020; border-color: transparent; } .tab.active, .country.active { box-shadow: 0 4px 10px rgba(0,0,0,0.12); } .table-wrap { border: 1px solid var(--border); border-radius: 12px; overflow: auto; } table { width: 100%; border-collapse: collapse; min-width: 620px; } /* Highlight selected company row: pink company name */ table tr.selected td a.co, table tr.selected td button.co, table tr.selected td .co { color: #ff66b2; /* pink */ font-weight: 700; text-decoration: underline; } /* also highlight entire row lightly */ table tr.selected { background: rgba(255, 102, 178, 0.03); } /* Make .co elements look like inline link/buttons and be keyboard accessible */ .table-wrap td .co, .table-wrap td a.co, .table-wrap td button.co { background: transparent; border: none; padding: 0; margin: 0; color: inherit; font: inherit; cursor: pointer; text-align: left; } .table-wrap td .co:focus, .table-wrap td .co:hover, .table-wrap td a.co:focus, .table-wrap td a.co:hover, .table-wrap td button.co:focus, .table-wrap td button.co:hover { outline: none; text-decoration: underline; } th, td { padding: 10px 12px; border-bottom: 1px solid var(--border); text-align: left; } th { color: var(--muted); font-weight: 600; position: sticky; top: 0; background: var(--card); } .btn { padding: 6px 10px; border-radius: 8px; border: 1px solid var(--border); cursor: pointer; font-weight: 600; color: white; } .btn.buy { background: green; /* border-color: rgba(18, 196, 139, 0.35);*/ } .btn.sell { background: red; /*border-color: rgba(255, 91, 107, 0.35);*/ } .btn:active { transform: translateY(1px); } /* Two columns */ .cols { display: grid; grid-template-columns: 2fr 1.4fr; gap: 14px; } @media (max-width: 1000px) { .cols { grid-template-columns: 1fr; } } /* Chart card */ .chart-card { padding: 12px; border: 1px solid var(--border); border-radius: 12px; background: var(--soft); } .chart-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; } .chart-title { font-weight: 700; } .legend { font-size: 12px; color: var(--muted); } canvas { width: 100%; height: 260px; border-radius: 10px; background: linear-gradient(180deg, rgba(255, 255, 255, 0.02), transparent); } .chart-svg { width: 100%; height: 260px; border-radius: 10px; background: linear-gradient(180deg, rgba(255,255,255,0.01), transparent); padding: 6px; } /* Sector grid */ .sector-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; } @media (max-width: 900px) { .sector-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 600px) { .sector-grid { grid-template-columns: 1fr; } } .sector { border: 1px solid var(--border); border-radius: 12px; padding: 12px; background: var(--soft); } .sector h3 { margin: 0 0 8px; font-size: 15px; } .pill { display: inline-block; margin: 6px 8px 0 0; padding: 6px 10px; border-radius: 999px; background: var(--card); border: 1px solid var(--border); font-size: 13px; } /* Toppers/Losers */ .dual { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; } @media (max-width: 900px) { .dual { grid-template-columns: 1fr; } } .uptext { color: var(--up); font-weight: 700; } .downtext { color: var(--down); font-weight: 700; } /* Footer note */ .note { color: var(--muted); font-size: 12px; margin-top: 6px; } /* Improve the marquee so the market overview cards run smoothly right-to-left. Use a CSS variable for duration, make the track width adapt to content and translate by -50% for seamless loop. Add will-change and hardware-accelerated transform, and ensure .mcard are non-shrinking. */ .ticker-track { display: flex; gap: 16px; align-items: center; padding: 12px 8px; /* ensure items don't shrink and track width matches content (we duplicate items in template) */ white-space: nowrap; will-change: transform; --marquee-duration: 28s; /* adjust speed */ animation: marquee var(--marquee-duration) linear infinite; } .mcard { flex: 0 0 auto; /* prevent shrinking/expanding */ min-width: 160px; max-width: 260px; padding: 8px 12px; border-radius: 10px; background: rgba(255,255,255,0.02); border: 1px solid rgba(255,255,255,0.02); } @keyframes marquee { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } } /* Inline styles for index-card moved here */ .index-card { background: rgba(255,255,255,0.02); padding: 12px; border-radius: 8px; min-width: 260px; margin: 6px; } .ic-header { display: flex; justify-content: space-between; align-items: center; } .ic-name { font-weight: 600; font-size: 0.95rem; } .ic-price { font-weight: 700; } .ic-row { margin-top: 6px; } .ic-change.up { color: var(--up); } .ic-change.down { color: var(--down); } .ic-spark { width: 100%; height: 28px; margin-top: 8px; }