{
  "common": {
    "appName": "NABDH",
    "appNameLocal": "نَبْض",
    "tagline": "Predict. Simulate. Prevent.",
    "taglineLong": "See the risk before it becomes a fault.",
    "simulated": "Simulated data",
    "simulatedFull": "Demo / simulated data",
    "simulatedTooltip": "Every figure in this build is produced by the platform's own simulation engine. None of it is operator data.",
    "demoEstimate": "Demo estimate",
    "projected": "Projected",
    "loading": "Loading…",
    "loadingData": "Loading grid data…",
    "error": "Something went wrong",
    "errorBody": "The page could not be loaded. This has been logged.",
    "retry": "Try again",
    "empty": "Nothing here yet",
    "noData": "No data available",
    "noResults": "No results match your filters",
    "noResultsHint": "Try widening the filters or clearing the search.",
    "permissionDenied": "You do not have access to this",
    "permissionDeniedBody": "Your role does not include the permission this page requires. Ask an administrator if you need it.",
    "networkError": "Connection lost",
    "networkErrorBody": "The live connection dropped. Reconnecting automatically.",
    "serverError": "Server error",
    "search": "Search",
    "searchPlaceholder": "Search by name or code…",
    "filter": "Filter",
    "filters": "Filters",
    "clearFilters": "Clear filters",
    "all": "All",
    "refresh": "Refresh",
    "close": "Close",
    "cancel": "Cancel",
    "confirm": "Confirm",
    "save": "Save",
    "saving": "Saving…",
    "saved": "Saved",
    "apply": "Apply",
    "reset": "Reset",
    "next": "Next",
    "previous": "Previous",
    "back": "Back",
    "viewAll": "View all",
    "viewDetails": "View details",
    "details": "Details",
    "overview": "Overview",
    "actions": "Actions",
    "status": "Status",
    "updated": "Updated",
    "created": "Created",
    "page": "Page",
    "pageOf": "Page {page} of {pages}",
    "showingCount": "Showing {shown} of {total}",
    "signOut": "Sign out",
    "signedInAs": "Signed in as",
    "language": "Language",
    "yes": "Yes",
    "no": "No",
    "none": "None",
    "na": "—",
    "showMore": "Show more",
    "showLess": "Show less",
    "live": "Live",
    "paused": "Paused",
    "now": "Now",
    "asOf": "As of {time}",
    "why": "WHY?",
    "simulate": "Simulate",
    "simulateAction": "Simulate action",
    "simulating": "Simulating…",
    "compare": "Compare",
    "baseline": "Baseline",
    "scenario": "Scenario",
    "aiStrategy": "AI strategy",
    "before": "Before",
    "after": "After",
    "change": "Change",
    "region": "Region",
    "regions": "Regions",
    "asset": "Asset",
    "assets": "Assets",
    "type": "Type",
    "location": "Location",
    "capacity": "Capacity",
    "risk": "Risk",
    "riskScore": "Risk score",
    "health": "Health",
    "confidence": "Confidence",
    "probability": "Probability",
    "severity": "Severity",
    "priority": "Priority",
    "level": "Level",
    "timestamp": "Timestamp",
    "duration": {
      "minutes": "{value} min",
      "hours": "{value} h",
      "hoursMinutes": "{hours} h {minutes} min",
      "days": "{value} days",
      "daysHours": "{days} d {hours} h"
    },
    "units": {
      "mw": "MW",
      "mwh": "MWh",
      "gw": "GW",
      "kv": "kV",
      "ampere": "A",
      "hz": "Hz",
      "celsius": "°C",
      "percent": "%",
      "mvar": "MVAr",
      "minutes": "min",
      "hours": "h",
      "days": "days",
      "years": "yr",
      "sar": "SAR",
      "tons": "t",
      "customers": "customers",
      "wm2": "W/m²",
      "ms": "m/s"
    },
    "runAnalysis": "Run analysis",
    "minutes": "min",
    "points": "pts",
    "customers": "customers",
    "sar": "SAR",
    "of": "of",
    "step": "Step",
    "notAvailable": "Not available",
    "simulationOnly": "Simulation only",
    "minShort": "min",
    "observed": "Observed",
    "estimated": "Estimated",
    "run": "Run",
    "running": "Running…",
    "reason": "Reason",
    "evidence": "Evidence",
    "proveIt": "Prove it"
  },
  "states": {
    "normal": "Normal",
    "watch": "Watch",
    "warning": "Warning",
    "critical": "Critical",
    "emergency": "Emergency"
  },
  "severity": {
    "low": "Low",
    "medium": "Medium",
    "high": "High",
    "critical": "Critical"
  },
  "alertLevel": {
    "information": "Information",
    "warning": "Warning",
    "high": "High",
    "critical": "Critical",
    "emergency": "Emergency"
  },
  "alertStatus": {
    "new": "New",
    "acknowledged": "Acknowledged",
    "in_progress": "In progress",
    "resolved": "Resolved",
    "closed": "Closed"
  },
  "assetStatus": {
    "online": "Online",
    "degraded": "Degraded",
    "maintenance": "In maintenance",
    "offline": "Offline"
  },
  "assetType": {
    "power_plant": "Power plant",
    "substation": "Substation",
    "transformer": "Transformer",
    "transmission_line": "Transmission line",
    "battery_storage": "Battery storage",
    "solar_farm": "Solar farm",
    "wind_farm": "Wind farm",
    "industrial_load": "Industrial load",
    "ev_hub": "EV charging hub"
  },
  "eventType": {
    "transformer_overload": "Transformer overload",
    "thermal_runaway": "Thermal runaway",
    "voltage_collapse": "Voltage collapse",
    "frequency_deviation": "Frequency deviation",
    "line_overload": "Line overload",
    "insulation_failure": "Insulation failure",
    "battery_derate": "Battery derate",
    "renewable_ramp_shortfall": "Renewable ramp shortfall",
    "cascading_outage": "Cascading outage"
  },
  "actionType": {
    "load_transfer": "Load transfer",
    "battery_discharge": "Battery discharge",
    "demand_response": "Demand response",
    "cooling_boost": "Forced cooling",
    "network_reconfigure": "Network reconfiguration",
    "generation_redispatch": "Generation redispatch",
    "maintenance_dispatch": "Maintenance dispatch"
  },
  "recommendationStatus": {
    "proposed": "Proposed",
    "simulated": "Simulated",
    "approved": "Approved",
    "executed": "Executed",
    "rejected": "Rejected"
  },
  "riskFactor": {
    "anomaly": "Deviation from expected behaviour",
    "dna": "Failure DNA similarity",
    "load": "Loading above stress threshold",
    "thermal": "Temperature relative to rating",
    "weather": "Ambient conditions"
  },
  "dnaFeature": {
    "voltageDeviation": "Voltage deviation",
    "frequencyDeviation": "Frequency deviation",
    "loadPercentage": "Loading",
    "temperature": "Asset temperature",
    "loadGrowthRate": "Load growth rate",
    "renewableVariability": "Renewable variability",
    "assetAge": "Asset age",
    "maintenanceScore": "Maintenance debt",
    "neighboringFailures": "Neighbouring stress",
    "weatherTemperature": "Ambient temperature"
  },
  "healthBand": {
    "excellent": "Excellent",
    "good": "Good",
    "fair": "Fair",
    "poor": "Poor",
    "critical": "Critical"
  },
  "stabilityBand": {
    "excellent": "Excellent",
    "good": "Good",
    "adequate": "Adequate",
    "strained": "Strained",
    "critical": "Critical"
  },
  "role": {
    "system_admin": "System administrator",
    "executive": "Executive",
    "control_operator": "Control centre operator",
    "engineer": "Engineer",
    "maintenance_engineer": "Maintenance engineer",
    "analyst": "Analyst",
    "viewer": "Viewer"
  },
  "nav": {
    "groups": {
      "operations": "Operations",
      "intelligence": "Intelligence",
      "assets": "Assets",
      "administration": "Administration",
      "decisionIntelligence": "Decision intelligence",
      "assurance": "Assurance"
    },
    "commandCenter": "Command Center",
    "executive": "Executive dashboard",
    "grid": "Grid status",
    "map": "National map",
    "assets": "Assets",
    "predictions": "Predictions",
    "failureDna": "Failure DNA",
    "timeMachine": "Energy Time Machine",
    "simulations": "Simulations",
    "scenarios": "What-if scenarios",
    "alerts": "Alerts",
    "incidents": "Incidents",
    "maintenance": "Predictive maintenance",
    "forecast": "Load forecast",
    "renewables": "Renewable intelligence",
    "copilot": "NABDH Copilot",
    "models": "AI model centre",
    "integrations": "Integrations",
    "audit": "Audit log",
    "settings": "Settings",
    "users": "Users",
    "roles": "Roles & permissions",
    "demo": "Demo mode",
    "controlRoom": "Control room",
    "whyNabdh": "Why NABDH?",
    "aiOperations": "AI Operations Room",
    "cascade": "Domino View",
    "counterfactual": "Counterfactual Explorer",
    "selfHealing": "Self-Healing Lab",
    "knowledgeGraph": "Knowledge Graph",
    "warRoom": "AI War Room",
    "riskRadar": "National Risk Radar",
    "digitalTwin": "Digital Twin",
    "decisions": "Decision Records",
    "hackathon": "Hackathon Mode",
    "resilience": "Resilience Lab",
    "trust": "AI Trust Center",
    "reports": "Reports",
    "verification": "Model vs Reality",
    "discovery": "Discovery Lab",
    "evidence": "Evidence Mode",
    "dataHealth": "Data Health",
    "aiGovernance": "AI Governance",
    "learning": "Learning",
    "riskHunter": "Risk Hunter",
    "proofs": "Decision Proofs",
    "liveGrid": "Live 3D Grid",
    "physics": "Grid Physics",
    "compareFutures": "Compare Futures",
    "sensors": "Sensors"
  },
  "auth": {
    "signIn": "Sign in",
    "signInTitle": "National Energy Command Center",
    "signInSubtitle": "Sign in to access the NABDH operations console.",
    "email": "Work email",
    "emailPlaceholder": "name@nabdh.sa",
    "password": "Password",
    "passwordPlaceholder": "Enter your password",
    "submit": "Sign in",
    "submitting": "Signing in…",
    "demoAccounts": "Demo accounts",
    "demoAccountsNote": "This build ships with seeded demonstration accounts so each role can be reviewed. They are disabled whenever DEMO_ACCOUNTS_ENABLED is false.",
    "useAccount": "Use this account",
    "backToSite": "Back to the public site",
    "securityNote": "Sessions are signed, stored server-side and revocable. Every sign-in is written to the audit log.",
    "signedOut": "You have been signed out.",
    "sessionExpired": "Your session expired. Please sign in again.",
    "demoPasswordHidden": "The password is not shown outside development. Enter it yourself to sign in.",
    "demoOneClick": "One click signs you in"
  },
  "landing": {
    "nav": {
      "problem": "Problem",
      "solution": "Solution",
      "how": "How it works",
      "dna": "Failure DNA",
      "timeMachine": "Time Machine",
      "prevention": "Prevention",
      "impact": "Impact",
      "architecture": "Architecture",
      "team": "Team"
    },
    "hero": {
      "eyebrow": "Proactive intelligence for power grids",
      "title": "NABDH",
      "titleLocal": "نَبْض",
      "subtitle": "Predict. Simulate. Prevent.",
      "body": "An AI platform that anticipates risks on the electricity network, simulates their impact before they happen, and proposes the preventive action that keeps the system running.",
      "explore": "Explore NABDH",
      "launchDemo": "Launch demo",
      "signIn": "Sign in"
    },
    "stats": {
      "assets": "Monitored assets",
      "regions": "Regions",
      "dnaPatterns": "Failure DNA patterns",
      "leadTime": "Typical lead time"
    },
    "problem": {
      "title": "The problem",
      "lead": "Modern power grids became harder to operate faster than monitoring became smarter.",
      "body": "Demand shifts, sudden loads, solar and wind variability, extreme heat, ageing assets and voltage or frequency disturbances interact in ways a fixed threshold cannot express. Conventional monitoring reports the present state and raises an alarm once a limit has already been passed.",
      "reactive": "Monitor → Alert → React",
      "reactiveNote": "By the time the alarm sounds, the decision window has usually closed.",
      "items": {
        "demand": "Shifting demand patterns",
        "surges": "Sudden load surges",
        "renewables": "Solar and wind variability",
        "weather": "Extreme ambient conditions",
        "ageing": "Ageing assets and deferred maintenance",
        "chain": "Hard-to-spot chains of events leading to failure"
      }
    },
    "solution": {
      "title": "The solution",
      "lead": "NABDH answers four questions instead of one.",
      "q1": "What is happening now?",
      "q1Body": "Live telemetry across every monitored asset, aggregated into a single national picture.",
      "q2": "What will happen next?",
      "q2Body": "A digital twin walked forward minute by minute until an operating limit is crossed.",
      "q3": "Why will it happen?",
      "q3Body": "Every point of the risk score attributed to a measurable, inspectable factor.",
      "q4": "What should we do about it?",
      "q4Body": "Preventive actions sized against real available resources and scored by re-running the twin.",
      "proactive": "Monitor → Understand → Predict → Simulate → Prevent"
    },
    "how": {
      "title": "How it works",
      "lead": "One model, evaluated at three different times.",
      "body": "Recorded history, the live view and the forecast are the same function of asset condition, weather and time. That is why the historical line meets the live line exactly, and why a simulated action produces a number you can trace rather than a number you have to trust.",
      "step1": "Ingest",
      "step1Body": "Telemetry, weather, asset condition and maintenance history flow into a single model of the grid.",
      "step2": "Score",
      "step2Body": "Six measurable stress factors combine into a risk score, modulated by asset condition and consequence.",
      "step3": "Match",
      "step3Body": "The live signature is compared against every recorded failure signature across ten dimensions.",
      "step4": "Project",
      "step4Body": "The twin is walked forward until a physical limit is crossed, giving a time and a cause.",
      "step5": "Prevent",
      "step5Body": "Candidate actions are sized, simulated, ranked and combined into a strategy."
    },
    "dna": {
      "title": "Failure DNA",
      "lead": "Every past failure leaves a signature. NABDH keeps them and looks for them.",
      "body": "Each recorded failure is reduced to a ten-dimension normalised signature — voltage, frequency, loading, temperature, growth rate, renewable variability, asset age, maintenance debt, neighbouring stress and ambient conditions. The live grid state is reduced the same way, so a match is a measurable distance in one shared space, and an operator can inspect it dimension by dimension instead of taking a score on faith.",
      "example": "Current grid pattern matches a recorded failure signature",
      "dimensions": "10 dimensions",
      "inspectable": "Fully inspectable",
      "deterministic": "Deterministic"
    },
    "timeMachine": {
      "title": "Energy Time Machine",
      "lead": "Move the clock forward and watch the consequence before it arrives.",
      "body": "The digital twin can be evaluated at any future instant. Step forward five minutes or twenty-four hours and the whole grid — loading, temperature, voltage, risk — is recomputed for that moment, with and without the preventive action applied."
    },
    "prevention": {
      "title": "AI prevention",
      "lead": "A recommendation is only useful if you can check it first.",
      "body": "NABDH sizes each candidate action against the resources actually available around the asset: spare capacity on adjacent feeders, battery power the region can dispatch, deferrable demand behind the constraint. It then measures each one by re-running the twin with that action applied, and greedily combines them into a strategy — because the actions interact, and each one changes the value of the next.",
      "simulateFirst": "Nothing is dispatched before it is simulated."
    },
    "impact": {
      "title": "Impact",
      "lead": "What earlier detection is worth.",
      "note": "The figures below are projections from this build's simulation, not measured operational results.",
      "items": {
        "downtime": "Reduced unplanned downtime",
        "detection": "Earlier failure detection",
        "utilisation": "Improved asset utilisation",
        "maintenance": "Lower maintenance cost",
        "reliability": "Improved grid reliability",
        "renewables": "Better renewable integration",
        "decisions": "Faster operational decisions"
      }
    },
    "architecture": {
      "title": "Architecture",
      "lead": "Built to be replaced piece by piece, not rebuilt.",
      "body": "The simulation layer that generates telemetry in this build sits behind the same interface a SCADA, EMS or IoT feed would use. The scoring engine is deterministic and swappable for a trained model. Nothing in the interface assumes where the numbers came from.",
      "layers": {
        "sources": "Data sources",
        "sourcesBody": "SCADA, EMS, DMS, AMI, IoT, OPC-UA, weather, GIS and maintenance systems — adapter slots with defined contracts.",
        "ingestion": "Ingestion",
        "ingestionBody": "REST and streaming ingestion, validation and normalisation into a single asset model.",
        "intelligence": "Intelligence",
        "intelligenceBody": "Risk engine, Failure DNA matcher, forward simulation, recommendation engine and forecasting.",
        "experience": "Experience",
        "experienceBody": "Command Center, national map, Time Machine, simulations, alerts and the Copilot."
      }
    },
    "team": {
      "title": "Built for the energy hackathon",
      "body": "NABDH is a working prototype: a real database, a real risk engine, real role-based access control and a simulation layer standing in for operator data. Every number on screen is computed by the platform, and everything derived from simulated inputs is labelled as such.",
      "openConsole": "Open the console"
    },
    "footer": {
      "rights": "NABDH — a hackathon prototype. Simulated data throughout.",
      "disclaimer": "Not connected to any operational power system."
    }
  },
  "commandCenter": {
    "title": "National Energy Command Center",
    "subtitle": "Live national grid picture, predicted risks and the actions available right now.",
    "cards": {
      "totalLoad": "Total grid load",
      "availableCapacity": "Available capacity",
      "renewableGeneration": "Renewable generation",
      "gridStability": "Grid stability index",
      "activeAlerts": "Active alerts",
      "criticalAssets": "Critical assets",
      "predictedFailures": "Predicted failures",
      "preventedFailures": "Potential failures avoided",
      "downtimeAvoided": "Estimated downtime avoided",
      "co2Avoided": "CO₂ avoided"
    },
    "liveMap": "Live national grid map",
    "riskForecast": "AI risk forecast",
    "riskForecastNote": "Highest projected risk across all monitored assets over the next six hours.",
    "attentionTitle": "Assets needing attention",
    "attentionEmpty": "No asset is above the watch threshold.",
    "latestRecommendations": "Latest AI recommendations",
    "recommendationsEmpty": "No preventive action is outstanding.",
    "frequency": "System frequency",
    "reserveMargin": "Reserve margin",
    "loadRatio": "Capacity utilisation",
    "averageHealth": "Fleet health",
    "openAsset": "Open asset",
    "inputHealth": "Input health",
    "inputHealthNote": "A live figure whose source has stopped delivering is not a live figure. These are the platform's inputs, on the same tick as its outputs.",
    "sourcesDelivering": "Sources delivering",
    "inputQuality": "Mean input quality",
    "weakestSource": "Weakest source"
  },
  "grid": {
    "title": "Grid status",
    "subtitle": "Regional balance, stability inputs and the technical picture behind the headline numbers.",
    "regionTable": "Regional summary",
    "columns": {
      "region": "Region",
      "load": "Load",
      "capacity": "Capacity",
      "reserve": "Reserve",
      "renewables": "Renewables",
      "peakRisk": "Peak risk",
      "assets": "Assets",
      "atRisk": "At risk",
      "health": "Health",
      "temperature": "Ambient",
      "state": "State"
    },
    "stability": {
      "title": "Stability index inputs",
      "note": "The index is computed from exactly these eight inputs.",
      "voltage": "Voltage deviation",
      "frequency": "Frequency",
      "load": "Capacity utilisation",
      "reserve": "Reserve margin",
      "renewable": "Renewable variability",
      "health": "Fleet health",
      "incidents": "Open incidents",
      "weather": "Weather stress"
    },
    "engineerView": "Engineer view",
    "electrical": {
      "title": "Electrical measurements",
      "voltage": "Voltage",
      "current": "Current",
      "frequency": "Frequency",
      "powerFactor": "Power factor",
      "activePower": "Active power",
      "reactivePower": "Reactive power",
      "transformerTemp": "Transformer temperature",
      "lineLoading": "Line loading",
      "thd": "Total harmonic distortion",
      "assetHealth": "Asset health",
      "failureProbability": "Failure probability",
      "sensorStatus": "Sensor status"
    }
  },
  "map": {
    "title": "National grid map",
    "subtitle": "Every monitored asset, coloured by its current risk state.",
    "legend": "Risk state",
    "layers": "Layers",
    "showLines": "Transmission lines",
    "showLabels": "Region labels",
    "heatmap": "Risk heatmap",
    "resetView": "Reset view",
    "zoomIn": "Zoom in",
    "zoomOut": "Zoom out",
    "selectAsset": "Select an asset on the map to see its detail.",
    "assetsShown": "{count} assets shown",
    "filterType": "Asset type",
    "filterState": "Risk state",
    "offlineNote": "The map is rendered from built-in geometry and needs no external tile service."
  },
  "assets": {
    "title": "Assets",
    "subtitle": "The monitored fleet, its condition and its current risk.",
    "columns": {
      "code": "Code",
      "name": "Name",
      "type": "Type",
      "region": "Region",
      "capacity": "Capacity",
      "load": "Load",
      "temperature": "Temperature",
      "health": "Health",
      "risk": "Risk",
      "status": "Status",
      "criticality": "Criticality"
    },
    "passport": {
      "title": "Digital asset passport",
      "basic": "Basic information",
      "currentHealth": "Current condition",
      "realtime": "Real-time measurements",
      "history": "Historical measurements",
      "maintenance": "Maintenance history",
      "failures": "Related incidents",
      "dnaMatches": "Failure DNA matches",
      "riskForecast": "Risk forecast",
      "recommendations": "AI recommendations",
      "rul": "Remaining useful life",
      "timeline": "Timeline",
      "documents": "Documents",
      "manufacturer": "Manufacturer",
      "model": "Model",
      "serial": "Serial number",
      "installed": "Commissioned",
      "age": "Age",
      "lastMaintenance": "Last maintenance",
      "nextMaintenance": "Next maintenance",
      "customers": "Customers served",
      "site": "Site",
      "coolingType": "Cooling class",
      "ratedTemp": "Rated temperature",
      "voltage": "Nominal voltage",
      "parent": "Parent asset",
      "sensors": "Sensors",
      "documentsNote": "Document management is an integration slot in this build — no files are stored.",
      "noMaintenance": "No maintenance has been recorded for this asset.",
      "noIncidents": "This asset has not been involved in a recorded incident.",
      "noRecommendations": "No preventive action is recommended at the current risk level."
    },
    "notFound": "That asset does not exist.",
    "backToList": "Back to assets",
    "timeline": {
      "commissioned": "Commissioned",
      "maintenance": "Maintenance",
      "incident": "Incident",
      "prediction": "Prediction raised",
      "alert": "Alert raised",
      "empty": "Nothing has been recorded against this asset yet.",
      "note": "Commissioning, maintenance, incidents, predictions and alerts, in one chronological record."
    }
  },
  "predictions": {
    "title": "Predictions",
    "subtitle": "What the digital twin expects to happen, when, and on what evidence.",
    "columns": {
      "code": "Reference",
      "asset": "Asset",
      "event": "Predicted event",
      "probability": "Probability",
      "confidence": "Confidence",
      "eta": "Estimated time",
      "risk": "Risk",
      "status": "Status",
      "created": "Raised"
    },
    "status": {
      "active": "Active",
      "prevented": "Prevented",
      "expired": "Expired",
      "realised": "Occurred"
    },
    "explain": {
      "title": "Why is the risk this high?",
      "subtitle": "Each factor's share of the score, measured rather than assigned.",
      "factor": "Factor",
      "value": "Measured value",
      "contribution": "Contribution",
      "narrative": "In plain language",
      "modelVersion": "Model version",
      "noFactors": "No contributing factor is above the reporting threshold."
    },
    "empty": "No prediction has been raised.",
    "etaNone": "No limit crossed within the horizon",
    "horizon": "Horizon",
    "breachReason": {
      "temperature": "Temperature above emergency limit",
      "overload": "Loading above emergency rating",
      "voltage": "Voltage outside statutory band",
      "risk": "Composite risk above threshold"
    }
  },
  "dna": {
    "title": "Failure DNA",
    "subtitle": "The library of recorded failure signatures, and what currently resembles them.",
    "library": "Signature library",
    "matches": "Current matches",
    "topMatches": "Top matches",
    "similarity": "Similarity",
    "signature": "Signature",
    "dimensions": "Signature dimensions",
    "compare": "Signature comparison",
    "current": "Current state",
    "historical": "Historical pattern",
    "agreement": "Agreement",
    "occurred": "Occurred",
    "outcome": "Outcome",
    "customersAffected": "Customers affected",
    "energyLost": "Energy not served",
    "duration": "Duration",
    "howItWorks": "How matching works",
    "howItWorksBody": "Both the live state and each historical failure are reduced to the same ten normalised dimensions. Similarity is a weighted Euclidean distance in that shared space — loading, temperature and growth rate carry the most weight because they dominate thermal and overload failures in a hot climate.",
    "empty": "No signature in the library resembles the current grid state.",
    "selectPattern": "Select a signature to inspect it."
  },
  "timeMachine": {
    "title": "Energy Time Machine",
    "subtitle": "Move the clock forward and see what the grid does next.",
    "offset": "Time offset",
    "offsets": {
      "now": "Now",
      "5": "+5 min",
      "15": "+15 min",
      "30": "+30 min",
      "60": "+1 h",
      "180": "+3 h",
      "360": "+6 h",
      "720": "+12 h",
      "1440": "+24 h"
    },
    "projectedState": "Projected state",
    "trajectory": "Risk trajectory",
    "withAction": "With preventive action",
    "withoutAction": "Without action",
    "selectAsset": "Asset under study",
    "timeline": "Projected timeline",
    "breachAt": "Limit crossed at {time}",
    "noBreach": "No operating limit is crossed within this horizon.",
    "play": "Play",
    "pause": "Pause",
    "note": "Every frame is the digital twin evaluated at that instant — not an interpolation of the current values."
  },
  "scenarios": {
    "title": "What-if scenarios",
    "subtitle": "Ask the grid a hypothetical question and get a measured answer.",
    "builtIn": "Built-in scenarios",
    "custom": "Custom scenario",
    "customNote": "Define your own perturbation and run it against the live grid.",
    "run": "Run scenario",
    "running": "Running…",
    "scope": "Scope",
    "national": "National",
    "parameters": "Parameters",
    "loadDelta": "Load change",
    "solarDelta": "Solar output change",
    "windDelta": "Wind output change",
    "tempDelta": "Ambient temperature change",
    "assetOutage": "Take the selected asset out of service",
    "lineOutage": "Trip transmission lines in scope",
    "batteryOutage": "Remove battery storage",
    "evSurge": "Additional EV charging demand",
    "industrialSurge": "Additional industrial load",
    "duration": "Duration",
    "createTitle": "Create scenario",
    "nameLabel": "Scenario name",
    "namePlaceholder": "e.g. Riyadh heat wave with EV surge",
    "descriptionLabel": "Description",
    "created": "Scenario created",
    "deleted": "Scenario deleted",
    "delete": "Delete scenario",
    "deleteConfirm": "Delete this scenario? Simulations already run against it are kept.",
    "empty": "No scenario has been defined yet.",
    "invalid": "A scenario needs at least one parameter that changes something."
  },
  "simulations": {
    "title": "Simulations",
    "subtitle": "Every simulation run, with the result it produced.",
    "columns": {
      "code": "Reference",
      "name": "Simulation",
      "kind": "Type",
      "riskBefore": "Risk before",
      "riskAfter": "Risk after",
      "customers": "Customers impacted",
      "started": "Run at",
      "by": "Run by"
    },
    "kind": {
      "what_if": "What-if",
      "preventive_action": "Preventive action",
      "demo": "Demo",
      "baseline": "Baseline"
    },
    "results": {
      "title": "Simulation result",
      "gridStability": "Grid stability",
      "voltage": "Average voltage",
      "frequency": "Frequency",
      "load": "Total load",
      "assetStress": "Asset stress",
      "failureProbability": "Failure probability",
      "regionsAffected": "Regions affected",
      "customersImpacted": "Customers impacted",
      "economicImpact": "Estimated economic impact",
      "recoveryTime": "Estimated recovery time",
      "energyNotServed": "Energy not served",
      "verdict": "Verdict"
    },
    "comparison": {
      "title": "Scenario comparison",
      "noAction": "No action",
      "manualAction": "Single manual action",
      "aiStrategy": "NABDH combined strategy"
    },
    "empty": "No simulation has been run yet.",
    "failed": "The simulation could not be completed.",
    "duplicate": "That simulation is already running."
  },
  "recommendations": {
    "title": "Recommended actions",
    "subtitle": "Sized against available resources and scored by re-running the digital twin.",
    "expectedReduction": "Expected risk reduction",
    "magnitude": "Magnitude",
    "cost": "Estimated cost",
    "duration": "Time to effect",
    "requiresRole": "Requires",
    "combined": "Combined strategy",
    "combinedNote": "Actions interact — the combined effect is measured, not summed.",
    "approve": "Approve",
    "approved": "Approved",
    "reject": "Reject",
    "rejected": "Rejected",
    "execute": "Mark as executed",
    "executed": "Executed",
    "simulateFirst": "Simulate before approving",
    "simulateFirstNote": "Approval is only available once the action has been simulated.",
    "empty": "No action is recommended at the current risk level.",
    "riskBeforeAfter": "Risk {before}% → {after}%"
  },
  "alerts": {
    "title": "Alerts & incidents",
    "subtitle": "Everything the platform has raised, and what happened next.",
    "columns": {
      "code": "Reference",
      "level": "Level",
      "asset": "Asset",
      "region": "Region",
      "message": "Alert",
      "risk": "Risk",
      "confidence": "Confidence",
      "expected": "Expected",
      "status": "Status",
      "assigned": "Assigned to",
      "created": "Raised"
    },
    "acknowledge": "Acknowledge",
    "acknowledged": "Acknowledged by {name}",
    "resolve": "Resolve",
    "resolution": "Resolution",
    "resolutionPlaceholder": "What was done?",
    "assign": "Assign",
    "recommendedAction": "Recommended action",
    "escalation": "Escalation",
    "escalationLevel": "Escalation level {level}",
    "channels": "Channels",
    "channelNote": "Email, SMS, webhook and push are architecture slots in this build; only the dashboard channel delivers.",
    "empty": "No alert matches these filters.",
    "emptyAll": "No alert has been raised.",
    "rules": "Escalation rules",
    "ruleRange": "Risk {min}–{max}%",
    "toRole": "Notify"
  },
  "notifications": {
    "title": "Notifications",
    "empty": "Nothing new.",
    "emptyBody": "Alerts routed to you will appear here.",
    "markAllRead": "Mark all as read",
    "unread": "{count} unread",
    "viewAll": "Open alerts",
    "open": "Open notifications"
  },
  "incidents": {
    "title": "Incidents",
    "subtitle": "Recorded events, their cost, and how much earlier NABDH would have seen them.",
    "columns": {
      "code": "Reference",
      "title": "Incident",
      "region": "Region",
      "severity": "Severity",
      "started": "Started",
      "duration": "Duration",
      "customers": "Customers affected",
      "energy": "Energy not served",
      "leadTime": "NABDH lead time"
    },
    "replay": {
      "title": "Incident replay",
      "subtitle": "Step through how the event developed.",
      "play": "Play",
      "pause": "Pause",
      "restart": "Restart",
      "speed": "Speed",
      "nabdhDetect": "NABDH early warning",
      "thresholdTrigger": "Conventional threshold alarm",
      "failure": "Limit exceeded",
      "prevented": "Failure prevented",
      "preventionWindow": "Prevention window",
      "leadAdvantage": "NABDH would have raised the warning {minutes} minutes earlier.",
      "noAdvantage": "This event gave no usable early-warning window."
    },
    "rootCause": "Root cause",
    "wasPrevented": "Prevented",
    "economicImpact": "Estimated impact",
    "empty": "No incident has been recorded."
  },
  "maintenance": {
    "title": "Predictive maintenance",
    "subtitle": "Where condition, risk and remaining life say to send a crew next.",
    "columns": {
      "asset": "Asset",
      "health": "Health",
      "failureProbability": "Failure probability",
      "rul": "Remaining useful life",
      "lastMaintenance": "Last maintenance",
      "recommended": "Recommended maintenance",
      "priority": "Priority",
      "status": "Status",
      "scheduled": "Scheduled",
      "cost": "Cost"
    },
    "kind": {
      "preventive": "Preventive",
      "corrective": "Corrective",
      "predictive": "Predictive",
      "inspection": "Inspection"
    },
    "status": {
      "scheduled": "Scheduled",
      "in_progress": "In progress",
      "completed": "Completed",
      "overdue": "Overdue"
    },
    "workOrders": "Work orders",
    "history": "Maintenance history",
    "findings": "Findings",
    "actionsTaken": "Actions taken",
    "healthChange": "Health {before} → {after}",
    "downtime": "Downtime",
    "rulNote": "Remaining life is derived from present thermal stress: insulation ageing roughly doubles for every 6 °C above the rating.",
    "empty": "No maintenance record matches these filters.",
    "schedule": "Schedule inspection",
    "scheduled": "Inspection scheduled"
  },
  "forecast": {
    "title": "Load forecast",
    "subtitle": "Where demand is going, with honest uncertainty bands.",
    "horizon": "Horizon",
    "horizons": {
      "1h": "1 hour",
      "6h": "6 hours",
      "12h": "12 hours",
      "24h": "24 hours",
      "7d": "7 days"
    },
    "currentLoad": "Current load",
    "expectedPeak": "Expected peak",
    "peakAt": "Peak at",
    "availableCapacity": "Available capacity",
    "renewableContribution": "Renewable contribution",
    "predictedRisk": "Predicted risk",
    "confidenceInterval": "Confidence interval",
    "minReserve": "Minimum reserve margin",
    "expected": "Expected",
    "band": "Uncertainty band",
    "regionalPeaks": "Regional peaks",
    "bandNote": "The band widens with the square root of lead time, which is how forecast error actually grows."
  },
  "renewables": {
    "title": "Renewable energy intelligence",
    "subtitle": "Solar and wind output, forecast, and how much it could move.",
    "solar": "Solar",
    "wind": "Wind",
    "current": "Current output",
    "forecastLabel": "Forecast",
    "expectedVariation": "Potential variation",
    "confidence": "Confidence",
    "installed": "Installed capacity",
    "capacityFactor": "Capacity factor",
    "confidenceScore": "Renewable confidence score",
    "confidenceScoreNote": "Blends forecast confidence at the operational horizon with how much of the fleet's output is currently swinging.",
    "irradiance": "Irradiance",
    "windSpeed": "Wind speed",
    "dustIndex": "Dust index",
    "cloudCover": "Cloud cover",
    "derateNote": "Photovoltaic output is derated for cell temperature and soiling, which is why a heat wave reduces supply at the same time as it raises demand.",
    "byRegion": "By region"
  },
  "copilot": {
    "title": "NABDH Copilot",
    "subtitle": "Ask about the grid in Arabic or English.",
    "placeholder": "Ask about the grid…",
    "send": "Send",
    "thinking": "Working…",
    "clear": "Clear conversation",
    "suggestions": "Try asking",
    "examples": {
      "riskiest": "Which region is most at risk right now?",
      "whyRiyadh": "Why is risk rising in Riyadh?",
      "twoHours": "Which transformers might fail in the next two hours?",
      "whatIf": "What happens if load rises 25% in Jeddah?",
      "reduce": "How do I reduce the risk?",
      "critical": "Show me all critical assets",
      "compare": "Compare Riyadh and Jeddah",
      "heatwave": "Run a heat wave scenario"
    },
    "scopeNote": "The Copilot answers from the data you are authorised to see, using the platform's own engines. It is a structured query interface over live grid state, not a general-purpose language model.",
    "noAnswer": "I could not map that to something I can answer. Try one of the suggestions.",
    "empty": "Ask a question to get started.",
    "youAsked": "You asked",
    "basedOn": "Based on",
    "openLink": "Open"
  },
  "executive": {
    "title": "Executive dashboard",
    "subtitle": "Grid health, exposure and prevention performance.",
    "nationalHealth": "National grid health",
    "criticalRisks": "Critical risks",
    "predictedEvents": "Predicted events",
    "preventedEvents": "Prevented events",
    "regionsAtRisk": "Regions at risk",
    "operationalImpact": "Operational impact",
    "financialImpact": "Estimated financial impact",
    "renewableContribution": "Renewable contribution",
    "aiPerformance": "AI performance",
    "topRecommendations": "Top recommendations",
    "preventionScore": "Prevention score",
    "preventionScoreNote": "What NABDH has contributed in this demonstration environment.",
    "metrics": {
      "predictedRisks": "Risks predicted",
      "recommendations": "Preventive recommendations",
      "simulations": "Simulations run",
      "avoided": "Potential failures avoided",
      "downtimeAvoided": "Estimated downtime avoided",
      "customersProtected": "Customers protected"
    },
    "disclaimer": "All figures on this page are produced by the simulation in this build. They are projections for demonstration, not measured operational results."
  },
  "models": {
    "title": "AI model centre",
    "subtitle": "What is running, how it performs, and what changed.",
    "columns": {
      "name": "Model",
      "version": "Version",
      "task": "Task",
      "accuracy": "Accuracy",
      "precision": "Precision",
      "recall": "Recall",
      "f1": "F1",
      "trained": "Last trained",
      "dataset": "Dataset",
      "status": "Status",
      "drift": "Drift"
    },
    "status": {
      "active": "Active",
      "staging": "Staging",
      "retired": "Retired"
    },
    "driftStatus": {
      "stable": "Stable",
      "watch": "Watch",
      "drifting": "Drifting"
    },
    "algorithm": "Algorithm",
    "auditTrail": "Model audit trail",
    "notes": "Notes",
    "honestyNote": "Every metric here was measured against the synthetic benchmark this repository generates. No model in this build has been trained or validated on operator data."
  },
  "integrations": {
    "title": "Integrations",
    "subtitle": "What the platform connects to, and what it is ready to connect to.",
    "status": {
      "connected": "Connected",
      "available": "Available",
      "planned": "Planned"
    },
    "direction": {
      "inbound": "Inbound",
      "outbound": "Outbound",
      "bidirectional": "Bidirectional"
    },
    "protocol": "Protocol",
    "honestyNote": "Only the internal simulation layer and the platform's own transports are live in this build. Everything marked planned is an adapter slot with a defined contract — not an existing connection.",
    "category": {
      "internal": "Internal",
      "transport": "Transport",
      "operations": "Operations",
      "metering": "Metering",
      "sensing": "Sensing",
      "external": "External",
      "enterprise": "Enterprise"
    },
    "hub": {
      "title": "Integration Hub",
      "subtitle": "Every source the platform reads from, what it is actually sending, and how much of it can be trusted.",
      "honesty": "Every connector below is a demonstration source. It speaks the shape, the units and the failure modes a real SCADA, weather, IoT, CMMS or forecast feed would, and it is labelled DEMO CONNECTED — never CONNECTED — because nothing here reaches an external system.",
      "sources": "Sources",
      "connected": "Demo connected",
      "degraded": "Degraded",
      "disconnected": "Disconnected",
      "errored": "Error",
      "throughput": "Records per minute",
      "meanQuality": "Mean data quality",
      "meanHealth": "Mean connector health",
      "lastSync": "Last sync",
      "never": "Never",
      "openConnector": "Open",
      "empty": "No connectors are registered yet.",
      "catalogue": "Adapter roadmap",
      "catalogueNote": "Contracts defined, adapters not built. Listed so the gap between what exists and what is planned stays visible.",
      "modeDemo": "Demo",
      "modeLive": "Live",
      "kind": "Kind",
      "protocol": "Protocol",
      "endpoint": "Endpoint",
      "auth": "Authentication",
      "secretRef": "Secret",
      "secretNote": "The name of the environment variable this connector would read. The value never leaves the server and has no column in the database.",
      "noSecret": "None required",
      "poll": "Poll interval",
      "timeout": "Timeout",
      "latency": "Latency",
      "records": "Records received",
      "errors": "Rejected records",
      "quality": "Data quality",
      "health": "Health",
      "mappings": "Field mappings",
      "tabOverview": "Overview",
      "tabMapping": "Mapping studio",
      "tabFlow": "Data flow",
      "tabHealth": "Health",
      "tabEvents": "Events",
      "tabFault": "Fault injection",
      "sourceField": "Source field",
      "targetField": "Platform field",
      "sourceUnit": "Sends",
      "targetUnit": "Stored as",
      "range": "Valid range",
      "required": "Required",
      "optional": "Optional",
      "unbounded": "Unbounded",
      "addMapping": "Add mapping",
      "saveMapping": "Save",
      "removeMapping": "Remove",
      "mappingSaved": "Mapping saved. Run a sync to see its effect.",
      "mappingRemoved": "Mapping removed. This field will no longer reach the platform.",
      "noMappings": "No fields are mapped. Every record from this source would be rejected.",
      "test": "Test connection",
      "sync": "Sync now",
      "preview": "Preview data",
      "testing": "Testing",
      "syncing": "Syncing",
      "reachable": "Responded",
      "unreachable": "No response",
      "testDemoNote": "The demo generator responded. No external system was contacted.",
      "syncResult": "{accepted} of {total} records accepted",
      "rejected": "Rejected",
      "rejectionReasons": "Why records were rejected",
      "previewTitle": "What this source is sending",
      "previewNote": "Shown as received and as stored, so a unit mistake is visible rather than buried.",
      "asReceived": "As received",
      "asStored": "As stored",
      "pipeline": "Pipeline",
      "stageReceive": "Receive",
      "stageMap": "Map",
      "stageConvert": "Convert",
      "stageValidate": "Validate",
      "stageDeduplicate": "Deduplicate",
      "stageStore": "Store",
      "stageIn": "In",
      "stageOut": "Out",
      "stageDropped": "Dropped",
      "qualityFactors": "Quality factors",
      "completeness": "Completeness",
      "freshness": "Freshness",
      "validity": "Validity",
      "consistency": "Consistency",
      "availability": "Availability",
      "trust": "Trust",
      "weakest": "Weakest factor",
      "weakestNote": "The score is capped by this factor rather than averaged with it. A source delivering two records in five is not a good source however clean those two are.",
      "trustCapNote": "Trust is capped at 70 for a demo source. A generator agrees with itself perfectly, and scoring that as full trust would be measuring the generator rather than the grid.",
      "faultTitle": "Inject a fault",
      "faultNote": "Degrades this demo connector so the platform's response to a failing source can be watched. Demo connectors only — deliberately degrading a real feed is an outage, not a demonstration.",
      "faultActive": "Fault active",
      "faultClear": "Clear fault",
      "faultInjected": "Fault injected. Sync again to see its effect on quality.",
      "faultCleared": "Fault cleared.",
      "faultRefused": "Faults can only be injected into demo connectors.",
      "eventsTitle": "Recent batches",
      "noEvents": "No batches recorded yet.",
      "healthHistory": "Health history",
      "trend": "Trend",
      "tabReadiness": "Readiness"
    },
    "fault": {
      "none": "None",
      "connection_loss": "Connection loss",
      "high_latency": "High latency",
      "stale_data": "Stale data",
      "sensor_failure": "Sensor failure",
      "bad_data": "Corrupt values",
      "partial_data": "Partial delivery"
    },
    "reason": {
      "unknown_asset": "Unknown asset",
      "missing_field": "Required field missing",
      "wrong_type": "Wrong type",
      "out_of_range": "Out of range",
      "duplicate": "Duplicate",
      "future_timestamp": "Timestamp in the future",
      "stale_timestamp": "Timestamp too old",
      "unmapped": "No mapping"
    }
  },
  "audit": {
    "title": "Audit log",
    "subtitle": "Who did what, when, and what changed.",
    "columns": {
      "time": "Time",
      "user": "User",
      "role": "Role",
      "action": "Action",
      "entity": "Entity",
      "ip": "IP address",
      "status": "Result"
    },
    "before": "Before",
    "after": "After",
    "noChange": "No field-level change recorded",
    "empty": "No audit entry matches these filters."
  },
  "settings": {
    "title": "Settings",
    "subtitle": "Tune how the platform scores risk and when it escalates.",
    "groups": {
      "risk": "Risk engine weights",
      "escalation": "Escalation thresholds",
      "prediction": "Prediction",
      "runtime": "Runtime"
    },
    "riskNote": "These weights feed directly into the risk score shown across the platform. Changing one changes every number derived from it.",
    "restoreDefaults": "Restore defaults",
    "restored": "Defaults restored",
    "weightSum": "Stress weights total {value}",
    "weightSumNote": "Weights are normalised, so they do not need to sum to exactly 1.",
    "preview": "Effect preview",
    "previewNote": "How the current weights score the highest-risk asset right now.",
    "profile": "Your profile",
    "preferredLanguage": "Preferred language",
    "saveProfile": "Save preferences"
  },
  "users": {
    "title": "Users",
    "subtitle": "Who can sign in, and what they can do.",
    "columns": {
      "name": "Name",
      "email": "Email",
      "employeeId": "Employee ID",
      "department": "Department",
      "roles": "Roles",
      "status": "Status",
      "lastLogin": "Last sign-in"
    },
    "active": "Active",
    "inactive": "Deactivated",
    "activate": "Activate",
    "deactivate": "Deactivate",
    "changeRole": "Change role",
    "roleChanged": "Role updated",
    "statusChanged": "Status updated",
    "never": "Never",
    "empty": "No user matches these filters."
  },
  "roles": {
    "title": "Roles & permissions",
    "subtitle": "Every permission each role holds. Authorisation is enforced on the server for every request.",
    "permission": "Permission",
    "granted": "Granted",
    "notGranted": "Not granted",
    "userCount": "{count} users",
    "permissionCount": "{count} permissions",
    "resource": "Resource",
    "matrixNote": "Hiding a control in the interface is a usability affordance. The check that matters happens on the server, and every denial is written to the audit log."
  },
  "demo": {
    "title": "Demo mode",
    "subtitle": "The full NABDH story, from a normal grid to a prevented failure.",
    "start": "Start demo",
    "starting": "Starting…",
    "restart": "Restart demo",
    "exit": "Exit demo",
    "next": "Next step",
    "previous": "Previous step",
    "stage": "Stage {current} of {total}",
    "presentationMode": "Presentation mode",
    "clockNote": "Demo mode runs against a pinned simulated clock so the summer peak scenario reproduces in any season. Every value shown is computed live by the same engines the operational views use.",
    "virtualTime": "Simulated time",
    "prevented": {
      "title": "Potential failure prevented",
      "customersProtected": "Customers protected",
      "downtimeAvoided": "Downtime avoided",
      "capacityProtected": "Capacity protected",
      "operationalImpact": "Estimated operational impact",
      "note": "These are demo estimates derived from the simulation above."
    },
    "narration": "What is happening",
    "keyNumbers": "Key numbers"
  },
  "controlRoom": {
    "title": "Control room",
    "subtitle": "Full-screen situational display.",
    "enter": "Enter control room",
    "exit": "Exit",
    "fullscreen": "Full screen",
    "liveAlerts": "Live alerts",
    "weather": "Weather",
    "renewableProduction": "Renewable production",
    "criticalAssets": "Critical assets",
    "predictions": "Predictions"
  },
  "why": {
    "title": "Why NABDH?",
    "subtitle": "What changes when monitoring becomes prediction.",
    "traditional": "Traditional monitoring",
    "traditionalFlow": "Monitor → Alert → React",
    "nabdh": "NABDH",
    "nabdhFlow": "Monitor → Understand → Predict → Simulate → Prevent",
    "pillars": {
      "dna": "Failure DNA",
      "dnaBody": "Past failures become searchable signatures, so a dangerous pattern is recognised the second time it appears.",
      "timeMachine": "Energy Time Machine",
      "timeMachineBody": "The consequence of doing nothing is visible before the decision has to be made.",
      "explainable": "Explainable prediction",
      "explainableBody": "Every point of the score traces to a measurable factor an engineer can check.",
      "preventive": "Preventive simulation",
      "preventiveBody": "Nothing is dispatched before its effect has been measured on the twin.",
      "copilot": "AI grid copilot",
      "copilotBody": "Questions in Arabic or English, answered from live grid state."
    },
    "comparison": {
      "aspect": "Aspect",
      "detection": "Detection",
      "detectionTraditional": "After a threshold is crossed",
      "detectionNabdh": "When the pattern starts to form",
      "explanation": "Explanation",
      "explanationTraditional": "Which limit fired",
      "explanationNabdh": "Which factors contributed, and by how much",
      "future": "Future view",
      "futureTraditional": "None",
      "futureNabdh": "Forward simulation to the point of failure",
      "action": "Action",
      "actionTraditional": "Operator judgement under time pressure",
      "actionNabdh": "Sized, simulated and ranked options"
    }
  },
  "errors": {
    "notFound": "Page not found",
    "notFoundBody": "The page you asked for does not exist. It may have been moved.",
    "goHome": "Go to the Command Center",
    "unexpected": "Unexpected error",
    "unexpectedBody": "Something failed while rendering this page. The incident has been logged.",
    "reload": "Reload"
  },
  "a11y": {
    "skipToContent": "Skip to main content",
    "mainNavigation": "Main navigation",
    "userMenu": "User menu",
    "toggleSidebar": "Toggle navigation",
    "closeDialog": "Close dialogue",
    "sortBy": "Sort by {column}",
    "riskGauge": "Risk gauge showing {value} percent",
    "chartSummary": "Chart data is also available in the table below.",
    "liveRegion": "Live grid updates",
    "mapDescription": "Interactive map of monitored grid assets across Saudi Arabia. A sortable table of the same assets follows."
  },
  "agents": {
    "title": "AI agents",
    "status": {
      "clear": "Clear",
      "observing": "Observing",
      "flagged": "Flagged",
      "alarming": "Alarming",
      "decided": "Decision"
    },
    "severity": {
      "info": "Information",
      "watch": "Watch",
      "warning": "Warning",
      "critical": "Critical"
    },
    "inputs": "Inputs read",
    "findings": "Findings",
    "confidence": "Confidence",
    "dataQuality": "Data quality",
    "duration": "Analysis cost",
    "noFindings": "No findings above the reporting threshold.",
    "key": {
      "grid_watch": "Grid Watch",
      "failure_hunter": "Failure Hunter",
      "load_guardian": "Load Guardian",
      "renewable_intelligence": "Renewable Intelligence",
      "asset_health": "Asset Health",
      "maintenance": "Maintenance",
      "simulation": "Simulation",
      "prevention": "Prevention",
      "orchestrator": "NABDH Orchestrator"
    }
  },
  "aiOps": {
    "title": "AI Operations Room",
    "subtitle": "Eight specialist agents read the same instant, and the orchestrator reconciles them into one assessment.",
    "collaboration": "Agent collaboration",
    "collaborationHint": "Each step is one agent's conclusion, in the order the pass ran. Evidence is shown; internal deliberation is not.",
    "unifiedRisk": "Unified risk",
    "rationale": "Decision rationale",
    "focusAsset": "Asset under analysis",
    "changeAsset": "Analyse another asset",
    "runPass": "Run and record a pass",
    "passRecorded": "Pass recorded in the decision audit trail.",
    "openAgent": "Open agent detail",
    "band": {
      "stable": "Stable",
      "watch": "Watch",
      "elevated": "Elevated",
      "high": "High",
      "critical": "Critical"
    }
  },
  "confidence": {
    "title": "Decision confidence",
    "recommendation": "Recommendation",
    "data": "Data",
    "prediction": "Prediction",
    "simulation": "Simulation",
    "overall": "Overall",
    "lowData": "Low data confidence",
    "cappedHint": "Overall confidence is capped by its weakest input; an average alone would hide a thin one.",
    "band": {
      "excellent": "Excellent",
      "good": "Good",
      "limited": "Limited",
      "low": "Low"
    }
  },
  "preventionWindow": {
    "title": "Prevention window",
    "eventIn": "Predicted event in",
    "actBefore": "Act before",
    "safeWindow": "Safe action window",
    "execution": "Execution time",
    "buffer": "Approval buffer",
    "expired": "The window has closed; the strategy can no longer take effect in time.",
    "none": "No limit breach is predicted inside the horizon.",
    "estimated": "Estimated"
  },
  "uncertainty": {
    "title": "Uncertainty range",
    "best": "Best case",
    "expected": "Expected",
    "worst": "Worst case",
    "hint": "The band widens as prediction confidence falls. The point estimate alone would imply a precision the forward walk does not have.",
    "subtitle": "How likely, how soon, and how much of that is knowable",
    "probability": "Probability of the event",
    "window": "Likely window",
    "windowNote": "The band widens as confidence falls and as the event moves further away.",
    "noCrossing": "No limit crossing is predicted inside the horizon, so no window is claimed.",
    "predictionConfidence": "Prediction confidence",
    "dataConfidence": "Data confidence",
    "modelConfidence": "Model confidence",
    "twinFidelity": "Twin fidelity",
    "why": "Why this confidence?",
    "hideWhy": "Hide the breakdown",
    "reducedFrom": "Confidence reduced",
    "degraded": "Degraded",
    "nominal": "Nominal"
  },
  "weakSignals": {
    "title": "Weak signal detection",
    "subtitle": "Deviations too small to trip an alarm individually, measured together against the digital twin.",
    "combined": "Combined pattern strength",
    "channel": "Channel",
    "observed": "Observed",
    "expected": "Expected",
    "deviation": "Deviation",
    "threshold": "Own threshold",
    "traditionalSounding": "A conventional threshold alarm is already sounding.",
    "traditionalSilent": "No conventional alarm has fired yet.",
    "patternFound": "Coherent pattern detected",
    "noPattern": "No coherent pattern",
    "leadTime": "Detected earlier than a threshold alarm by",
    "key": {
      "load": "Loading",
      "temperature": "Temperature",
      "voltage": "Voltage",
      "cooling": "Cooling effectiveness",
      "health": "Condition"
    }
  },
  "rootCause": {
    "title": "Root cause",
    "subtitle": "The conditions that could produce the observed state, ranked on measured evidence.",
    "primary": "Most likely cause",
    "alternatives": "Contributing causes",
    "evidence": "Evidence",
    "chain": "Causal chain",
    "investigation": "Recommended investigation",
    "empty": "No condition deviates enough from the baseline to explain an elevated state.",
    "stage": {
      "cause": "Cause",
      "condition": "Condition",
      "event": "Event",
      "impact": "Impact"
    }
  },
  "cascade": {
    "title": "Domino View",
    "subtitle": "Where an asset's load goes when it stops carrying it, one hop at a time.",
    "origin": "Origin",
    "run": "Run cascade",
    "affectedAssets": "Assets reached",
    "affectedCustomers": "Customers exposed",
    "affectedMw": "Load implicated",
    "unserved": "Load with nowhere to go",
    "depth": "Propagation depth",
    "regionalRisk": "Regional risk",
    "contained": "Propagation stops at",
    "timeline": "Propagation timeline",
    "probability": "Probability",
    "empty": "The surrounding network absorbs the transfer; nothing propagates.",
    "history": "Recorded runs",
    "noHistory": "No cascade runs recorded yet.",
    "mechanism": {
      "origin_failure": "Origin failure",
      "load_transfer": "Load transfer",
      "line_overload": "Line overload",
      "bus_stress": "Busbar stress",
      "unserved_load": "Unserved load"
    },
    "outcome": {
      "failed": "Gives way",
      "stressed": "Strained",
      "unserved": "Interrupted"
    }
  },
  "futures": {
    "title": "Future branches",
    "subtitle": "The same instant, three ways. Each branch is a full re-run of the twin, not a label.",
    "no_action": "No action",
    "operator_action": "Operator action",
    "nabdh_strategy": "NABDH strategy",
    "risk": "Risk at horizon",
    "assets": "Assets affected",
    "customers": "Customers affected",
    "downtime": "Potential downtime",
    "breaches": "Reaches a limit breach",
    "noBreach": "Stays within limits",
    "actions": "Actions applied",
    "estimate": "Demo estimate",
    "horizonNote": "Peak risk reached anywhere in the next {minutes} minutes — a strategy that holds at the predicted event can still be overtaken later as demand keeps climbing."
  },
  "counterfactual": {
    "title": "Counterfactual Explorer",
    "subtitle": "Not what will happen — what is the smallest change that stops it.",
    "question": "What needs to change?",
    "objective": "Target",
    "objectiveKey": {
      "risk_below": "Reduce risk below",
      "prevent_breach": "Prevent the predicted breach",
      "stability_above": "Keep grid stability above"
    },
    "targetValue": "Target value",
    "search": "Find the minimum intervention",
    "searching": "Searching…",
    "minimum": "Minimum recommended intervention",
    "achieved": "Target reached",
    "notAchieved": "Target not reachable with the available levers",
    "dose": "Dose",
    "contribution": "Risk points removed",
    "utilisation": "Share of available headroom",
    "evaluations": "Twin evaluations",
    "totalCost": "Estimated cost",
    "before": "Before",
    "after": "After",
    "history": "Recorded searches",
    "noHistory": "No counterfactual searches recorded yet.",
    "levers": "Available levers",
    "noLevers": "No levers are available around this asset right now.",
    "pruningHint": "Each lever is then shrunk as far as the target allows, so the answer is minimal rather than merely sufficient."
  },
  "selfHealing": {
    "title": "Self-Healing Lab",
    "subtitle": "Candidate recovery strategies, each simulated on the digital twin and scored on the same objective.",
    "objective": "Objective weighting",
    "objectiveKey": {
      "balanced": "Balanced",
      "risk_first": "Risk first",
      "cost_first": "Cost first",
      "speed_first": "Speed first",
      "customer_first": "Customer impact first"
    },
    "run": "Generate and compare strategies",
    "strategy": "Strategy",
    "score": "Objective score",
    "recommended": "Recommended",
    "riskAfter": "Risk after",
    "cost": "Cost",
    "executionTime": "Execution",
    "customerImpact": "Customers affected",
    "terms": "Objective terms",
    "simulationOnly": "Execution in this build is a simulation. No control action is issued to any network.",
    "metric": {
      "riskReduction": "Risk reduction",
      "operationalCost": "Operational cost",
      "customerImpact": "Customer impact",
      "executionTime": "Execution time",
      "assetStress": "Remaining asset stress",
      "renewableCurtailment": "Renewable curtailment",
      "batteryUsage": "Battery energy used",
      "loadReduction": "Load moved",
      "maintenanceCost": "Maintenance cost"
    },
    "raise": "Raise for approval",
    "raised": "Raised for review"
  },
  "knowledge": {
    "title": "Energy Knowledge Graph",
    "subtitle": "Physical entities and the causal concepts that connect them, in one navigable structure.",
    "search": "Search the graph",
    "searchPlaceholder": "Asset, region, incident or concept…",
    "focus": "Focused on",
    "relations": "Relations",
    "noResults": "Nothing matches that search.",
    "selectHint": "Select a node to see what it connects to.",
    "depth": "Depth",
    "kind": {
      "concept": "Concept",
      "region": "Region",
      "asset": "Asset",
      "site": "Site",
      "incident": "Incident",
      "pattern": "Failure pattern",
      "alert": "Alert",
      "prediction": "Prediction",
      "weather": "Weather",
      "action": "Action",
      "role": "Role"
    }
  },
  "warRoom": {
    "title": "AI War Room",
    "subtitle": "Everything one decision needs, and nothing else.",
    "incidentClock": "Time to predicted event",
    "estimated": "Estimated — not a countdown to a certain event",
    "activeTitle": "War room active",
    "activeBody": "Unified risk is above the configured threshold.",
    "standbyTitle": "Standby",
    "standbyBody": "No situation currently exceeds the war-room threshold; this is the closest one.",
    "threshold": "Threshold",
    "patterns": "Matching prevention patterns",
    "noPatterns": "No stored pattern matches this situation.",
    "patternSimilarity": "Similarity",
    "patternSuccess": "Recorded reduction",
    "decisions": "Decisions on this asset",
    "noDecisions": "No decision has been raised for this asset."
  },
  "radar": {
    "title": "National Risk Radar",
    "subtitle": "Four orderings of the same fleet, because \"what should I look at\" has four answers.",
    "criticalAssets": "Top exposure",
    "regions": "Regions by exposure",
    "emerging": "Emerging risks",
    "cascadeRisks": "Cascade risks",
    "maintenancePriorities": "Maintenance priorities",
    "weakestLink": "Weakest link",
    "findWeakest": "Find the weakest link",
    "criticality": "Criticality",
    "failureImpact": "Failure impact",
    "recovery": "Recovery difficulty",
    "exposure": "Exposure",
    "backup": "Backup capacity",
    "redundant": "Redundant cover available",
    "notRedundant": "No redundant cover",
    "reason": "Why",
    "downstream": "Customers downstream"
  },
  "stressTest": {
    "title": "Grid stress test",
    "subtitle": "Demand is raised in steps and the whole twin is re-run at each one, until something gives.",
    "run": "Run stress test",
    "running": "Running…",
    "breakingPoint": "Breaking point",
    "noBreakingPoint": "No limit exceeded across the tested range.",
    "maxSafeLoad": "Maximum safe load",
    "weakestAsset": "First asset to give way",
    "sequence": "Failure sequence",
    "step": "Demand increase",
    "assetsOverLimit": "Assets over limit",
    "scope": "Scope",
    "national": "National"
  },
  "digitalTwin": {
    "title": "Digital Twin Sandbox",
    "subtitle": "Change the conditions, run the twin, and read the consequences.",
    "conditions": "Conditions",
    "builder": "Scenario builder",
    "builderHint": "Stack conditions to compose a scenario, then run it.",
    "run": "Run simulation",
    "running": "Running…",
    "reset": "Reset",
    "outcome": "Outcome",
    "baseline": "Baseline",
    "simulated": "Simulated",
    "delta": "Change",
    "blocks": {
      "heat_wave": "Heat wave",
      "solar_drop": "Solar drop",
      "ev_spike": "EV demand spike",
      "industrial_surge": "Industrial surge",
      "wind_lull": "Wind lull",
      "asset_outage": "Asset outage"
    },
    "selectRegion": "Region",
    "allRegions": "All regions",
    "empty": "Add at least one condition to run a scenario."
  },
  "decisions": {
    "title": "Decision records",
    "subtitle": "Every recommendation lands here as a record that a named human moves forward.",
    "status": {
      "pending": "Pending review",
      "operator_approved": "Operator approved",
      "approved": "Approved",
      "rejected": "Rejected",
      "simulated": "Simulated",
      "withdrawn": "Withdrawn"
    },
    "step": {
      "operator": "Operator",
      "supervisor": "Supervisor"
    },
    "decision": {
      "pending": "Awaiting",
      "approved": "Approved",
      "rejected": "Rejected",
      "modified": "Sent back"
    },
    "approve": "Approve",
    "reject": "Reject",
    "modify": "Send back",
    "simulate": "Simulate again",
    "execute": "Execute (simulated)",
    "rationale": "Rationale",
    "outcome": "Outcome",
    "approvals": "Approval trail",
    "empty": "No decision records yet.",
    "raise": "Raise a decision",
    "workflow": "AI detects, predicts, simulates and recommends. A person reviews, a supervisor approves, and execution stays simulated.",
    "comment": "Comment",
    "commentPlaceholder": "Optional note for the record",
    "riskChange": "Risk change",
    "noPermission": "You do not have permission to act on this step."
  },
  "hackathon": {
    "title": "NABDH in one page",
    "subtitle": "Predict. Understand. Simulate. Decide. Prevent — the whole journey, on one screen.",
    "judgeMode": "Try it yourself",
    "judgeHint": "Pick a scenario and the platform runs it live against the same engine.",
    "scenario": {
      "extreme_heat": "Extreme heat",
      "transformer_failure": "Transformer failure",
      "demand_spike": "Demand spike"
    },
    "running": "Running the scenario…",
    "step": {
      "observe": "Observe",
      "understand": "Understand",
      "predict": "Predict",
      "simulate": "Simulate",
      "prevent": "Prevent"
    },
    "traditionalTitle": "Traditional alarm versus NABDH",
    "traditionalAlarm": "Threshold alarm",
    "nabdhDetection": "NABDH detection",
    "leadTime": "Prevention window gained",
    "leadTimeHint": "Measured by replaying the same asset minute by minute and recording when each detector would first have fired.",
    "openFull": "Open the full page"
  },
  "objective": {
    "title": "Objective function",
    "weight": "Weight",
    "value": "Value",
    "normalised": "Normalised",
    "hint": "Terms are normalised across the candidate set, so each figure is read against the alternatives actually on the table."
  },
  "mode": {
    "live": {
      "label": "Live data",
      "short": "Live",
      "body": "Readings come from the platform's telemetry layer."
    },
    "simulation": {
      "label": "Simulation",
      "short": "Sim",
      "body": "Every figure on this screen is computed, not measured. Do not act on it as an operational reading."
    },
    "demo": {
      "label": "Demo mode",
      "short": "Demo",
      "body": "A pinned scenario on a simulated clock, for demonstration."
    },
    "sandbox": {
      "label": "Twin sandbox",
      "short": "Sandbox",
      "body": "You are working inside the digital twin. Nothing here reaches the live state."
    }
  },
  "commandBar": {
    "dataHealth": "Data health",
    "critical": "{count} critical",
    "time": "Local time"
  },
  "palette": {
    "open": "Search",
    "title": "Command palette",
    "placeholder": "Search assets, incidents, or type a command…",
    "noResults": "Nothing matches.",
    "hint": "Type to search across the platform",
    "immersive": "Open immersive demo",
    "runScenario": "Build a scenario",
    "lightMode": "Switch to light mode",
    "darkMode": "Switch to dark mode",
    "highContrast": "High contrast on",
    "normalContrast": "High contrast off",
    "reduceMotion": "Reduce motion",
    "fullMotion": "Full motion",
    "switchLanguage": "Switch language",
    "group": {
      "navigate": "Go to",
      "action": "Action",
      "appearance": "Appearance"
    },
    "area": {
      "command-center": "Command Center",
      "digital-twin": "Digital Twin",
      "war-room": "War Room",
      "assets": "Assets",
      "map": "Map",
      "resilience": "Resilience",
      "ai-operations": "AI Operations",
      "risk-radar": "Risk Radar",
      "trust": "Trust Center",
      "cascade": "Domino View",
      "counterfactual": "Counterfactual",
      "self-healing": "Self-Healing",
      "hackathon": "Hackathon",
      "demo": "Demo"
    }
  },
  "copilotDock": {
    "title": "NABDH Copilot",
    "local": "On-device",
    "intro": "Ask about what is on screen. Answers come from the same engines the console uses — never from a language model.",
    "ask": "Ask",
    "hint": "Enter to send · Shift+Enter for a new line",
    "placeholder": "Why is risk rising?",
    "placeholderSimulate": "Ask a question, or start with \"simulate…\"",
    "basedOn": "Computed from",
    "parsed": "Understood as",
    "notParsed": "Nothing runnable was found in that sentence.",
    "unresolved": "Could not place",
    "runScenario": "Preview in the twin",
    "contextAsset": "Context: {asset}",
    "contextArea": "Context: {area}",
    "suggest": {
      "whyRisk": "Why is risk rising on {asset}?",
      "future": "What happens to {asset} in an hour?",
      "minimum": "What is the minimum action for {asset}?",
      "cascade": "Show the domino chain from {asset}",
      "riskiest": "Which asset is most at risk now?",
      "weakest": "What is the weakest link?",
      "compare": "Compare the strategies",
      "worst": "What is the worst case?"
    }
  },
  "source": {
    "live": "Live",
    "simulated": "Simulated",
    "predicted": "Predicted",
    "estimated": "Estimated",
    "synthetic": "Synthetic",
    "manual": "Manual",
    "label": "Source",
    "timestamp": "Recorded",
    "confidence": "Confidence"
  },
  "twin": {
    "title": "Digital Twin",
    "subtitle": "A working copy of the grid: observe it, take it into the future, and test the decision before making it.",
    "level": {
      "national": "National",
      "region": "Region",
      "site": "Substation",
      "asset": "Asset"
    },
    "levelHint": "National → region → substation → asset",
    "mode": {
      "shadow": "Shadow",
      "sandbox": "Sandbox",
      "shadowBody": "The twin observes and compares. It proposes nothing and changes nothing.",
      "sandboxBody": "Conditions can be changed and simulated here. Nothing reaches the live state."
    },
    "view": {
      "standard": "Standard",
      "xray": "X-ray",
      "thermal": "Thermal",
      "risk": "Risk",
      "xrayHint": "Hides the shell and shows energy paths, sensors and dependency links.",
      "thermalHint": "Shades each unit by how much of its thermal headroom is gone."
    },
    "layers": "Layers",
    "layer": {
      "assets": "Assets",
      "flow": "Energy flow",
      "load": "Load",
      "risk": "Risk",
      "weather": "Weather",
      "renewables": "Renewables",
      "prediction": "Failure prediction",
      "cascade": "Cascading risk",
      "maintenance": "Maintenance",
      "twin": "Digital twin",
      "sensors": "Sensors"
    },
    "sensors": "Sensor overlay",
    "sensorTrust": "Trust",
    "lastReading": "Last reading",
    "trend": {
      "rising": "Rising",
      "falling": "Falling",
      "steady": "Steady"
    },
    "fidelity": "Twin fidelity",
    "fidelityHint": "How much of this twin is measurement rather than inference.",
    "fidelityBand": {
      "high": "High",
      "good": "Good",
      "limited": "Limited",
      "low": "Low"
    },
    "fidelityFactor": {
      "sensorCoverage": "Sensor coverage",
      "dataFreshness": "Data freshness",
      "sensorTrust": "Sensor trust",
      "modelCoverage": "Model coverage",
      "historicalDepth": "History depth"
    },
    "lastSync": "Last synchronised",
    "sensorsOnline": "Sensors online",
    "deviation": "Twin deviation",
    "deviationHint": "Where the model and the instruments disagree — and which of the two is suspected.",
    "deviationNone": "The twin and the instruments agree within tolerance.",
    "expected": "Model",
    "observed": "Instrument",
    "cause": {
      "sensor_fault": "Sensor fault",
      "model_drift": "Model drift",
      "unexpected_behaviour": "Unexpected behaviour",
      "asset_degradation": "Asset degradation"
    },
    "ghost": "Ghost future",
    "ghostHint": "The asset now, drawn solid, and where it is heading, drawn through it.",
    "ghostNow": "Now",
    "ghostFuture": "At +{minutes} min",
    "split": "Split future",
    "splitHint": "The same minutes, twice: without the intervention and with it.",
    "without": "Without NABDH",
    "with": "With NABDH",
    "timeline": "Timeline",
    "play": "Play",
    "pause": "Pause",
    "step": "Step",
    "rewind": "Rewind",
    "speed": "Speed",
    "inspector": "Inspector",
    "tab": {
      "overview": "Overview",
      "live": "Live",
      "health": "Health",
      "prediction": "Prediction",
      "dna": "Failure DNA",
      "maintenance": "Maintenance",
      "dependencies": "Dependencies",
      "simulations": "Simulations",
      "history": "History"
    },
    "dependencies": {
      "upstream": "Upstream",
      "focus": "This asset",
      "downstream": "Downstream",
      "customers": "Customers behind it",
      "none": "Nothing recorded on this side."
    },
    "selectAsset": "Select an asset in the scene to inspect it.",
    "snapshot": "Snapshot",
    "snapshotTaken": "Snapshot captured before the run.",
    "webglFallback": "Rendered as a 2-D network. Your browser or device did not offer WebGL.",
    "view3d": "3-D",
    "view2d": "2-D",
    "loadingScene": "Building the scene…",
    "members": "Members",
    "autonomy": "Autonomy",
    "autonomyLevel": {
      "0": "L0 · Monitor",
      "1": "L1 · Predict",
      "2": "L2 · Recommend",
      "3": "L3 · Simulate",
      "4": "L4 · Approved automation"
    },
    "autonomyNote": "This build stops at L3. Nothing here can issue a control action to a network.",
    "mobileNote": "The full twin is built for a large screen. On a phone this page shows the scene, the readings and the inspector; the scenario canvas and the timeline are easier to drive on a desktop."
  },
  "scenarioCanvas": {
    "title": "Scenario canvas",
    "hint": "Stack events on a timeline, then run them against the twin.",
    "addEvent": "Add event",
    "remove": "Remove",
    "magnitude": "Magnitude",
    "startsAt": "Starts at",
    "lasts": "Lasts",
    "run": "Run scenario",
    "empty": "Add at least one event.",
    "presets": "Preset scenarios",
    "generate": "Generate",
    "generateWorst": "Generate worst case",
    "generateRealistic": "Generate realistic case",
    "findHidden": "Find hidden risk",
    "generated": "Generated scenario",
    "surprise": "Surprise me",
    "event": {
      "heat_wave": "Heat wave",
      "load_spike": "Load spike",
      "solar_drop": "Solar drop",
      "wind_surge": "Wind shortfall",
      "transformer_degradation": "Transformer degradation",
      "line_failure": "Line failure",
      "battery_failure": "Battery failure",
      "ev_surge": "EV surge",
      "industrial_surge": "Industrial surge",
      "asset_outage": "Asset outage",
      "maintenance_outage": "Maintenance outage",
      "battery_dispatch": "Battery dispatch"
    }
  },
  "simProgress": {
    "title": "Running",
    "step": {
      "snapshot": "Building twin state",
      "grid": "Running grid model",
      "cascade": "Analysing cascades",
      "strategies": "Testing strategies",
      "futures": "Calculating future branches",
      "recommendation": "Generating recommendation"
    }
  },
  "resilience": {
    "title": "Resilience Lab",
    "subtitle": "Not whether something is about to go wrong — how well this grid would take it if something did.",
    "score": "Resilience score",
    "band": {
      "robust": "Robust",
      "sound": "Sound",
      "exposed": "Exposed",
      "brittle": "Brittle"
    },
    "factor": {
      "redundancy": "Redundant cover",
      "availableCapacity": "Reserve margin",
      "assetHealth": "Fleet condition",
      "batteryReserve": "Storage reserve",
      "loadFlexibility": "Demand flexibility",
      "renewableStability": "Renewable steadiness",
      "recoveryOptions": "Restoration paths",
      "cascadeContainment": "Cascade containment"
    },
    "weakest": "Largest single weakness",
    "envelope": "Safe operating envelope",
    "envelopeHint": "The band the twin says this grid can be operated inside today.",
    "currentLoad": "Current loading",
    "maxRecommended": "Maximum recommended",
    "heatAdjusted": "Heat-adjusted maximum",
    "headroom": "Headroom remaining",
    "safeZone": "Safe zone",
    "dangerZone": "Danger zone",
    "outsideEnvelope": "Operating outside the safe envelope.",
    "lab": "Disturbance test",
    "disturbance": {
      "heat_wave": "Heat wave",
      "multi_failure": "Multiple asset failure",
      "demand_surge": "Demand surge",
      "renewable_drop": "Renewable drop",
      "maintenance_outage": "Maintenance outage",
      "baseline": "Baseline"
    },
    "run": "Run test",
    "before": "Before",
    "during": "During",
    "after": "After",
    "recovery": "Recovery time",
    "history": "Recorded tests",
    "noHistory": "No resilience tests recorded yet.",
    "breakingPoint": "Find breaking point",
    "adversarial": "Adversarial twin",
    "adversarialHint": "The least unusual combination of ordinary conditions that pushes an asset critical.",
    "adversarialRun": "Search for a failure path",
    "plausibility": "Plausibility cost",
    "found": "Combination found",
    "notFound": "No ordinary combination reached the target"
  },
  "trust": {
    "title": "AI Trust Center",
    "subtitle": "What the models are, how confident they are, and where they have been wrong.",
    "models": "Models",
    "dataQuality": "Data quality",
    "drift": "Model drift",
    "decisions": "Decision history",
    "calibration": "Twin calibration",
    "calibrationHint": "Predicted against subsequently observed, per channel.",
    "predicted": "Predicted",
    "observed": "Observed",
    "deviation": "Deviation",
    "meanError": "Mean absolute error",
    "bias": "Bias",
    "driftState": {
      "stable": "Stable",
      "drifting": "Drifting",
      "diverged": "Diverged"
    },
    "autonomy": "Autonomy level",
    "noModel": "No trained model. Every engine here is deterministic and physically motivated."
  },
  "immersive": {
    "start": "Begin",
    "next": "Next",
    "exit": "Exit",
    "replay": "Replay",
    "tagline": "National Energy Intelligence",
    "prevented": "Potential failure prevented",
    "closing": "Predict. Understand. Simulate. Decide. Prevent.",
    "tryIt": "Try NABDH",
    "step": {
      "1": "The national grid",
      "2": "A weak signal in Riyadh",
      "3": "Into the digital twin",
      "4": "Failure DNA match",
      "5": "The ghost future",
      "6": "Where it would spread",
      "7": "Two futures",
      "8": "Strategies",
      "9": "The smallest intervention",
      "10": "The decision"
    }
  },
  "dnaVisual": {
    "title": "Signature comparison",
    "current": "Current pattern",
    "historical": "Historical failure",
    "similarity": "Similarity",
    "galaxy": "Failure pattern space",
    "galaxyHint": "Every recorded failure placed by its signature. The current asset moves through this space as its state changes.",
    "cluster": {
      "normal": "Normal",
      "thermal": "Thermal failure",
      "overload": "Overload",
      "voltage": "Voltage instability"
    }
  },
  "decisionLens": {
    "title": "AI decision lens",
    "hint": "What the platform is weighting when it looks at this asset."
  },
  "agentStream": {
    "title": "Agent activity",
    "hint": "Conclusions as they were reached. Evidence is shown; internal deliberation is not."
  },
  "strategyMatrix": {
    "title": "Strategy trade-off",
    "hint": "Cost against risk removed. Bubble size is the number of customers affected.",
    "cost": "Operational cost",
    "reduction": "Risk reduction"
  },
  "reports": {
    "title": "Reports",
    "subtitle": "Everything the platform computed, in a form that can leave the screen.",
    "incident": "Incident report",
    "twin": "Digital twin report",
    "simulation": "Simulation report",
    "risk": "Risk report",
    "resilience": "Resilience report",
    "executive": "Executive brief",
    "generate": "Generate",
    "print": "Print or save as PDF",
    "generatedAt": "Generated",
    "beforeAfter": "Before and after",
    "change": "Change",
    "shareable": "Shareable reference"
  },
  "uiState": {
    "loading": "Loading…",
    "empty": "Nothing to show",
    "noResults": "No results",
    "error": "Something went wrong",
    "offline": "Connection lost",
    "partial": "Partial data",
    "permissionDenied": "You do not have access to this",
    "simulationRunning": "Simulation running",
    "simulationFailed": "Simulation failed",
    "success": "Done",
    "stale": "Data may be out of date",
    "lowConfidence": "Low confidence",
    "retry": "Try again"
  },
  "physics": {
    "title": "Physics",
    "subtitle": "Engineering limits, and whether a recommendation respects them",
    "envelopeTitle": "Safe operating envelope",
    "envelopeSubtitle": "Where this asset is allowed to run under today’s conditions",
    "validationTitle": "Physics validation",
    "validationSubtitle": "Every applicable constraint, measured against the proposed end state",
    "current": "Current",
    "adjustedCeiling": "Ceiling today",
    "headroom": "Headroom",
    "trackLegend": "normal · recommended · warning · critical · limit",
    "whyCeiling": "What moved the ceiling",
    "noPenalties": "Nothing is derating this asset today; the ceiling is at its nominal value.",
    "noChecks": "No constraint applies to this proposal, so nothing was evaluated.",
    "tightest": "Tightest passing margin",
    "constraintSource": "limits from the demonstration model",
    "band": {
      "normal": "Normal",
      "recommended": "At the recommended ceiling",
      "warning": "Warning band",
      "critical": "Critical band",
      "beyond": "Beyond nameplate"
    },
    "verdict": {
      "valid": "Valid",
      "valid_with_warnings": "Valid with warnings",
      "rejected": "Rejected"
    },
    "constraints": "Constraints",
    "fleetTitle": "Closest to their ceilings",
    "fleetSubtitle": "Least headroom first across the fleet"
  },
  "evidence": {
    "title": "Evidence Mode",
    "subtitle": "The path this decision actually took, stage by stage",
    "chainTitle": "Evidence chain",
    "chainSubtitle": "Every step, with what it contributed and where that came from",
    "weakestLink": "Weakest link in the chain",
    "weakestNote": "A chain is only as strong as this.",
    "missingStages": "Stages that did not run",
    "measured": "Measured",
    "measuredTooltip": "Share of the chain that is instrument data rather than model output",
    "source": "Source",
    "stageLabel": "Stage",
    "value": "Value",
    "model": "Model",
    "derivedFrom": "Derived from",
    "reproducible": "Reproducible",
    "reproducibleNote": "The engine is deterministic: the same timestamp, asset and scenario reproduce this chain exactly.",
    "snapshot": "Data snapshot",
    "stage": {
      "input": "Inputs",
      "observation": "Observation",
      "data_quality": "Data quality",
      "dna": "Failure DNA",
      "prediction": "Prediction",
      "physics": "Physics",
      "twin": "Digital twin",
      "cascade": "Cascade",
      "simulation": "Simulation",
      "recommendation": "Recommendation",
      "impact": "Impact"
    },
    "relation": {
      "supports": "supported by",
      "derives": "derived from",
      "contradicts": "contradicted by",
      "constrains": "constrained by"
    }
  },
  "verification": {
    "title": "Model vs reality",
    "subtitle": "Every prediction, checked against what the grid actually did",
    "predicted": "Predicted",
    "observedCol": "Observed",
    "deviation": "Deviation",
    "channel": "Channel",
    "horizon": "Horizon",
    "status": "Status",
    "pending": "Pending",
    "verified": "Verified",
    "expired": "Unverifiable",
    "superseded": "Superseded",
    "meanError": "Mean absolute error",
    "bias": "Bias",
    "biasHint": "Positive means the model runs hot.",
    "coverage": "Interval coverage",
    "coverageHint": "How often the observation landed inside the stated band.",
    "calibrationGap": "Calibration gap",
    "calibrationHint": "Confidence claimed minus coverage achieved. Positive is overconfident.",
    "leadTime": "Mean lead time",
    "falsePositive": "False positive rate",
    "missRate": "Miss rate",
    "precision": "Precision",
    "underpowered": "Too few verified predictions to publish a rate. These figures are shown for completeness, not as a performance claim.",
    "errorOverTime": "Error over time",
    "fidelityOverTime": "Twin fidelity over time",
    "calibrationCurve": "Confidence calibration",
    "claimed": "Claimed",
    "achieved": "Achieved",
    "noSamples": "Nothing has been verified yet. Record a prediction and its horizon will close it.",
    "record": "Record a prediction",
    "recorded": "Recorded. It will be checked when its horizon arrives.",
    "worstChannel": "Worst channel"
  },
  "discovery": {
    "title": "Scenario Discovery Lab",
    "subtitle": "Let the twin look for the failures nobody has named",
    "discoverHidden": "Discover hidden risks",
    "findTriggers": "Find cascade triggers",
    "findBreaking": "Find breaking point",
    "findWorst": "Find worst combination",
    "findMinimum": "Find minimum failure conditions",
    "novelty": "Novelty",
    "riskScore": "Risk score",
    "plausibility": "Plausibility",
    "severity": "Severity",
    "reproducibility": "Reproducibility",
    "conditions": "Conditions",
    "newFinding": "New",
    "budget": "Budget",
    "simulations": "simulations",
    "exhausted": "Budget exhausted — the search stopped before exploring everything.",
    "complete": "Search space explored within budget.",
    "skipped": "combinations skipped as too implausible to be worth simulating",
    "empty": "No combination reached the reporting threshold. That is a result, not an error.",
    "sandbox": "Every search runs against the sandbox. Nothing here reaches a live state.",
    "objective": "Objective",
    "scope": "Scope",
    "national": "National",
    "runs": "Recent runs"
  },
  "adversarial": {
    "title": "Adversarial twin",
    "subtitle": "The least unusual conditions that break this asset",
    "whatBreaksFirst": "What breaks first?",
    "found": "Breaking combination found",
    "notFound": "No ordinary combination inside the search bounds reached the target.",
    "ordinariness": "Ordinariness",
    "ordinarinessHint": "A higher figure means a combination more likely to actually occur.",
    "evaluations": "Evaluations"
  },
  "redBlue": {
    "title": "Red team vs blue team",
    "subtitle": "Apply the stress, then search for the response that recovers best",
    "redTeam": "Red team",
    "blueTeam": "Blue team",
    "stress": "Stress",
    "before": "Before",
    "during": "During",
    "after": "After",
    "recovered": "Resilience recovered",
    "recovery": "Recovery time",
    "cost": "Cost",
    "customers": "Customers impacted",
    "recommended": "Recommended response",
    "noResponse": "No available response recovered the grid under this scenario.",
    "removed": "Resources this scenario removes",
    "observability": "Observability lost",
    "run": "Run the exchange"
  },
  "memory": {
    "title": "Decision memory",
    "subtitle": "What was decided, what happened, and what was learned",
    "similar": "Similar decisions",
    "similarSubtitle": "Past situations that rhyme with this one",
    "similarity": "Similarity",
    "whyMatch": "Why these match",
    "noMatches": "No past decision is close enough to this situation to be worth showing.",
    "outcome": "Outcome",
    "lessons": "Lessons",
    "strategyUsed": "Strategy used",
    "simulatedEvidence": "Simulated outcome — not a record of a prevented failure",
    "observedEvidence": "Observed outcome",
    "result": {
      "pending": "Pending",
      "prevented": "Prevented",
      "occurred": "Occurred",
      "partial": "Partial",
      "not_observed": "Not observed"
    }
  },
  "learning": {
    "title": "Learning candidates",
    "subtitle": "What the system believes it has learned, held for review",
    "governance": "No candidate changes a deployed model. Approval records a human decision and nothing more.",
    "proposed": "Proposed change",
    "evidence": "Evidence",
    "support": "Support",
    "events": "events",
    "approve": "Approve",
    "reject": "Reject",
    "reviewed": "Reviewed",
    "empty": "Nothing has met the evidence threshold for a proposal yet.",
    "simulatedCeiling": "Confidence is capped while the supporting evidence is entirely simulated.",
    "kind": {
      "pattern": "Pattern",
      "threshold": "Threshold",
      "strategy_preference": "Strategy preference",
      "dna_refinement": "DNA refinement",
      "envelope_adjustment": "Envelope adjustment"
    },
    "status": {
      "new": "New",
      "under_review": "Under review",
      "approved": "Approved",
      "rejected": "Rejected",
      "applied": "Applied"
    }
  },
  "dataHealth": {
    "title": "Data Health Command Center",
    "subtitle": "Whether the instrumentation is working, and whether it is telling the truth",
    "online": "Online",
    "offline": "Faulty",
    "stale": "Stale",
    "lowTrust": "Low trust",
    "missing": "Missing readings",
    "latency": "Mean latency",
    "coverage": "Coverage",
    "meanTrust": "Mean trust",
    "overdueCalibration": "Overdue calibration",
    "crossValidation": "Cross-sensor validation",
    "crossSubtitle": "A sensor that reports cleanly and is wrong is invisible to every check that looks only at its own record",
    "corroborated": "Corroborated",
    "sensor": "Sensor",
    "trust": "Trust",
    "calibrated": "Calibrated",
    "daysAgo": "days ago",
    "verdict": {
      "consistent": "Consistent",
      "sensor_suspect": "Sensor suspect",
      "model_suspect": "Model suspect",
      "asset_behaviour": "Asset behaviour",
      "insufficient_reference": "Cannot be checked"
    }
  },
  "governance": {
    "title": "AI Governance",
    "subtitle": "Models, drift and the change log",
    "models": "Models",
    "drift": "Drift",
    "driftSubtitle": "A reference window against a recent one",
    "baselineWindow": "Reference window",
    "recentWindow": "Recent window",
    "samples": "samples",
    "reliability": "Stated performance reliability",
    "reviewRecommended": "Review recommended",
    "noDrift": "No metric has moved beyond its review threshold.",
    "underpowered": "Not enough verified predictions in both windows to compare them.",
    "changeLog": "Change log",
    "lifecycle": "Lifecycle",
    "promote": "Promote",
    "noAutoDeploy": "There is no path from a drift signal to a deployment. Every transition below is a deliberate human act.",
    "kind": {
      "input": "Input drift",
      "prediction": "Prediction drift",
      "performance": "Performance drift",
      "twin": "Twin drift"
    },
    "severity": {
      "info": "Stable",
      "watch": "Watch",
      "review_recommended": "Review recommended"
    }
  },
  "pareto": {
    "title": "Pareto explorer",
    "subtitle": "The strategies where nothing else is better on every objective at once",
    "frontier": "On the frontier",
    "dominated": "Beaten on every objective",
    "rejected": "Rejected by physics",
    "whyNot": "Why not this one?",
    "corner": {
      "lowest_cost": "Lowest cost",
      "lowest_risk": "Lowest risk",
      "fastest_recovery": "Fastest recovery",
      "lowest_customer_impact": "Least customer impact",
      "balanced": "Balanced"
    },
    "tradeoffs": "Trade-off matrix",
    "tradeoffHint": "Normalised across this candidate set, oriented so a fuller bar is always better.",
    "empty": "No strategies to compare."
  },
  "cascadeTree": {
    "title": "Cascade probability tree",
    "subtitle": "Where it spreads, how likely each hop is, and where to cut it",
    "hopProbability": "This hop",
    "pathProbability": "Reaching here",
    "delay": "Delay",
    "breakpoints": "Break points",
    "breakpointsSubtitle": "Where the chain can be cut, and what it costs to cut it there",
    "bestBreak": "Best break point",
    "riskRemoved": "Impact removed",
    "branchesStopped": "Branches stopped",
    "intervention": "Intervention",
    "costIndex": "Cost",
    "infeasible": "Not a break point",
    "contained": "The cascade is contained at the origin — there is no chain to cut."
  },
  "askFuture": {
    "title": "Ask the future",
    "subtitle": "Take this asset forward and see what the twin expects",
    "ask": "What happens in the next hour?",
    "asking": "Walking the twin forward…",
    "expected": "Expected state",
    "risks": "Risks",
    "interventions": "Possible interventions"
  },
  "trustMe": {
    "title": "Why should I trust this?",
    "subtitle": "Everything behind the number, in one place",
    "open": "Why should I trust this?"
  },
  "impact": {
    "title": "Expected impact",
    "subtitle": "Kept in four families, because they are four different kinds of claim",
    "technical": "Technical",
    "operational": "Operational",
    "customer": "Customer",
    "financial": "Financial estimate",
    "maintenance": "Maintenance",
    "score": "Impact score",
    "howScored": "How the score is built",
    "assumptions": "Assumptions"
  },
  "riskHunter": {
    "title": "Autonomous Risk Hunter",
    "subtitle": "Searches for the failures nobody asked about, then finds the smallest thing that would stop each one.",
    "sandbox": "The hunter runs entirely in the simulation sandbox. It reads the model, writes findings, and cannot reach telemetry, an asset, an alert or a control action. It performs no cybersecurity function and issues no grid command.",
    "hunt": "Hunt",
    "hunting": "Hunting",
    "mode": "Search depth",
    "modeQuick": "Quick",
    "modeBalanced": "Balanced",
    "modeDeep": "Deep",
    "modeQuickNote": "24 simulations, under 4 seconds",
    "modeBalancedNote": "60 simulations, under 12 seconds",
    "modeDeepNote": "160 simulations, under 30 seconds",
    "scope": "Scope",
    "national": "Whole grid",
    "kind": "Looking for",
    "hidden_risk": "Hidden risk",
    "weakest_link": "Weakest link",
    "cascade_trigger": "Cascade triggers",
    "breaking_point": "Breaking point",
    "minimum_failure": "Smallest cause of failure",
    "prevention": "Preventable risk",
    "findings": "Findings",
    "noFindings": "This search found nothing new. That is a result, not a failure — it means the conditions searched are already covered.",
    "empty": "No hunts have been run yet. Choose a depth and start one.",
    "budget": "{run} of {budget} simulations in {ms} ms",
    "exhausted": "Budget exhausted — the search was cut short, so this is not an exhaustive sweep.",
    "complete": "Search completed within budget.",
    "skipped": "implausible combinations skipped",
    "novelty": "Novelty",
    "plausibility": "Plausibility",
    "severity": "Severity",
    "reproducibility": "Reproducibility",
    "confidence": "Confidence",
    "cascadeRisk": "Cascade probability",
    "assetsAffected": "Assets exposed",
    "depth": "Depth",
    "conditions": "Conditions",
    "failurePath": "Failure path",
    "weakestLink": "Weakest link",
    "criticality": "Criticality",
    "headroom": "Headroom to ceiling",
    "breakingPoint": "Breaks at",
    "breakingPointNone": "No breaking point within the range searched",
    "dependants": "Downstream assets",
    "recovery": "Recovery difficulty",
    "breakpoints": "Cascade break points",
    "breakpointNote": "Where the chain can be cut, ordered by how much risk cutting there removes.",
    "prevent": "Find the minimum prevention",
    "preventing": "Searching",
    "preventionTitle": "Minimum intervention",
    "preventionAchieved": "POTENTIAL FAILURE PREVENTED — SIMULATED",
    "preventionPartial": "Risk reduced but not below target — simulated",
    "preventionNone": "No intervention within the available resources brings this below target.",
    "preventionNote": "This is a simulated result. Nothing has been applied to the grid, and no failure has actually been prevented.",
    "doses": "What it would take",
    "utilisation": "of available",
    "riskBefore": "Risk before",
    "riskAfter": "Risk after",
    "cost": "Estimated cost",
    "history": "Previous hunts",
    "runAt": "Run",
    "simulatedBadge": "SIMULATED"
  },
  "proof": {
    "title": "Decision Proof",
    "subtitle": "Everything the platform relied on, frozen at the moment it made the call.",
    "note": "A proof is a snapshot, not a live view. It records the model version, the twin version, the data it read and the checks it ran, so the recommendation can be examined later against what was actually known at the time.",
    "create": "Freeze a proof",
    "creating": "Freezing",
    "created": "Proof frozen.",
    "empty": "No proofs have been frozen yet.",
    "proveIt": "PROVE IT",
    "bundle": "Evidence bundle",
    "modelVersion": "Model version",
    "twinVersion": "Twin version",
    "snapshot": "Data snapshot",
    "twinSnapshot": "Twin snapshot",
    "physics": "Physics verdict",
    "weakestLink": "Weakest link in the chain",
    "weakestLinkNote": "Confidence is capped by this, not averaged with it.",
    "measuredShare": "Measured rather than inferred",
    "measuredShareNote": "The share of the inputs behind this decision that came from an instrument rather than a model.",
    "riskBefore": "Risk before",
    "riskAfter": "Risk after",
    "recommendation": "Recommendation",
    "outcome": "Outcome",
    "frames": "Recorded events",
    "openReplay": "Replay this decision",
    "evidenceSimulated": "SIMULATED EVIDENCE",
    "evidenceObserved": "OBSERVED",
    "list": "Frozen proofs",
    "asset": "Asset",
    "frozenAt": "Frozen",
    "integrityValid": "INTEGRITY VERIFIED",
    "integrityBroken": "INTEGRITY CHECK FAILED",
    "integrityUnhashed": "NOT HASHED",
    "flowMethod": "Flow method",
    "convergence": "Convergence",
    "converged": "Converged",
    "notConverged": "Did not converge",
    "noFlow": "No load flow was solved",
    "impedanceSource": "Impedance",
    "impedance": {
      "typical": "Typical for the voltage class, not measured",
      "measured": "Measured on these assets"
    },
    "noStoredPhysics": "No electrical state was stored against this event."
  },
  "replay": {
    "title": "Decision Replay",
    "subtitle": "The whole incident, from the first signal to the outcome, at the speed you want to read it.",
    "note": "Replay reads the events recorded in the proof. It does not recompute them: a replay that re-derived each frame would be a fresh analysis wearing a timeline, and could disagree with the decision it claims to be replaying.",
    "play": "Play",
    "pause": "Pause",
    "restart": "Restart",
    "stepBack": "Previous event",
    "stepForward": "Next event",
    "speed": "Speed",
    "firstSignal": "First signal",
    "decisionPoint": "Decision",
    "outcomePoint": "Outcome",
    "preventionWindow": "Prevention window",
    "preventionWindowNote": "From the first signal the platform raised to the moment the failure was modelled to occur.",
    "noWindow": "No prevention window can be measured for this decision.",
    "duration": "Span",
    "stage": {
      "observation": "Observation",
      "weak_signal": "Weak signal",
      "dna": "Pattern match",
      "prediction": "Prediction",
      "uncertainty": "Uncertainty",
      "physics": "Physics check",
      "cascade": "Cascade analysis",
      "strategies": "Strategies",
      "simulation": "Simulation",
      "recommendation": "Recommendation",
      "decision": "Decision",
      "outcome": "Outcome"
    },
    "futures": "Three futures",
    "futuresNote": "Left: what the model said would happen. Middle: what the strategy was simulated to achieve. Right: the outcome recorded against this proof.",
    "futureWithout": "Without intervention",
    "futureWith": "With the strategy",
    "futureObserved": "Observed outcome",
    "futureSynthetic": "Synthetic outcome",
    "kindPredicted": "PREDICTED",
    "kindSimulated": "SIMULATED",
    "kindObserved": "OBSERVED",
    "kindSynthetic": "SYNTHETIC",
    "alternatives": "What else could have been done",
    "alternativesNote": "Every option that was on the table, ranked by resulting risk. The one taken is marked.",
    "chosen": "Taken",
    "lowestRisk": "Lowest risk",
    "deltaRisk": "vs taken",
    "similar": "Decisions like this one",
    "noSimilar": "Nothing comparable is on record yet.",
    "empty": "This proof has no recorded events.",
    "syntheticWarning": "The outcome recorded against this proof is synthetic. It is the shape an observed outcome would take, and it is never presented as a failure that was actually prevented."
  },
  "liveGrid": {
    "title": "NABDH Live 3D Grid",
    "subtitle": "Real-time digital twin energy command center.",
    "intro": "Every object in this scene is an asset in the twin. The numbers on it are the numbers the rest of the platform is reading, at the same instant.",
    "layers": "Electrical layers",
    "view": "View",
    "roleOperator": "Operator",
    "roleEngineer": "Engineer",
    "roleExecutive": "Executive",
    "quality": "Render quality",
    "qualityHigh": "High",
    "qualityBalanced": "Balanced",
    "qualityPerformance": "Performance",
    "renderer": "Renderer",
    "labelsOn": "Labels on",
    "labelsOff": "Labels off",
    "miniMap": "Grid mini-map",
    "webglUnsupported": "This browser does not offer WebGL, so the 2D network twin is shown instead. It carries the same assets, the same solved flow and the same readings — what it drops is depth and animation, not information.",
    "simulatedNotice": "SIMULATED. These figures come from a scenario or a strategy applied inside the sandbox. Nothing here has been applied to a grid and no failure has been prevented.",
    "predictedNotice": "PREDICTED. The scene is showing a projected state. The present is unchanged underneath it.",
    "demoSourceNotice": "Every source feeding this scene is a demonstration connector. It speaks the shape and units a real SCADA, weather or IoT feed would, and it reaches no external system.",
    "noSelection": "Nothing selected",
    "noSelectionBody": "Choose an asset in the scene to inspect its electrical state, trace its power and see what depends on it.",
    "mode": {
      "live": "LIVE",
      "demo": "DEMO",
      "simulation": "SIMULATION",
      "replay": "REPLAY"
    },
    "kind": {
      "observed": "OBSERVED",
      "synthetic": "SYNTHETIC",
      "simulated": "SIMULATED",
      "predicted": "PREDICTED"
    },
    "status": {
      "mode": "Mode",
      "dataSource": "Data source",
      "sourceLive": "LIVE",
      "sourceDemo": "DEMO",
      "sourceNone": "NONE",
      "connection": "Connection",
      "lastUpdate": "Last update",
      "latency": "Latency",
      "dataQuality": "Data quality",
      "twinFidelity": "Twin fidelity"
    },
    "stream": {
      "connecting": "Connecting",
      "connected": "Connected",
      "reconnecting": "Reconnecting",
      "disconnected": "Paused",
      "offline": "Offline",
      "stale": "Stale"
    },
    "layer": {
      "power_flow": "Power flow",
      "voltage": "Voltage",
      "current": "Current",
      "load": "Load",
      "frequency": "Frequency",
      "temperature": "Thermal",
      "health": "Health",
      "risk": "Risk",
      "failure_dna": "Failure DNA",
      "cascade": "Cascade",
      "predicted": "Predicted",
      "maintenance": "Maintenance",
      "data_quality": "Data quality",
      "xray": "X-ray"
    },
    "camera": {
      "overview": "Overview",
      "transformers": "Transformers",
      "switchyard": "Switchyard",
      "power_flow": "Power flow",
      "critical": "Critical",
      "cascade": "Cascade",
      "future": "Predicted"
    },
    "kpi": {
      "stability": "Grid stability",
      "demand": "Current demand",
      "capacity": "Available capacity",
      "renewables": "Renewables",
      "frequency": "System frequency",
      "activePower": "Active power",
      "reactivePower": "Reactive power",
      "assetsAtRisk": "Assets at risk",
      "criticalAlerts": "Critical alerts",
      "dataConfidence": "Data confidence"
    },
    "chart": {
      "voltage": "Voltage",
      "current": "Current",
      "activePower": "Active power",
      "reactivePower": "Reactive power",
      "frequency": "Frequency",
      "powerFactor": "Power factor",
      "temperature": "Temperature",
      "load": "Load",
      "risk": "Risk",
      "window": "Time window",
      "noSelection": "No asset selected",
      "selectHint": "Select an asset in the scene and every chart follows it."
    },
    "charts": "Live measurements",
    "chartsNote": "Sampled from the engine the scene reads, so the last point and the label above the asset are the same number.",
    "assetInspector": "Asset inspector",
    "lineInspector": "Line inspector",
    "connections": "Connected paths",
    "direction": "Direction",
    "utilisation": "Utilisation",
    "deviation": "Deviation",
    "health": "Health",
    "rul": "Remaining life",
    "soc": "State of charge",
    "dataQuality": "Data quality",
    "kind_": "Path type",
    "flow": {
      "forward": "Forward",
      "reverse": "Reversed",
      "idle": "No flow"
    },
    "timeMachine": "Time machine",
    "timeMachineNote": "A projection laid over the present, never an edit to it. The live state underneath is unchanged.",
    "ghostMode": "Ghost future",
    "current": "Current",
    "ghost": "Ghost future",
    "futureOnly": "Future only",
    "now": "NOW",
    "predictedAt": "Predicted at +{offset} min",
    "peakRisk": "Peak risk",
    "limitBreached": "A limit is breached at this offset",
    "scenarios": "Scenarios",
    "scenariosNote": "Reproducible conditions the model responds to. Nothing sets a risk number directly — the engines derive it.",
    "surpriseMe": "Surprise me",
    "cascade": "Cascade propagation",
    "nextPropagation": "Next propagation",
    "eta": "ETA",
    "confidence": "Confidence",
    "step": "Step",
    "breakPoint": "Recommended break point",
    "potential": {
      "high": "High intervention potential",
      "medium": "Medium intervention potential",
      "low": "Low intervention potential"
    },
    "showCascade": "Show cascade",
    "tracePower": "Trace power source",
    "showDependents": "Show dependent loads",
    "tracedSource": "Power source trace",
    "tracedDependents": "Dependent loads",
    "visualizePrevention": "Visualise prevention",
    "preventionTitle": "Prevention, simulated",
    "simulatedResult": "SIMULATED DEMO RESULT",
    "before": "Before",
    "after": "After",
    "bottlenecks": "bottlenecks",
    "redistributed": "Redistributed paths",
    "preventionNote": "A simulated result. Nothing has been applied to the grid, and no failure has actually been prevented.",
    "alerts": "Live alerts",
    "twinFidelity": "Twin fidelity",
    "weakestSource": "Weakest source",
    "fidelity": {
      "overall": "Overall",
      "sensorCoverage": "Sensor coverage",
      "freshness": "Freshness",
      "modelCoverage": "Model coverage",
      "topology": "Topology confidence"
    },
    "readOnly": "The live grid is read-only. NABDH sends no control command to any SCADA, EMS or DMS, and the final operational decision stays with a person."
  },
  "gridPhysics": {
    "title": "Grid Physics",
    "subtitle": "A solved AC load flow, the model behind it, and what a single failure would do.",
    "note": "Impedance is typical for each voltage class, not measured on these assets. Every result says which method produced it, and a case that did not converge is never shown as a solution.",
    "mode": "Method",
    "modeFast": "Fast",
    "modeAc": "AC load flow",
    "modeFastNote": "Demand allocation over the topology. Milliseconds, and no voltage angles.",
    "modeAcNote": "Newton–Raphson. Voltage magnitude and angle, reactive flow, real losses.",
    "solve": "Solve",
    "solving": "Solving",
    "solverStatus": "Solver",
    "iterations": "Iterations",
    "convergence": "Convergence",
    "tolerance": "Tolerance",
    "converged": "Converged",
    "notConverged": "Did not converge — these numbers are the solver's last iterate and are not a result",
    "areas": "Electrical areas",
    "areasNote": "A load flow needs one reference per synchronous system. Separate areas are solved separately.",
    "energised": "energised",
    "unsupplied": "unsupplied buses",
    "dispatchScaled": "generation re-dispatched to the area's own demand",
    "buses": "Buses",
    "branches": "Paths",
    "losses": "Losses",
    "generation": "Generation",
    "load": "Load",
    "voltageMagnitude": "Voltage",
    "voltageAngle": "Angle",
    "violations": "Voltage violations",
    "overloads": "Overloads",
    "noViolations": "Every bus is inside its statutory band.",
    "impedanceSource": "Impedance source",
    "slackReason": "Reference bus",
    "validate": "Model check",
    "validateNote": "What is wrong with the electrical model. Reported, never corrected.",
    "errors": "Errors",
    "warnings": "Warnings",
    "solvable": "Ready to solve",
    "notSolvable": "Not solvable as it stands",
    "calibration": "Calibration",
    "calibrationNote": "What each asset is asked to carry against what it is rated to carry. The seed is reported, not rewritten.",
    "calibrationRisk": "Calibration risk",
    "overRated": "carrying more than their rating",
    "shortfall": "Total shortfall",
    "band": {
      "ok": "Within rating",
      "tight": "Close to rating",
      "over": "Over rating",
      "impossible": "Far beyond rating"
    },
    "contingency": "Contingency analysis",
    "contingencyNote": "If any single thing fails right now, does the grid still stand?",
    "runN1": "Run N-1",
    "runN2": "Run N-2",
    "running": "Running",
    "scope": "Scope",
    "scanned": "Cases scanned",
    "secure": "Secure",
    "insecure": "Not secure",
    "outcome": {
      "secure": "Secure",
      "overload": "Overload",
      "voltage_violation": "Voltage violation",
      "unserved_load": "Unserved load",
      "islanded": "Islanded",
      "no_solution": "No solution"
    },
    "worstLoading": "Worst loading",
    "unservedMw": "Unserved",
    "stability": "Voltage stability",
    "stabilityNote": "The index follows the weakest bus, not the average — a network is as stable as its worst bus.",
    "stabilityIndex": "Stability index",
    "collapseRisk": "Collapse risk",
    "weakBuses": "Weakest buses",
    "margin": "Margin",
    "coverage": "Coverage",
    "thermal": "Thermal limits",
    "thermalNote": "Computed only where the data supports it. An asset with no thermal model says so rather than reporting a zero.",
    "headroom": "Headroom",
    "timeToLimit": "Time to limit",
    "noThermalData": "No thermal model",
    "balance": "Energy balance",
    "balanceNote": "Generation plus discharge against load, losses and charging. The residual is reported, not absorbed.",
    "balanceError": "Balance error",
    "stateEstimate": "Measured against estimated",
    "stateNote": "An estimated quantity has no instrument behind it and is never presented as measured.",
    "measured": "MEASURED",
    "estimated": "ESTIMATED",
    "observability": "Observability",
    "empty": "Run a solve to see the electrical state.",
    "horizon": "Horizon",
    "horizonNow": "Now"
  },
  "sensor": {
    "title": "Sensor",
    "inspector": "Sensor inspector",
    "kind": "Measurement",
    "asset": "Asset",
    "connector": "Connector",
    "protocol": "Protocol",
    "lastReading": "Last reading",
    "unit": "Unit",
    "timestamp": "Timestamp",
    "dataAge": "Data age",
    "quality": "Quality",
    "confidence": "Confidence",
    "health": "Health",
    "source": "Source",
    "mapping": "Mapping",
    "calibration": "Last calibrated",
    "neverCalibrated": "Never calibrated since installation",
    "status": "Status",
    "trust": "Trust score",
    "sampling": "Reporting interval",
    "accuracy": "Accuracy",
    "firmware": "Firmware",
    "readings": "Readings in window",
    "anomalies": "Findings",
    "noAnomalies": "Nothing wrong with this instrument's data.",
    "dataAnomaly": "DATA ANOMALY",
    "dataAnomalyNote": "A finding about the data, not about the plant. A frozen reading means the platform stopped learning about this asset — not that the asset stopped changing.",
    "originMeasured": "MEASURED",
    "originSynthetic": "SYNTHETIC",
    "statusValue": {
      "healthy": "Healthy",
      "noisy": "Noisy",
      "drifting": "Drifting",
      "stale": "Stale",
      "offline": "Offline",
      "low_trust": "Low trust"
    },
    "anomaly": {
      "frozen": "Frozen value",
      "drift": "Drift",
      "spike": "Spike",
      "noise": "Noise",
      "packet_loss": "Packet loss",
      "stale": "Stale reading",
      "timestamp_drift": "Timestamp drift",
      "impossible": "Impossible reading",
      "disagreement": "Disagrees with peers",
      "calibration_deviation": "Calibration overdue"
    },
    "injectFault": "Inject a fault",
    "injectNote": "Demonstration and simulation only. The live mode refuses this on the server — degrading an instrument that is feeding live decisions is not a demonstration.",
    "clearFault": "Clear fault",
    "faultActive": "Fault active",
    "faultRefused": "Fault injection is refused in this mode.",
    "fault": {
      "offline": "Offline",
      "frozen": "Frozen",
      "spike": "Spike",
      "drift": "Drift",
      "noise": "Noise",
      "delay": "Delayed",
      "loss": "Packet loss",
      "wrong_unit": "Wrong unit",
      "bad_timestamp": "Bad timestamp",
      "partial_data": "Partial data"
    },
    "provenance": "Where this came from",
    "provenanceNote": "The chain from instrument to recommendation. Its confidence is capped by the weakest link, not averaged — a recommendation resting on a drifting sensor cannot be more certain than that sensor.",
    "whichSensors": "Which sensors are behind this?",
    "weakestLink": "Weakest link",
    "stage": {
      "sensor": "Sensor",
      "gateway": "Gateway",
      "connector": "Connector",
      "mapping": "Mapping",
      "validation": "Validation",
      "twin_asset": "Twin asset",
      "physics_engine": "Physics",
      "risk_engine": "Risk",
      "recommendation": "Recommendation",
      "proof": "Proof"
    },
    "empty": "No instruments are registered on this asset.",
    "subtitle": "Instrument health and the chain from sensor to recommendation.",
    "mode": "Mode",
    "kindValue": {
      "voltage": "Voltage",
      "current": "Current",
      "temperature": "Temperature",
      "frequency": "Frequency",
      "power_meter": "Power meter",
      "protection_relay": "Protection relay",
      "weather": "Weather",
      "vibration": "Vibration",
      "partial_discharge": "Partial discharge"
    }
  },
  "compare": {
    "title": "Compare futures",
    "subtitle": "The same grid, the same instant, two decisions.",
    "left": "No intervention",
    "right": "Recommended intervention",
    "third": "Alternative strategy",
    "synced": "Cameras synchronised",
    "syncNote": "Orbit, zoom or focus either side and the other follows. Comparing two scenes from two viewpoints compares the viewpoints.",
    "difference": "Difference",
    "run": "Compare",
    "running": "Comparing",
    "simulated": "SIMULATED — nothing has been applied to a grid",
    "noDifference": "The two futures are identical on every measured quantity.",
    "empty": "Choose an asset and run a comparison.",
    "asset": "Plan against",
    "scenario": "Conditions",
    "strategy": "Strategy",
    "noStrategy": "The optimiser ranked no strategy with actions here.",
    "unavailable": "No future to draw",
    "actions": "Actions",
    "cost": "Cost",
    "executionMin": "Execution time",
    "confidence": "Confidence",
    "peakRisk": "Peak risk",
    "stability": "Stability",
    "load": "Load",
    "assetsAtRisk": "Assets at risk",
    "losses": "Losses",
    "changed": "Assets moved",
    "changedOf": "Showing {shown} of {total}",
    "showThird": "Third future",
    "thirdNote": "Solves a second strategy as well. One extra scene solve.",
    "improved": "Improved",
    "worsened": "Worsened",
    "unchanged": "Unchanged",
    "riskDelta": "Risk change",
    "webgl": "This browser could not open a 3D context. The comparison below is the same data as a table.",
    "table": "Difference table",
    "baselineLabel": "Baseline — the grid with nothing done to it",
    "layer": "Layer",
    "sameInstant": "Both panes: same twin, same instant, same stress. Only the decision differs."
  },
  "readiness": {
    "title": "Live readiness",
    "subtitle": "What each source would need before its readings could carry a decision.",
    "readOnly": "READ-ONLY",
    "nextStep": "Next step",
    "adapter": "Adapter",
    "transport": "Transport",
    "expectedLatency": "Expected latency",
    "reads": "Reads",
    "writes": "Writes",
    "noWrite": "None. This platform sends no command to SCADA, EMS or DMS.",
    "refuses": "Refuses",
    "state": {
      "not_configured": "Not configured",
      "incomplete": "Incomplete",
      "ready_to_test": "Ready to test",
      "demo_verified": "Verified on demo data",
      "live_ready": "Ready for live",
      "live": "Live"
    },
    "check": {
      "adapter": "Adapter",
      "endpoint": "Endpoint",
      "credential": "Credential reference",
      "certificate": "Certificate",
      "topic": "Topic",
      "point_map": "Point map",
      "reachable": "Reachable",
      "delivering": "Delivering",
      "quality": "Data quality",
      "latency": "Latency",
      "read_only": "Read-only"
    }
  },
  "storage": {
    "title": "Battery dispatch",
    "note": "What a storage unit could deliver, and for how long. A projection of the unit's own limits — nothing is sent to the battery.",
    "noCommand": "SIMULATED — NABDH sends no command to a battery. This is a projection of what the unit could do, not an instruction that it should.",
    "load": "Load units",
    "unit": "Unit",
    "request": "Request",
    "duration": "Window",
    "simulate": "Simulate dispatch",
    "delivered": "Delivered, mean",
    "sustained": "Held for",
    "soc": "State of charge",
    "cycles": "Equivalent cycles",
    "assumptions": "Assumptions",
    "empty": "Choose a unit and simulate a dispatch.",
    "limit": {
      "none": "—",
      "power": "Inverter rating",
      "energy": "Energy left",
      "soc_floor": "State-of-charge floor",
      "soc_ceiling": "State-of-charge ceiling",
      "outage": "Out of service"
    }
  },
  "validation": {
    "required": "This field is required.",
    "tooSmall": "This value is too short.",
    "tooLarge": "This value is too long.",
    "invalidType": "This value is not the expected kind.",
    "invalidFormat": "This value is not in the expected format.",
    "invalidValue": "This value is not accepted."
  }
}
