@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@500;700&family=Inter:wght@300;400;500&display=swap'); body { background: linear-gradient(rgba(5,25,50,0.85), rgba(5,25,50,0.85)), url('https://images.unsplash.com/photo-1532187863486-abf9dbad1b69'); background-size: cover; background-attachment: fixed; font-family: 'Inter', sans-serif; color: white; } /* Main Panel */ .gradio-container { max-width: 1250px; margin: auto; background: rgba(10,25,45,0.75); backdrop-filter: blur(12px); border-radius: 18px; padding: 30px; box-shadow: 0px 25px 60px rgba(0,0,0,0.7); border: 1px solid rgba(255,255,255,0.15); } /* Title */ h1 { font-family: 'Montserrat', sans-serif; font-size: 48px; font-weight: 700; text-align: center; background: linear-gradient(90deg, #4fc3f7, #29b6f6, #81d4fa); -webkit-background-clip: text; -webkit-text-fill-color: transparent; letter-spacing: 2px; margin-bottom: 5px; } .subtitle-text, .subtitle-text * { color: white !important; text-align: center; font-size: 18px; } .credits-text, .credits-text * { color: white !important; text-align: center; font-size: 15px; } /* Cards */ .chem-card { background: rgba(20,40,70,0.9) !important; border-radius: 16px !important; padding: 20px !important; box-shadow: 0px 10px 25px rgba(0,0,0,0.6) !important; border: 1px solid rgba(120,180,255,0.3) !important; transition: 0.3s; box-sizing: border-box !important; } .chem-card:hover { transform: translateY(-3px); box-shadow: 0px 20px 40px rgba(0,0,0,0.8) !important; } h3 { color: #4fc3f7; font-weight: 600; } textarea, input { background: #0d1b2a !important; color: white !important; border-radius: 10px !important; border: 1px solid #4fc3f7 !important; padding: 12px !important; font-size: 15px !important; } button { background: linear-gradient(45deg, #1976d2, #29b6f6) !important; color: white !important; border-radius: 10px !important; font-weight: 600 !important; padding: 12px 24px !important; border: none !important; box-shadow: 0px 5px 20px rgba(0,150,255,0.7); transition: 0.3s; } button:hover { background: linear-gradient(45deg, #42a5f5, #81d4fa) !important; transform: translateY(-2px); box-shadow: 0px 10px 30px rgba(0,150,255,0.9); } .examples { background: rgba(30,60,100,0.7); border-radius: 12px; border: 1px solid rgba(100,180,255,0.3); padding: 10px; } .footer-text, .footer-text * { color: white !important; text-align: center; font-size: 15px; } /* Cards stretch equally in the row */ #main-row { align-items: stretch !important; } #left-card, #right-card { flex: 1 1 0 !important; min-width: 0 !important; display: flex !important; flex-direction: column !important; box-sizing: border-box !important; } /* ============================================= REACTANT MOLECULE GRID The KEY fix: border-radius on the CONTAINER with overflow:hidden clips the cells cleanly. No per-cell radius needed at all. ============================================= */ .mol-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 2px; /* thin dark line between cells */ width: 100%; box-sizing: border-box; margin: 8px 0; background: rgba(10,25,45,0.9); /* gap colour matches card bg */ border-radius: 8px; /* rounds the whole grid as one unit */ overflow: hidden; /* clips cell corners — this is the fix */ } .mol-cell { background: white; aspect-ratio: 1 / 1; display: flex; align-items: center; justify-content: center; overflow: hidden; box-sizing: border-box; /* NO border-radius here — the container handles it */ } .mol-cell img { width: 100%; height: 100%; object-fit: contain; display: block; } .mol-invalid { color: #888; font-size: 12px; padding: 8px; text-align: center; } /* ============================================= PRODUCT IMAGE BOX ============================================= */ .product-box { width: 100%; box-sizing: border-box; background: white; border-radius: 8px; display: flex; align-items: center; justify-content: center; min-height: 300px; margin: 8px 0; overflow: hidden; } .product-box img { width: 100%; height: auto; display: block; object-fit: contain; } .product-placeholder { color: #aaa; font-size: 14px; } /* Strip Gradio wrapper chrome from HTML components */ .gr-html { padding: 0 !important; margin: 0 !important; background: transparent !important; border: none !important; box-shadow: none !important; }