import dash
from dash import html, dcc
import dash_bootstrap_components as dbc
dash.register_page(__name__, path='/spectroscopy')
layout = html.Div([
html.Div([
html.H1("Spectroscopy: The Digital Fingerprint", className="text-white fw-bold mb-2"),
html.P("The Golden Standard for Cosmic Mapping", className="lead text-info"),
], className="mb-5"),
dbc.Card([
dbc.CardBody([
html.H3("The Golden Standard (L'étalon-or)", className="text-white mb-4"),
html.P([
"By decomposing the light from a galaxy, we can identify specific 'lines' (peaks or dips) caused by ",
"atoms such as ", html.B("Hydrogen"), " or ", html.B("Oxygen"), ". Since we know the exact ",
"laboratory wavelength of these lines, we can precisely measure how much they have been shifted."
], className="text-light mb-4"),
# Your new asset: spectro.png
html.Div([
html.Img(
src=dash.get_asset_url('spectro.png'),
style={
"width": "100%", "maxHeight": "350px", "objectFit": "contain",
"borderRadius": "15px", "marginBottom": "10px",
"border": "1px solid rgba(0, 210, 255, 0.2)"
}
),
html.P("Galaxy Spectrum: Identifying H-alpha and OIII lines to calculate precise redshift.",
className="text-muted small italic")
], className="text-center mb-5"),
dbc.Row([
dbc.Col([
html.Div([
html.H5("The Insight", className="text-success"),
html.P(
"If we can identify these lines, the calculation of redshift is trivial and extremely precise. "
"This is the ideal method, known as Spectroscopic Redshift."
),
], className="p-3 mb-4 rounded bg-dark border-start border-success border-4"),
], width=12, lg=6),
dbc.Col([
html.Div([
html.H5("The Problem", className="text-warning"),
html.P(
"This method is very expensive in terms of exposure time. It is impossible to apply "
"this to the billions of galaxies we must map to see the large-scale structure."
),
], className="p-3 mb-4 rounded bg-dark border-start border-warning border-4"),
], width=12, lg=6),
]),
html.H4("The Mathematics of the Fingerprint", className="text-info mt-4 mb-3"),
html.P([
"To find the redshift (", html.Span("z", className="text-info"),
"), we compare the observed wavelength of a line to its rest wavelength:"
], className="text-light"),
dcc.Markdown(
r"""
$$z = \frac{\lambda_{obs} - \lambda_{rest}}{\lambda_{rest}}$$
""",
mathjax=True,
style={"textAlign": "center", "fontSize": "28px", "color": "#00d2ff", "padding": "20px"}
)
])
], className="modern-card p-4"),
])